€•Œ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/mm-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/mm-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/mm-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/mm-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/mm-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/mm-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/mm-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ŒMemory Management APIs”h]”hŒMemory Management APIs”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³Œ=/var/lib/git/docbuild/linux/Documentation/core-api/mm-api.rst”h´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒUser Space Memory Access”h]”hŒUser Space Memory Access”…”�”}”(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”Œget_user (C macro)”Œ c.get_user”hNt”auh1hÜhhËh²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒget_user”h]”hŒdesc_signature_line”“”)�”}”(hŒget_user”h]”hŒ desc_name”“”)�”}”(hŒget_user”h]”hŒ desc_sig_name”“”)�”}”(hhöh]”hŒget_user”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hþhhúh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´K[ubah}”(h]”h ]”h"]”h$]”h&]”jjŒ add_permalink”ˆuh1høŒsphinx_line_type”Œ declarator”hhôh²hh³jh´K[ubah}”(h]”hëah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1hòh³jh´K[hhïh²hubhŒ desc_content”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hhïh²hh³jh´K[ubeh}”(h]”h ]”(Œc”Œmacro”eh"]”h$]”h&]”Œdomain”jAŒobjtype”jBŒdesctype”jBŒnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1híh²hhhËh³Nh´NubhŒ paragraph”“”)�”}”(hŒ``get_user (x, ptr)``”h]”hŒliteral”“”)�”}”(hjPh]”hŒget_user (x, ptr)”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´K]hhËh²hubhŒ block_quote”“”)�”}”(hŒ'Get a simple variable from user space. ”h]”jM)�”}”(hŒ&Get a simple variable from user space.”h]”hŒ&Get a simple variable from user space.”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´K[hjjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j|h´K[hhËh²hubhŒ container”“”)�”}”(hXW**Parameters** ``x`` Variable to store result. ``ptr`` Source address, in user space. **Context** User context only. This function may sleep if pagefaults are enabled. **Description** This macro copies a single simple variable from user space to kernel space. It supports simple types like char and int, but not larger data types like structures or arrays. **ptr** must have pointer-to-simple-variable type, and the result of dereferencing **ptr** must be assignable to **x** without a cast. **Return** zero on success, or -EFAULT on error. On error, the variable **x** is set to zero.”h]”(jM)�”}”(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&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´K_hj…ubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒ ``x`` Variable to store result. ”h]”(hŒterm”“”)�”}”(hŒ``x``”h]”jS)�”}”(hj²h]”hŒx”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´K\hjªubhŒ definition”“”)�”}”(hhh]”jM)�”}”(hŒVariable to store result.”h]”hŒVariable to store result.”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÇh´K\hjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjªubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÇh´K\hj¥ubj©)�”}”(hŒ'``ptr`` Source address, in user space. ”h]”(j¯)�”}”(hŒ``ptr``”h]”jS)�”}”(hjíh]”hŒptr”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjëubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´K]hjçubjÉ)�”}”(hhh]”jM)�”}”(hŒSource address, in user space.”h]”hŒSource address, in user space.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jh´K]hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjçubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jh´K]hj¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj…ubjM)�”}”(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&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´K_hj…ubjM)�”}”(hŒEUser context only. This function may sleep if pagefaults are enabled.”h]”hŒEUser context only. This function may sleep if pagefaults are enabled.”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´K_hj…ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjOh]”hŒ Description”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´Kbhj…ubjM)�”}”(hŒ­This macro copies a single simple variable from user space to kernel space. It supports simple types like char and int, but not larger data types like structures or arrays.”h]”hŒ­This macro copies a single simple variable from user space to kernel space. It supports simple types like char and int, but not larger data types like structures or arrays.”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´Kahj…ubjM)�”}”(hŒ†**ptr** must have pointer-to-simple-variable type, and the result of dereferencing **ptr** must be assignable to **x** without a cast.”h]”(jŽ)�”}”(hŒ**ptr**”h]”hŒptr”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjtubhŒL must have pointer-to-simple-variable type, and the result of dereferencing ”…”�”}”(hjth²hh³Nh´NubjŽ)�”}”(hŒ**ptr**”h]”hŒptr”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjtubhŒ must be assignable to ”…”�”}”(hjth²hh³Nh´NubjŽ)�”}”(hŒ**x**”h]”hŒx”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjtubhŒ without a cast.”…”�”}”(hjth²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´Kehj…ubjM)�”}”(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&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´Khhj…ubjM)�”}”(hŒRzero on success, or -EFAULT on error. On error, the variable **x** is set to zero.”h]”(hŒ=zero on success, or -EFAULT on error. On error, the variable ”…”�”}”(hjÍh²hh³Nh´NubjŽ)�”}”(hŒ**x**”h]”hŒx”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÍubhŒ is set to zero.”…”�”}”(hjÍh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´Kihj…ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ__get_user (C macro)”Œ c.__get_user”hNt”auh1hÜhhËh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ __get_user”h]”hù)�”}”(hŒ __get_user”h]”hÿ)�”}”(hŒ __get_user”h]”j)�”}”(hjh]”hŒ __get_user”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´Koubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjh²hh³j%h´Koubah}”(h]”jah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j%h´Kohjh²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hjh²hh³j%h´Koubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGj>jHj>jI‰jJ‰jK‰uh1híh²hhhËh³Nh´NubjM)�”}”(hŒ``__get_user (x, ptr)``”h]”jS)�”}”(hjDh]”hŒ__get_user (x, ptr)”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KqhhËh²hubji)�”}”(hŒ;Get a simple variable from user space, with less checking. ”h]”jM)�”}”(hŒ:Get a simple variable from user space, with less checking.”h]”hŒ:Get a simple variable from user space, with less checking.”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KohjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jlh´KohhËh²hubj„)�”}”(hX¥**Parameters** ``x`` Variable to store result. ``ptr`` Source address, in user space. **Context** User context only. This function may sleep if pagefaults are enabled. **Description** This macro copies a single simple variable from user space to kernel space. It supports simple types like char and int, but not larger data types like structures or arrays. **ptr** must have pointer-to-simple-variable type, and the result of dereferencing **ptr** must be assignable to **x** without a cast. Caller must check the pointer with access_ok() before calling this function. **Return** zero on success, or -EFAULT on error. On error, the variable **x** is set to zero.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjyh]”hŒ Parameters”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´Kshjsubj¤)�”}”(hhh]”(j©)�”}”(hŒ ``x`` Variable to store result. ”h]”(j¯)�”}”(hŒ``x``”h]”jS)�”}”(hj˜h]”hŒx”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´Kphj’ubjÉ)�”}”(hhh]”jM)�”}”(hŒVariable to store result.”h]”hŒVariable to store result.”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j­h´Kphj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j­h´Kphj�ubj©)�”}”(hŒ'``ptr`` Source address, in user space. ”h]”(j¯)�”}”(hŒ``ptr``”h]”jS)�”}”(hjÑh]”hŒptr”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KqhjËubjÉ)�”}”(hhh]”jM)�”}”(hŒSource address, in user space.”h]”hŒSource address, in user space.”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jæh´Kqhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjËubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jæh´Kqhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjsubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hj h]”hŒContext”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KshjsubjM)�”}”(hŒEUser context only. This function may sleep if pagefaults are enabled.”h]”hŒEUser context only. This function may sleep if pagefaults are enabled.”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KshjsubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj3h]”hŒ Description”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KvhjsubjM)�”}”(hŒ­This macro copies a single simple variable from user space to kernel space. It supports simple types like char and int, but not larger data types like structures or arrays.”h]”hŒ­This macro copies a single simple variable from user space to kernel space. It supports simple types like char and int, but not larger data types like structures or arrays.”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KuhjsubjM)�”}”(hŒ†**ptr** must have pointer-to-simple-variable type, and the result of dereferencing **ptr** must be assignable to **x** without a cast.”h]”(jŽ)�”}”(hŒ**ptr**”h]”hŒptr”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjXubhŒL must have pointer-to-simple-variable type, and the result of dereferencing ”…”�”}”(hjXh²hh³Nh´NubjŽ)�”}”(hŒ**ptr**”h]”hŒptr”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjXubhŒ must be assignable to ”…”�”}”(hjXh²hh³Nh´NubjŽ)�”}”(hŒ**x**”h]”hŒx”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjXubhŒ without a cast.”…”�”}”(hjXh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KyhjsubjM)�”}”(hŒLCaller must check the pointer with access_ok() before calling this function.”h]”hŒLCaller must check the pointer with access_ok() before calling this function.”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´K|hjsubjM)�”}”(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&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KhjsubjM)�”}”(hŒRzero on success, or -EFAULT on error. On error, the variable **x** is set to zero.”h]”(hŒ=zero on success, or -EFAULT on error. On error, the variable ”…”�”}”(hjÀh²hh³Nh´NubjŽ)�”}”(hŒ**x**”h]”hŒx”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÀubhŒ is set to zero.”…”�”}”(hjÀh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´K€hjsubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒput_user (C macro)”Œ c.put_user”hNt”auh1hÜhhËh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒput_user”h]”hù)�”}”(hŒput_user”h]”hÿ)�”}”(hŒput_user”h]”j)�”}”(hjûh]”hŒput_user”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjýh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KÀubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjùh²hh³jh´KÀubah}”(h]”jôah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jh´KÀhjöh²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hjöh²hh³jh´KÀubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGj1jHj1jI‰jJ‰jK‰uh1híh²hhhËh³Nh´NubjM)�”}”(hŒ``put_user (x, ptr)``”h]”jS)�”}”(hj7h]”hŒput_user (x, ptr)”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KÂhhËh²hubji)�”}”(hŒ&Write a simple value into user space. ”h]”jM)�”}”(hŒ%Write a simple value into user space.”h]”hŒ%Write a simple value into user space.”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KÀhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j_h´KÀhhËh²hubj„)�”}”(hX **Parameters** ``x`` Value to copy to user space. ``ptr`` Destination address, in user space. **Context** User context only. This function may sleep if pagefaults are enabled. **Description** This macro copies a single simple value from kernel space to user space. It supports simple types like char and int, but not larger data types like structures or arrays. **ptr** must have pointer-to-simple-variable type, and **x** must be assignable to the result of dereferencing **ptr**. **Return** zero on success, or -EFAULT on error.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjlh]”hŒ Parameters”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjjubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KÄhjfubj¤)�”}”(hhh]”(j©)�”}”(hŒ#``x`` Value to copy to user space. ”h]”(j¯)�”}”(hŒ``x``”h]”jS)�”}”(hj‹h]”hŒx”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KÁhj…ubjÉ)�”}”(hhh]”jM)�”}”(hŒValue to copy to user space.”h]”hŒValue to copy to user space.”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j h´KÁhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j h´KÁhj‚ubj©)�”}”(hŒ,``ptr`` Destination address, in user space. ”h]”(j¯)�”}”(hŒ``ptr``”h]”jS)�”}”(hjÄh]”hŒptr”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KÂhj¾ubjÉ)�”}”(hhh]”jM)�”}”(hŒ#Destination address, in user space.”h]”hŒ#Destination address, in user space.”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÙh´KÂhjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÙh´KÂhj‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjfubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjÿh]”hŒContext”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjýubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KÄhjfubjM)�”}”(hŒEUser context only. This function may sleep if pagefaults are enabled.”h]”hŒEUser context only. This function may sleep if pagefaults are enabled.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KÄhjfubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj&h]”hŒ Description”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KÇhjfubjM)�”}”(hŒªThis macro copies a single simple value from kernel space to user space. It supports simple types like char and int, but not larger data types like structures or arrays.”h]”hŒªThis macro copies a single simple value from kernel space to user space. It supports simple types like char and int, but not larger data types like structures or arrays.”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KÆhjfubjM)�”}”(hŒw**ptr** must have pointer-to-simple-variable type, and **x** must be assignable to the result of dereferencing **ptr**.”h]”(jŽ)�”}”(hŒ**ptr**”h]”hŒptr”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjKubhŒ0 must have pointer-to-simple-variable type, and ”…”�”}”(hjKh²hh³Nh´NubjŽ)�”}”(hŒ**x**”h]”hŒx”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjKubhŒ3 must be assignable to the result of dereferencing ”…”�”}”(hjKh²hh³Nh´NubjŽ)�”}”(hŒ**ptr**”h]”hŒptr”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjKubhŒ.”…”�”}”(hjKh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KÊhjfubjM)�”}”(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&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KÍhjfubjM)�”}”(hŒ%zero on success, or -EFAULT on error.”h]”hŒ%zero on success, or -EFAULT on error.”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KÎhjfubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ__put_user (C macro)”Œ c.__put_user”hNt”auh1hÜhhËh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ __put_user”h]”hù)�”}”(hŒ __put_user”h]”hÿ)�”}”(hŒ __put_user”h]”j)�”}”(hjÍh]”hŒ __put_user”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÓubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÏh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KÓubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjËh²hh³jêh´KÓubah}”(h]”jÆah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jêh´KÓhjÈh²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÈh²hh³jêh´KÓubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGjjHjjI‰jJ‰jK‰uh1híh²hhhËh³Nh´NubjM)�”}”(hŒ``__put_user (x, ptr)``”h]”jS)�”}”(hj h]”hŒ__put_user (x, ptr)”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KÕhhËh²hubji)�”}”(hŒ:Write a simple value into user space, with less checking. ”h]”jM)�”}”(hŒ9Write a simple value into user space, with less checking.”h]”hŒ9Write a simple value into user space, with less checking.”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KÓhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j1h´KÓhhËh²hubj„)�”}”(hXn**Parameters** ``x`` Value to copy to user space. ``ptr`` Destination address, in user space. **Context** User context only. This function may sleep if pagefaults are enabled. **Description** This macro copies a single simple value from kernel space to user space. It supports simple types like char and int, but not larger data types like structures or arrays. **ptr** must have pointer-to-simple-variable type, and **x** must be assignable to the result of dereferencing **ptr**. Caller must check the pointer with access_ok() before calling this function. **Return** zero on success, or -EFAULT on error.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj>h]”hŒ Parameters”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´K×hj8ubj¤)�”}”(hhh]”(j©)�”}”(hŒ#``x`` Value to copy to user space. ”h]”(j¯)�”}”(hŒ``x``”h]”jS)�”}”(hj]h]”hŒx”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KÔhjWubjÉ)�”}”(hhh]”jM)�”}”(hŒValue to copy to user space.”h]”hŒValue to copy to user space.”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jrh´KÔhjsubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjWubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jrh´KÔhjTubj©)�”}”(hŒ,``ptr`` Destination address, in user space. ”h]”(j¯)�”}”(hŒ``ptr``”h]”jS)�”}”(hj–h]”hŒptr”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KÕhj�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ#Destination address, in user space.”h]”hŒ#Destination address, in user space.”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j«h´KÕhj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j«h´KÕhjTubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj8ubjM)�”}”(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&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´K×hj8ubjM)�”}”(hŒEUser context only. This function may sleep if pagefaults are enabled.”h]”hŒEUser context only. This function may sleep if pagefaults are enabled.”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´K×hj8ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjøh]”hŒ Description”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjöubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KÚhj8ubjM)�”}”(hŒªThis macro copies a single simple value from kernel space to user space. It supports simple types like char and int, but not larger data types like structures or arrays.”h]”hŒªThis macro copies a single simple value from kernel space to user space. It supports simple types like char and int, but not larger data types like structures or arrays.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KÙhj8ubjM)�”}”(hŒw**ptr** must have pointer-to-simple-variable type, and **x** must be assignable to the result of dereferencing **ptr**.”h]”(jŽ)�”}”(hŒ**ptr**”h]”hŒptr”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubhŒ0 must have pointer-to-simple-variable type, and ”…”�”}”(hjh²hh³Nh´NubjŽ)�”}”(hŒ**x**”h]”hŒx”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubhŒ3 must be assignable to the result of dereferencing ”…”�”}”(hjh²hh³Nh´NubjŽ)�”}”(hŒ**ptr**”h]”hŒptr”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubhŒ.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´KÝhj8ubjM)�”}”(hŒLCaller must check the pointer with access_ok() before calling this function.”h]”hŒLCaller must check the pointer with access_ok() before calling this function.”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´Kàhj8ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjoh]”hŒReturn”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjmubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´Kãhj8ubjM)�”}”(hŒ%zero on success, or -EFAULT on error.”h]”hŒ%zero on success, or -EFAULT on error.”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´Kähj8ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒclear_user (C function)”Œ c.clear_user”hNt”auh1hÜhhËh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ;unsigned long clear_user (void __user *to, unsigned long n)”h]”hù)�”}”(hŒ:unsigned long clear_user(void __user *to, unsigned long n)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1j´hj°h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.c”h´K4ubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1jÆhj°h²hh³jÅh´K4ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj°h²hh³jÅh´K4ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj°h²hh³jÅh´K4ubhÿ)�”}”(hŒ clear_user”h]”j)�”}”(hŒ clear_user”h]”hŒ clear_user”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjóubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj°h²hh³jÅh´K4ubhŒdesc_parameterlist”“”)�”}”(hŒ"(void __user *to, unsigned long n)”h]”(hŒdesc_parameter”“”)�”}”(hŒvoid __user *to”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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Œ__user”…”�”}”(hj h²hh³Nh´NubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7 h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj ubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hjG h²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1jE hj ubj)�”}”(hŒto”h]”hŒto”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj ubj )�”}”(hŒunsigned long n”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjo h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjk ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj} h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjk ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjk ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™ h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjk ubj)�”}”(hjh]”hŒn”…”�”}”(hj§ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjk ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj°h²hh³jÅh´K4ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¬h²hh³jÅh´K4ubah}”(h]”j§ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÅh´K4hj©h²hubj4)�”}”(hhh]”jM)�”}”(hŒ%Zero a block of memory in user space.”h]”hŒ%Zero a block of memory in user space.”…”�”}”(hjÐ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.c”h´K4hjÍ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj©h²hh³jÅh´K4ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjè jHjè jI‰jJ‰jK‰uh1híh²hhhËh³Nh´Nubj„)�”}”(hX**Parameters** ``void __user *to`` Destination address, in user space. ``unsigned long n`` Number of bytes to zero. **Description** Zero a block of memory in user space. **Return** number of bytes that could not be cleared. On success, this will be zero.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjò h]”hŒ Parameters”…”�”}”(hjô h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjð ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.c”h´K8hjì ubj¤)�”}”(hhh]”(j©)�”}”(hŒ8``void __user *to`` Destination address, in user space. ”h]”(j¯)�”}”(hŒ``void __user *to``”h]”jS)�”}”(hj h]”hŒvoid __user *to”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.c”h´K5hj ubjÉ)�”}”(hhh]”jM)�”}”(hŒ#Destination address, in user space.”h]”hŒ#Destination address, in user space.”…”�”}”(hj* h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j& h´K5hj' ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j& h´K5hj ubj©)�”}”(hŒ-``unsigned long n`` Number of bytes to zero. ”h]”(j¯)�”}”(hŒ``unsigned long n``”h]”jS)�”}”(hjJ h]”hŒunsigned long n”…”�”}”(hjL h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjH ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.c”h´K6hjD ubjÉ)�”}”(hhh]”jM)�”}”(hŒNumber of bytes to zero.”h]”hŒNumber of bytes to zero.”…”�”}”(hjc h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j_ h´K6hj` ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjD ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j_ h´K6hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjì ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj… h]”hŒ Description”…”�”}”(hj‡ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjƒ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.c”h´K8hjì ubjM)�”}”(hŒ%Zero a block of memory in user space.”h]”hŒ%Zero a block of memory in user space.”…”�”}”(hj› h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.c”h´K7hjì ubjM)�”}”(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&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.c”h´K9hjì ubjM)�”}”(hŒInumber of bytes that could not be cleared. On success, this will be zero.”h]”hŒInumber of bytes that could not be cleared. On success, this will be zero.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.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”]”(héŒ__clear_user (C function)”Œc.__clear_user”hNt”auh1hÜhhËh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ=unsigned long __clear_user (void __user *to, unsigned long n)”h]”hù)�”}”(hŒ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.c”h´KIhj: ubjÉ)�”}”(hhh]”jM)�”}”(hŒ#Destination address, in user space.”h]”hŒ#Destination address, in user space.”…”�”}”(hjY h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jU h´KIhjV ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj: ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jU h´KIhj7 ubj©)�”}”(hŒ-``unsigned long n`` Number of bytes to zero. ”h]”(j¯)�”}”(hŒ``unsigned long n``”h]”jS)�”}”(hjy h]”hŒunsigned long n”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjw ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.c”h´KJhjs ubjÉ)�”}”(hhh]”jM)�”}”(hŒNumber of bytes to zero.”h]”hŒNumber of bytes to zero.”…”�”}”(hj’ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jŽ h´KJhj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjs ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŽ h´KJhj7 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj´ h]”hŒ Description”…”�”}”(hj¶ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj² ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.c”h´KLhj ubjM)�”}”(hŒ{Zero a block of memory in user space. Caller must check the specified block with access_ok() before calling this function.”h]”hŒ{Zero a block of memory in user space. Caller must check the specified block with access_ok() before calling this function.”…”�”}”(hjÊ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.c”h´KKhj ubjM)�”}”(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&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.c”h´KNhj ubjM)�”}”(hŒInumber of bytes that could not be cleared. On success, this will be zero.”h]”hŒInumber of bytes that could not be cleared. On success, this will be zero.”…”�”}”(hjñ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./arch/x86/lib/usercopy_32.c”h´KOhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ get_user_pages_fast (C function)”Œc.get_user_pages_fast”hNt”auh1hÜhhËh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒhint get_user_pages_fast (unsigned long start, int nr_pages, unsigned int gup_flags, struct page **pages)”h]”hù)�”}”(hŒgint get_user_pages_fast(unsigned long start, int nr_pages, unsigned int gup_flags, struct page **pages)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj h²hh³ŒH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.c”h´M½ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/ h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj h²hh³j. h´M½ ubhÿ)�”}”(hŒget_user_pages_fast”h]”j)�”}”(hŒget_user_pages_fast”h]”hŒget_user_pages_fast”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj= ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj h²hh³j. h´M½ ubj )�”}”(hŒP(unsigned long start, int nr_pages, unsigned int gup_flags, struct page **pages)”h]”(j )�”}”(hŒunsigned long start”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj] h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjY ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjk h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjY ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjy h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjY ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡ h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjY ubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj• h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjY ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjU ubj )�”}”(hŒ int nr_pages”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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ª ubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hjÊ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjª ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjU ubj )�”}”(hŒunsigned int gup_flags”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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ß ubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(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ß ubj)�”}”(hŒ gup_flags”h]”hŒ gup_flags”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjß ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjU ubj )�”}”(hŒstruct page **pages”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1j4hj0ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj0ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjSubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”Œ identifier”Œ reftarget”jXŒmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”jqŒ ASTIdentifier”“”)�”}”jljC sbŒc.get_user_pages_fast”†”asbuh1hhj0ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj0ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj0ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj0ubj)�”}”(hŒpages”h]”hŒpages”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjU ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj h²hh³j. h´M½ ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj h²hh³j. h´M½ ubah}”(h]”j ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j. h´M½ hj h²hubj4)�”}”(hhh]”jM)�”}”(hŒpin user pages in memory”h]”hŒpin user pages in memory”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.c”h´M½ hjÍh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj h²hh³j. h´M½ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjèjHjèjI‰jJ‰jK‰uh1híh²hhhËh³Nh´Nubj„)�”}”(hXl**Parameters** ``unsigned long start`` starting user address ``int nr_pages`` number of pages from start to pin ``unsigned int gup_flags`` flags modifying pin behaviour ``struct page **pages`` array that receives pointers to the pages pinned. Should be at least nr_pages long. **Description** Attempt to pin user pages in memory without taking mm->mmap_lock. If not successful, it will fall back to taking the lock and calling get_user_pages(). Returns number of pages pinned. This may be fewer than the number requested. If nr_pages is 0 or negative, returns 0. If no pages were pinned, returns -errno.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjòh]”hŒ Parameters”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjðubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.c”h´MÁ hjìubj¤)�”}”(hhh]”(j©)�”}”(hŒ.``unsigned long start`` starting user address ”h]”(j¯)�”}”(hŒ``unsigned long start``”h]”jS)�”}”(hjh]”hŒunsigned long start”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.c”h´M¾ hj ubjÉ)�”}”(hhh]”jM)�”}”(hŒstarting user address”h]”hŒstarting user address”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j&h´M¾ hj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j&h´M¾ hjubj©)�”}”(hŒ3``int nr_pages`` number of pages from start to pin ”h]”(j¯)�”}”(hŒ``int nr_pages``”h]”jS)�”}”(hjJh]”hŒ int nr_pages”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjHubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.c”h´M¿ hjDubjÉ)�”}”(hhh]”jM)�”}”(hŒ!number of pages from start to pin”h]”hŒ!number of pages from start to pin”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j_h´M¿ hj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjDubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j_h´M¿ hjubj©)�”}”(hŒ9``unsigned int gup_flags`` flags modifying pin behaviour ”h]”(j¯)�”}”(hŒ``unsigned int gup_flags``”h]”jS)�”}”(hjƒh]”hŒunsigned int gup_flags”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.c”h´MÀ hj}ubjÉ)�”}”(hhh]”jM)�”}”(hŒflags modifying pin behaviour”h]”hŒflags modifying pin behaviour”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j˜h´MÀ hj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j˜h´MÀ hjubj©)�”}”(hŒl``struct page **pages`` array that receives pointers to the pages pinned. Should be at least nr_pages long. ”h]”(j¯)�”}”(hŒ``struct page **pages``”h]”jS)�”}”(hj¼h]”hŒstruct page **pages”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjºubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.c”h´M hj¶ubjÉ)�”}”(hhh]”jM)�”}”(hŒSarray that receives pointers to the pages pinned. Should be at least nr_pages long.”h]”hŒSarray that receives pointers to the pages pinned. Should be at least nr_pages long.”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.c”h´MÁ hjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÑh´M hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjìubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjøh]”hŒ Description”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjöubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.c”h´MÄ hjìubjM)�”}”(hŒ—Attempt to pin user pages in memory without taking mm->mmap_lock. If not successful, it will fall back to taking the lock and calling get_user_pages().”h]”hŒ—Attempt to pin user pages in memory without taking mm->mmap_lock. If not successful, it will fall back to taking the lock and calling get_user_pages().”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.c”h´Mà hjìubjM)�”}”(hŒžReturns number of pages pinned. This may be fewer than the number requested. If nr_pages is 0 or negative, returns 0. If no pages were pinned, returns -errno.”h]”hŒžReturns number of pages pinned. This may be fewer than the number requested. If nr_pages is 0 or negative, returns 0. If no pages were pinned, returns -errno.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./mm/gup.c”h´MÇ hjìubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhhËh²hh³Nh´NubhŒtarget”“”)�”}”(hŒ.. _mm-api-gfp-flags:”h]”h}”(h]”h ]”h"]”h$]”h&]”Œrefid”Œmm-api-gfp-flags”uh1j3h´KhhËh²hh³hÊubeh}”(h]”Œuser-space-memory-access”ah ]”h"]”Œuser space memory access”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒMemory Allocation Controls”h]”hŒMemory Allocation Controls”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjIh²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ!Page mobility and placement hints”h]”hŒ!Page mobility and placement hints”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjZh³Nh´NubjM)�”}”(hŒ­These flags provide hints about how mobile the page is. Pages with similar mobility are placed within the same pageblocks to minimise problems due to external fragmentation.”h]”hŒ­These flags provide hints about how mobile the page is. Pages with similar mobility are placed within the same pageblocks to minimise problems due to external fragmentation.”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:22: ./include/linux/gfp_types.h”h´KthjZubjM)�”}”(hŒ�``__GFP_MOVABLE`` (also a zone modifier) indicates that the page can be moved by page migration during memory compaction or can be reclaimed.”h]”(jS)�”}”(hŒ``__GFP_MOVABLE``”h]”hŒ __GFP_MOVABLE”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjzubhŒ| (also a zone modifier) indicates that the page can be moved by page migration during memory compaction or can be reclaimed.”…”�”}”(hjzh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:22: ./include/linux/gfp_types.h”h´KxhjZubjM)�”}”(hŒ€``__GFP_RECLAIMABLE`` is used for slab allocations that specify SLAB_RECLAIM_ACCOUNT and whose pages can be freed via shrinkers.”h]”(jS)�”}”(hŒ``__GFP_RECLAIMABLE``”h]”hŒ__GFP_RECLAIMABLE”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj—ubhŒk is used for slab allocations that specify SLAB_RECLAIM_ACCOUNT and whose pages can be freed via shrinkers.”…”�”}”(hj—h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:22: ./include/linux/gfp_types.h”h´K{hjZubjM)�”}”(hŒÌ``__GFP_WRITE`` indicates the caller intends to dirty the page. Where possible, these pages will be spread between local zones to avoid all the dirty pages being in one zone (fair zone allocation policy).”h]”(jS)�”}”(hŒ``__GFP_WRITE``”h]”hŒ __GFP_WRITE”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj´ubhŒ½ indicates the caller intends to dirty the page. Where possible, these pages will be spread between local zones to avoid all the dirty pages being in one zone (fair zone allocation policy).”…”�”}”(hj´h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:22: ./include/linux/gfp_types.h”h´K~hjZubjM)�”}”(hŒ@``__GFP_HARDWALL`` enforces the cpuset memory allocation policy.”h]”(jS)�”}”(hŒ``__GFP_HARDWALL``”h]”hŒ__GFP_HARDWALL”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÑubhŒ. enforces the cpuset memory allocation policy.”…”�”}”(hjÑh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:22: ./include/linux/gfp_types.h”h´K‚hjZubjM)�”}”(hŒ„``__GFP_THISNODE`` forces the allocation to be satisfied from the requested node with no fallbacks or placement policy enforcements.”h]”(jS)�”}”(hŒ``__GFP_THISNODE``”h]”hŒ__GFP_THISNODE”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjîubhŒr forces the allocation to be satisfied from the requested node with no fallbacks or placement policy enforcements.”…”�”}”(hjîh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:22: ./include/linux/gfp_types.h”h´K„hjZubjM)�”}”(hŒU``__GFP_ACCOUNT`` causes the allocation to be accounted to the active cgroup context.”h]”(jS)�”}”(hŒ``__GFP_ACCOUNT``”h]”hŒ __GFP_ACCOUNT”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj ubhŒD causes the allocation to be accounted to the active cgroup context.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:22: ./include/linux/gfp_types.h”h´K‡hjZubeh}”(h]”Œ!page-mobility-and-placement-hints”ah ]”h"]”Œ!page mobility and placement hints”ah$]”h&]”uh1hµhjIh²hh³Nh´Nubh¶)�”}”(hhh]”(h»)�”}”(hŒ ``PAGE_ALLOC_COSTLY_ORDER``). !costly allocations are too essential to fail so they are implicitly non-failing by default (with some exceptions like OOM victims might fail so the caller still has to check for failures) while costly requests try to be not disruptive and back off even without invoking the OOM killer. The following three modifiers might be used to override some of these implicit rules. Please note that all of them must be used along with ``__GFP_DIRECT_RECLAIM`` flag.”h]”(hŒ|The default allocator behavior depends on the request size. We have a concept of so-called costly allocations (with order > ”…”�”}”(hj‡h²hh³Nh´NubjS)�”}”(hŒ``PAGE_ALLOC_COSTLY_ORDER``”h]”hŒPAGE_ALLOC_COSTLY_ORDER”…”�”}”(hj�h²h•\h³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‡ubhX­). !costly allocations are too essential to fail so they are implicitly non-failing by default (with some exceptions like OOM victims might fail so the caller still has to check for failures) while costly requests try to be not disruptive and back off even without invoking the OOM killer. The following three modifiers might be used to override some of these implicit rules. Please note that all of them must be used along with ”…”�”}”(hj‡h²hh³Nh´NubjS)�”}”(hŒ``__GFP_DIRECT_RECLAIM``”h]”hŒ__GFP_DIRECT_RECLAIM”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‡ubhŒ flag.”…”�”}”(hj‡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:28: ./include/linux/gfp_types.h”h´KÇhj²ubjM)�”}”(hX�``__GFP_NORETRY``: The VM implementation will try only very lightweight memory direct reclaim to get some memory under memory pressure (thus it can sleep). It will avoid disruptive actions like OOM killer. The caller must handle the failure which is quite likely to happen under heavy memory pressure. The flag is suitable when failure can easily be handled at small cost, such as reduced throughput.”h]”(jS)�”}”(hŒ``__GFP_NORETRY``”h]”hŒ __GFP_NORETRY”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjºubhX: The VM implementation will try only very lightweight memory direct reclaim to get some memory under memory pressure (thus it can sleep). It will avoid disruptive actions like OOM killer. The caller must handle the failure which is quite likely to happen under heavy memory pressure. The flag is suitable when failure can easily be handled at small cost, such as reduced throughput.”…”�”}”(hjºh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:28: ./include/linux/gfp_types.h”h´KÑhj²ubjM)�”}”(hXÅ``__GFP_RETRY_MAYFAIL``: The VM implementation will retry memory reclaim procedures that have previously failed if there is some indication that progress has been made elsewhere. It can wait for other tasks to attempt high-level approaches to freeing memory such as compaction (which removes fragmentation) and page-out. There is still a definite limit to the number of retries, but it is a larger limit than with ``__GFP_NORETRY``. Allocations with this flag may fail, but only when there is genuinely little unused memory. While these allocations do not directly trigger the OOM killer, their failure indicates that the system is likely to need to use the OOM killer soon. The caller must handle failure, but can reasonably do so by failing a higher-level request, or completing it only in a much less efficient manner. If the allocation does fail, and the caller is in a position to free some non-essential memory, doing so could benefit the system as a whole.”h]”(jS)�”}”(hŒ``__GFP_RETRY_MAYFAIL``”h]”hŒ__GFP_RETRY_MAYFAIL”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj×ubhXˆ: The VM implementation will retry memory reclaim procedures that have previously failed if there is some indication that progress has been made elsewhere. It can wait for other tasks to attempt high-level approaches to freeing memory such as compaction (which removes fragmentation) and page-out. There is still a definite limit to the number of retries, but it is a larger limit than with ”…”�”}”(hj×h²hh³Nh´NubjS)�”}”(hŒ``__GFP_NORETRY``”h]”hŒ __GFP_NORETRY”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj×ubhX. Allocations with this flag may fail, but only when there is genuinely little unused memory. While these allocations do not directly trigger the OOM killer, their failure indicates that the system is likely to need to use the OOM killer soon. The caller must handle failure, but can reasonably do so by failing a higher-level request, or completing it only in a much less efficient manner. If the allocation does fail, and the caller is in a position to free some non-essential memory, doing so could benefit the system as a whole.”…”�”}”(hj×h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:28: ./include/linux/gfp_types.h”h´KØhj²ubjM)�”}”(hX«``__GFP_NOFAIL``: The VM implementation _must_ retry infinitely: the caller cannot handle allocation failures. The allocation could block indefinitely but will never return with failure. Testing for failure is pointless. It _must_ be blockable and used together with __GFP_DIRECT_RECLAIM. It should _never_ be used in non-sleepable contexts. New users should be evaluated carefully (and the flag should be used only when there is no reasonable failure policy) but it is definitely preferable to use the flag rather than opencode endless loop around allocator. Allocating pages from the buddy with __GFP_NOFAIL and order > 1 is not supported. Please consider using kvmalloc() instead.”h]”(jS)�”}”(hŒ``__GFP_NOFAIL``”h]”hŒ __GFP_NOFAIL”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubhX›: The VM implementation _must_ retry infinitely: the caller cannot handle allocation failures. The allocation could block indefinitely but will never return with failure. Testing for failure is pointless. It _must_ be blockable and used together with __GFP_DIRECT_RECLAIM. It should _never_ be used in non-sleepable contexts. New users should be evaluated carefully (and the flag should be used only when there is no reasonable failure policy) but it is definitely preferable to use the flag rather than opencode endless loop around allocator. Allocating pages from the buddy with __GFP_NOFAIL and order > 1 is not supported. Please consider using kvmalloc() instead.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:28: ./include/linux/gfp_types.h”h´Kêhj²ubeh}”(h]”Œreclaim-modifiers”ah ]”h"]”Œreclaim modifiers”ah$]”h&]”uh1hµhjIh²hh³Nh´Nubh¶)�”}”(hhh]”(h»)�”}”(hŒUseful GFP flag combinations”h]”hŒUseful GFP flag combinations”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj+h³Nh´NubjM)�”}”(hŒ°Useful GFP flag combinations that are commonly used. It is recommended that subsystems start with one of these combinations and then set/clear ``__GFP_FOO`` flags as necessary.”h]”(hŒ�Useful GFP flag combinations that are commonly used. It is recommended that subsystems start with one of these combinations and then set/clear ”…”�”}”(hj<h²hh³Nh´NubjS)�”}”(hŒ ``__GFP_FOO``”h]”hŒ __GFP_FOO”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj<ubhŒ flags as necessary.”…”�”}”(hj<h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.h”h´M,hj+ubjM)�”}”(hX‡``GFP_ATOMIC`` users can not sleep and need the allocation to succeed. A lower watermark is applied to allow access to "atomic reserves". The current implementation doesn't support NMI, nor contexts that disable preemption under PREEMPT_RT. This includes raw_spin_lock() and plain preempt_disable() - see "Memory allocation" in Documentation/core-api/real-time/differences.rst for more info.”h]”(jS)�”}”(hŒ``GFP_ATOMIC``”h]”hŒ GFP_ATOMIC”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj]ubhXƒ users can not sleep and need the allocation to succeed. A lower watermark is applied to allow access to “atomic reservesâ€�. The current implementation doesn’t support NMI, nor contexts that disable preemption under PREEMPT_RT. This includes raw_spin_lock() and plain preempt_disable() - see “Memory allocationâ€� in Documentation/core-api/real-time/differences.rst for more info.”…”�”}”(hj]h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.h”h´M0hj+ubjM)�”}”(hŒ˜``GFP_KERNEL`` is typical for kernel-internal allocations. The caller requires ``ZONE_NORMAL`` or a lower zone for direct access but can direct reclaim.”h]”(jS)�”}”(hŒ``GFP_KERNEL``”h]”hŒ GFP_KERNEL”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjzubhŒA is typical for kernel-internal allocations. The caller requires ”…”�”}”(hjzh²hh³Nh´NubjS)�”}”(hŒ``ZONE_NORMAL``”h]”hŒ ZONE_NORMAL”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjzubhŒ: or a lower zone for direct access but can direct reclaim.”…”�”}”(hjzh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.h”h´M7hj+ubjM)�”}”(hŒr``GFP_KERNEL_ACCOUNT`` is the same as GFP_KERNEL, except the allocation is accounted to the active cgroup context.”h]”(jS)�”}”(hŒ``GFP_KERNEL_ACCOUNT``”h]”hŒGFP_KERNEL_ACCOUNT”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj©ubhŒ\ is the same as GFP_KERNEL, except the allocation is accounted to the active cgroup context.”…”�”}”(hj©h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.h”h´M:hj+ubjM)�”}”(hX``GFP_NOWAIT`` is for kernel allocations that should not stall for direct reclaim, start physical IO or use any filesystem callback. It is very likely to fail to allocate memory, even for very small allocations. The same restrictions on calling contexts apply as for ``GFP_ATOMIC``.”h]”(jS)�”}”(hŒ``GFP_NOWAIT``”h]”hŒ GFP_NOWAIT”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÆubhŒþ is for kernel allocations that should not stall for direct reclaim, start physical IO or use any filesystem callback. It is very likely to fail to allocate memory, even for very small allocations. The same restrictions on calling contexts apply as for ”…”�”}”(hjÆh²hh³Nh´NubjS)�”}”(hŒ``GFP_ATOMIC``”h]”hŒ GFP_ATOMIC”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÆubhŒ.”…”�”}”(hjÆh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.h”h´M=hj+ubjM)�”}”(hXd``GFP_NOIO`` will use direct reclaim to discard clean pages or slab pages that do not require the starting of any physical IO. Please try to avoid using this flag directly and instead use memalloc_noio_{save,restore} to mark the whole scope which cannot perform any IO with a short explanation why. All allocation requests will inherit GFP_NOIO implicitly.”h]”(jS)�”}”(hŒ ``GFP_NOIO``”h]”hŒGFP_NOIO”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjõubhXX will use direct reclaim to discard clean pages or slab pages that do not require the starting of any physical IO. Please try to avoid using this flag directly and instead use memalloc_noio_{save,restore} to mark the whole scope which cannot perform any IO with a short explanation why. All allocation requests will inherit GFP_NOIO implicitly.”…”�”}”(hjõh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.h”h´MBhj+ubjM)�”}”(hXK``GFP_NOFS`` will use direct reclaim but will not use any filesystem interfaces. Please try to avoid using this flag directly and instead use memalloc_nofs_{save,restore} to mark the whole scope which cannot/shouldn't recurse into the FS layer with a short explanation why. All allocation requests will inherit GFP_NOFS implicitly.”h]”(jS)�”}”(hŒ ``GFP_NOFS``”h]”hŒGFP_NOFS”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubhXA will use direct reclaim but will not use any filesystem interfaces. Please try to avoid using this flag directly and instead use memalloc_nofs_{save,restore} to mark the whole scope which cannot/shouldn’t recurse into the FS layer with a short explanation why. All allocation requests will inherit GFP_NOFS implicitly.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.h”h´MIhj+ubjM)�”}”(hX``GFP_USER`` is for userspace allocations that also need to be directly accessibly by the kernel or hardware. It is typically used by hardware for buffers that are mapped to userspace (e.g. graphics) that hardware still must DMA to. cpuset limits are enforced for these allocations.”h]”(jS)�”}”(hŒ ``GFP_USER``”h]”hŒGFP_USER”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj/ubhX is for userspace allocations that also need to be directly accessibly by the kernel or hardware. It is typically used by hardware for buffers that are mapped to userspace (e.g. graphics) that hardware still must DMA to. cpuset limits are enforced for these allocations.”…”�”}”(hj/h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.h”h´MOhj+ubjM)�”}”(hXš``GFP_DMA`` exists for historical reasons and should be avoided where possible. The flags indicates that the caller requires that the lowest zone be used (``ZONE_DMA`` or 16M on x86-64). Ideally, this would be removed but it would require careful auditing as some users really require it and others use the flag to avoid lowmem reserves in ``ZONE_DMA`` and treat the lowest zone as a type of emergency reserve.”h]”(jS)�”}”(hŒ ``GFP_DMA``”h]”hŒGFP_DMA”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjLubhŒ� exists for historical reasons and should be avoided where possible. The flags indicates that the caller requires that the lowest zone be used (”…”�”}”(hjLh²hh³Nh´NubjS)�”}”(hŒ ``ZONE_DMA``”h]”hŒZONE_DMA”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjLubhŒ­ or 16M on x86-64). Ideally, this would be removed but it would require careful auditing as some users really require it and others use the flag to avoid lowmem reserves in ”…”�”}”(hjLh²hh³Nh´NubjS)�”}”(hŒ ``ZONE_DMA``”h]”hŒZONE_DMA”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjLubhŒ: and treat the lowest zone as a type of emergency reserve.”…”�”}”(hjLh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.h”h´MThj+ubjM)�”}”(hŒý``GFP_DMA32`` is similar to ``GFP_DMA`` except that the caller requires a 32-bit address. Note that kmalloc(..., GFP_DMA32) does not return DMA32 memory because the DMA32 kmalloc cache array is not implemented. (Reason: there is no such user in kernel).”h]”(jS)�”}”(hŒ ``GFP_DMA32``”h]”hŒ GFP_DMA32”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�ubhŒ is similar to ”…”�”}”(hj�h²hh³Nh´NubjS)�”}”(hŒ ``GFP_DMA``”h]”hŒGFP_DMA”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�ubhŒÖ except that the caller requires a 32-bit address. Note that kmalloc(..., GFP_DMA32) does not return DMA32 memory because the DMA32 kmalloc cache array is not implemented. (Reason: there is no such user in kernel).”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.h”h´M[hj+ubjM)�”}”(hX``GFP_HIGHUSER`` is for userspace allocations that may be mapped to userspace, do not need to be directly accessible by the kernel but that cannot move once in use. An example may be a hardware allocation that maps data directly into userspace but has no addressing limitations.”h]”(jS)�”}”(hŒ``GFP_HIGHUSER``”h]”hŒ GFP_HIGHUSER”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¼ubhX is for userspace allocations that may be mapped to userspace, do not need to be directly accessible by the kernel but that cannot move once in use. An example may be a hardware allocation that maps data directly into userspace but has no addressing limitations.”…”�”}”(hj¼h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.h”h´M`hj+ubjM)�”}”(hX'``GFP_HIGHUSER_MOVABLE`` is for userspace allocations that the kernel does not need direct access to but can use kmap() when access is required. They are expected to be movable via page reclaim or page migration. Typically, pages on the LRU would also be allocated with ``GFP_HIGHUSER_MOVABLE``.”h]”(jS)�”}”(hŒ``GFP_HIGHUSER_MOVABLE``”h]”hŒGFP_HIGHUSER_MOVABLE”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÙubhŒö is for userspace allocations that the kernel does not need direct access to but can use kmap() when access is required. They are expected to be movable via page reclaim or page migration. Typically, pages on the LRU would also be allocated with ”…”�”}”(hjÙh²hh³Nh´NubjS)�”}”(hŒ``GFP_HIGHUSER_MOVABLE``”h]”hŒGFP_HIGHUSER_MOVABLE”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÙubhŒ.”…”�”}”(hjÙh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.h”h´Mehj+ubjM)�”}”(hXh``GFP_TRANSHUGE`` and ``GFP_TRANSHUGE_LIGHT`` are used for THP allocations. They are compound allocations that will generally fail quickly if memory is not available and will not wake kswapd/kcompactd on failure. The _LIGHT version does not attempt reclaim/compaction at all and is by default used in page fault path, while the non-light is used by khugepaged.”h]”(jS)�”}”(hŒ``GFP_TRANSHUGE``”h]”hŒ GFP_TRANSHUGE”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubhŒ and ”…”�”}”(hjh²hh³Nh´NubjS)�”}”(hŒ``GFP_TRANSHUGE_LIGHT``”h]”hŒGFP_TRANSHUGE_LIGHT”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubhX; are used for THP allocations. They are compound allocations that will generally fail quickly if memory is not available and will not wake kswapd/kcompactd on failure. The _LIGHT version does not attempt reclaim/compaction at all and is by default used in page fault path, while the non-light is used by khugepaged.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:31: ./include/linux/gfp_types.h”h´Mjhj+ubeh}”(h]”Œuseful-gfp-flag-combinations”ah ]”h"]”Œuseful gfp flag combinations”ah$]”h&]”uh1hµhjIh²hh³Nh´Nubeh}”(h]”(Œmemory-allocation-controls”j@eh ]”h"]”(Œmemory allocation controls”Œmm-api-gfp-flags”eh$]”h&]”uh1hµhh·h²hh³hÊh´KŒexpect_referenced_by_name”}”jEj5sŒexpect_referenced_by_id”}”j@j5subh¶)�”}”(hhh]”(h»)�”}”(hŒThe Slab Cache”h]”hŒThe Slab Cache”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjLh²hh³hÊh´K#ubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒSLAB_HWCACHE_ALIGN (C macro)”Œc.SLAB_HWCACHE_ALIGN”hNt”auh1hÜhjLh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒSLAB_HWCACHE_ALIGN”h]”hù)�”}”(hŒSLAB_HWCACHE_ALIGN”h]”hÿ)�”}”(hŒSLAB_HWCACHE_ALIGN”h]”j)�”}”(hjph]”hŒSLAB_HWCACHE_ALIGN”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjvubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjrh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´KXubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjnh²hh³j�h´KXubah}”(h]”jiah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j�h´KXhjkh²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hjkh²hh³j�h´KXubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGj¦jHj¦jI‰jJ‰jK‰uh1híh²hhjLh³Nh´NubjM)�”}”(hŒ``SLAB_HWCACHE_ALIGN``”h]”jS)�”}”(hj¬h]”hŒSLAB_HWCACHE_ALIGN”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´KZhjLh²hubji)�”}”(hXð Align objects on cache line boundaries. **Description** Sufficiently large objects are aligned on cache line boundary. For object size smaller than a half of cache line size, the alignment is on the half of cache line size. In general, if object size is smaller than 1/2^n of cache line size, the alignment is adjusted to 1/2^n. If explicit alignment is also requested by the respective :c:type:`struct kmem_cache_args ` field, the greater of both is alignments is applied. ”h]”(ji)�”}”(hŒ(Align objects on cache line boundaries. ”h]”jM)�”}”(hŒ'Align objects on cache line boundaries.”h]”hŒ'Align objects on cache line boundaries.”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´KXhjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jØh´KXhjÂubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjáh]”hŒ Description”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjßubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´KZhjÂubjM)�”}”(hXSufficiently large objects are aligned on cache line boundary. For object size smaller than a half of cache line size, the alignment is on the half of cache line size. In general, if object size is smaller than 1/2^n of cache line size, the alignment is adjusted to 1/2^n.”h]”hXSufficiently large objects are aligned on cache line boundary. For object size smaller than a half of cache line size, the alignment is on the half of cache line size. In general, if object size is smaller than 1/2^n of cache line size, the alignment is adjusted to 1/2^n.”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´KYhjÂubjM)�”}”(hŒ¡If explicit alignment is also requested by the respective :c:type:`struct kmem_cache_args ` field, the greater of both is alignments is applied.”h]”(hŒ:If explicit alignment is also requested by the respective ”…”�”}”(hjh²hh³Nh´Nubh)�”}”(hŒ2:c:type:`struct kmem_cache_args `”h]”jS)�”}”(hjh]”hŒstruct kmem_cache_args”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(Œxref”jAŒc-type”eh"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œcore-api/mm-api”Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jpjs)�”}”jv]”sbŒ reftarget”Œkmem_cache_args”uh1hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´K^hjubhŒ5 field, the greater of both is alignments is applied.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j3h´K^hjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jØh´KXhjLh²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒSLAB_TYPESAFE_BY_RCU (C macro)”Œc.SLAB_TYPESAFE_BY_RCU”hNt”auh1hÜhjLh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒSLAB_TYPESAFE_BY_RCU”h]”hù)�”}”(hŒSLAB_TYPESAFE_BY_RCU”h]”hÿ)�”}”(hŒSLAB_TYPESAFE_BY_RCU”h]”j)�”}”(hjWh]”hŒSLAB_TYPESAFE_BY_RCU”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj]ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjYh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Klubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjUh²hh³jth´Klubah}”(h]”jPah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jth´KlhjRh²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hjRh²hh³jth´Klubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGj�jHj�jI‰jJ‰jK‰uh1híh²hhjLh³Nh´NubjM)�”}”(hŒ``SLAB_TYPESAFE_BY_RCU``”h]”jS)�”}”(hj“h]”hŒSLAB_TYPESAFE_BY_RCU”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´KnhjLh²hubji)�”}”(hXá **WARNING** READ THIS! **Description** This delays freeing the SLAB page by a grace period, it does _NOT_ delay object freeing. This means that if you do kmem_cache_free() that memory location is free to be reused at any time. Thus it may be possible to see another object there in the same RCU grace period. This feature only ensures the memory location backing the object stays valid, the trick to using this is relying on an independent object validation pass. Something like: :: begin: rcu_read_lock(); obj = lockless_lookup(key); if (obj) { if (!try_get_ref(obj)) // might fail for free objects rcu_read_unlock(); goto begin; if (obj->key != key) { // not the object we expected put_ref(obj); rcu_read_unlock(); goto begin; } } rcu_read_unlock(); This is useful if we need to approach a kernel structure obliquely, from its address obtained without the usual locking. We can lock the structure to stabilize it and check it's still at the given address, only if we can be sure that the memory has not been meanwhile reused for some other kind of object (which our subsystem's lock might corrupt). rcu_read_lock before reading the address, then rcu_read_unlock after taking the spinlock within the structure expected at that address. Note that object identity check has to be done *after* acquiring a reference, therefore user has to ensure proper ordering for loads. Similarly, when initializing objects allocated with SLAB_TYPESAFE_BY_RCU, the newly allocated object has to be fully initialized *before* its refcount gets initialized and proper ordering for stores is required. refcount_{add|inc}_not_zero_acquire() and refcount_set_release() are designed with the proper fences required for reference counting objects allocated with SLAB_TYPESAFE_BY_RCU. Note that it is not possible to acquire a lock within a structure allocated with SLAB_TYPESAFE_BY_RCU without first acquiring a reference as described above. The reason is that SLAB_TYPESAFE_BY_RCU pages are not zeroed before being given to the slab, which means that any locks must be initialized after each and every kmem_struct_alloc(). Alternatively, make the ctor passed to kmem_cache_create() initialize the locks at page-allocation time, as is done in __i915_request_ctor(), sighand_ctor(), and anon_vma_ctor(). Such a ctor permits readers to safely acquire those ctor-initialized locks under rcu_read_lock() protection. Note that SLAB_TYPESAFE_BY_RCU was originally named SLAB_DESTROY_BY_RCU. ”h]”(ji)�”}”(hŒ**WARNING** READ THIS! ”h]”jM)�”}”(hŒ**WARNING** READ THIS!”h]”(jŽ)�”}”(hŒ **WARNING**”h]”hŒWARNING”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj±ubhŒ READ THIS!”…”�”}”(hj±h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Klhj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jÍh´Klhj©ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÖh]”hŒ Description”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Knhj©ubjM)�”}”(hX This delays freeing the SLAB page by a grace period, it does _NOT_ delay object freeing. This means that if you do kmem_cache_free() that memory location is free to be reused at any time. Thus it may be possible to see another object there in the same RCU grace period.”h]”hX This delays freeing the SLAB page by a grace period, it does _NOT_ delay object freeing. This means that if you do kmem_cache_free() that memory location is free to be reused at any time. Thus it may be possible to see another object there in the same RCU grace period.”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Kmhj©ubjM)�”}”(hŒªThis feature only ensures the memory location backing the object stays valid, the trick to using this is relying on an independent object validation pass. Something like:”h]”hŒªThis feature only ensures the memory location backing the object stays valid, the trick to using this is relying on an independent object validation pass. Something like:”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Krhj©ubhŒ literal_block”“”)�”}”(hX3begin: rcu_read_lock(); obj = lockless_lookup(key); if (obj) { if (!try_get_ref(obj)) // might fail for free objects rcu_read_unlock(); goto begin; if (obj->key != key) { // not the object we expected put_ref(obj); rcu_read_unlock(); goto begin; } } rcu_read_unlock();”h]”hX3begin: rcu_read_lock(); obj = lockless_lookup(key); if (obj) { if (!try_get_ref(obj)) // might fail for free objects rcu_read_unlock(); goto begin; if (obj->key != key) { // not the object we expected put_ref(obj); rcu_read_unlock(); goto begin; } } rcu_read_unlock();”…”�”}”hj sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Kxhj©ubjM)�”}”(hX\This is useful if we need to approach a kernel structure obliquely, from its address obtained without the usual locking. We can lock the structure to stabilize it and check it's still at the given address, only if we can be sure that the memory has not been meanwhile reused for some other kind of object (which our subsystem's lock might corrupt).”h]”hX`This is useful if we need to approach a kernel structure obliquely, from its address obtained without the usual locking. We can lock the structure to stabilize it and check it’s still at the given address, only if we can be sure that the memory has not been meanwhile reused for some other kind of object (which our subsystem’s lock might corrupt).”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Kˆhj©ubjM)�”}”(hŒ‡rcu_read_lock before reading the address, then rcu_read_unlock after taking the spinlock within the structure expected at that address.”h]”hŒ‡rcu_read_lock before reading the address, then rcu_read_unlock after taking the spinlock within the structure expected at that address.”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´KŽhj©ubjM)�”}”(hX Note that object identity check has to be done *after* acquiring a reference, therefore user has to ensure proper ordering for loads. Similarly, when initializing objects allocated with SLAB_TYPESAFE_BY_RCU, the newly allocated object has to be fully initialized *before* its refcount gets initialized and proper ordering for stores is required. refcount_{add|inc}_not_zero_acquire() and refcount_set_release() are designed with the proper fences required for reference counting objects allocated with SLAB_TYPESAFE_BY_RCU.”h]”(hŒ/Note that object identity check has to be done ”…”�”}”(hj9h²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ*after*”h]”hŒafter”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj9ubhŒÑ acquiring a reference, therefore user has to ensure proper ordering for loads. Similarly, when initializing objects allocated with SLAB_TYPESAFE_BY_RCU, the newly allocated object has to be fully initialized ”…”�”}”(hj9h²hh³Nh´NubjB)�”}”(hŒ*before*”h]”hŒbefore”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj9ubhŒü its refcount gets initialized and proper ordering for stores is required. refcount_{add|inc}_not_zero_acquire() and refcount_set_release() are designed with the proper fences required for reference counting objects allocated with SLAB_TYPESAFE_BY_RCU.”…”�”}”(hj9h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´K‘hj©ubjM)�”}”(hXuNote that it is not possible to acquire a lock within a structure allocated with SLAB_TYPESAFE_BY_RCU without first acquiring a reference as described above. The reason is that SLAB_TYPESAFE_BY_RCU pages are not zeroed before being given to the slab, which means that any locks must be initialized after each and every kmem_struct_alloc(). Alternatively, make the ctor passed to kmem_cache_create() initialize the locks at page-allocation time, as is done in __i915_request_ctor(), sighand_ctor(), and anon_vma_ctor(). Such a ctor permits readers to safely acquire those ctor-initialized locks under rcu_read_lock() protection.”h]”hXuNote that it is not possible to acquire a lock within a structure allocated with SLAB_TYPESAFE_BY_RCU without first acquiring a reference as described above. The reason is that SLAB_TYPESAFE_BY_RCU pages are not zeroed before being given to the slab, which means that any locks must be initialized after each and every kmem_struct_alloc(). Alternatively, make the ctor passed to kmem_cache_create() initialize the locks at page-allocation time, as is done in __i915_request_ctor(), sighand_ctor(), and anon_vma_ctor(). Such a ctor permits readers to safely acquire those ctor-initialized locks under rcu_read_lock() protection.”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Kšhj©ubjM)�”}”(hŒHNote that SLAB_TYPESAFE_BY_RCU was originally named SLAB_DESTROY_BY_RCU.”h]”hŒHNote that SLAB_TYPESAFE_BY_RCU was originally named SLAB_DESTROY_BY_RCU.”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´K¥hj©ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jÍh´KlhjLh²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒSLAB_ACCOUNT (C macro)”Œc.SLAB_ACCOUNT”hNt”auh1hÜhjLh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ SLAB_ACCOUNT”h]”hù)�”}”(hŒ SLAB_ACCOUNT”h]”hÿ)�”}”(hŒ SLAB_ACCOUNT”h]”j)�”}”(hj¥h]”hŒ SLAB_ACCOUNT”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj«ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj§h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´KÉubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj£h²hh³jÂh´KÉubah}”(h]”jžah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÂh´KÉhj h²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hj h²hh³jÂh´KÉubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGjÛjHjÛjI‰jJ‰jK‰uh1híh²hhjLh³Nh´NubjM)�”}”(hŒ``SLAB_ACCOUNT``”h]”jS)�”}”(hjáh]”hŒ SLAB_ACCOUNT”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjßubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´KËhjLh²hubji)�”}”(hŒÃ Account allocations to memcg. **Description** All object allocations from this cache will be memcg accounted, regardless of __GFP_ACCOUNT being or not being passed to individual allocations. ”h]”(ji)�”}”(hŒAccount allocations to memcg. ”h]”jM)�”}”(hŒAccount allocations to memcg.”h]”hŒAccount allocations to memcg.”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´KÉhjûubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j h´KÉhj÷ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´KËhj÷ubjM)�”}”(hŒ�All object allocations from this cache will be memcg accounted, regardless of __GFP_ACCOUNT being or not being passed to individual allocations.”h]”hŒ�All object allocations from this cache will be memcg accounted, regardless of __GFP_ACCOUNT being or not being passed to individual allocations.”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´KÊhj÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j h´KÉhjLh²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒSLAB_RECLAIM_ACCOUNT (C macro)”Œc.SLAB_RECLAIM_ACCOUNT”hNt”auh1hÜhjLh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒSLAB_RECLAIM_ACCOUNT”h]”hù)�”}”(hŒSLAB_RECLAIM_ACCOUNT”h]”hÿ)�”}”(hŒSLAB_RECLAIM_ACCOUNT”h]”j)�”}”(hjTh]”hŒSLAB_RECLAIM_ACCOUNT”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjZubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjVh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Këubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjRh²hh³jqh´Këubah}”(h]”jMah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jqh´KëhjOh²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hjOh²hh³jqh´Këubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGjŠjHjŠjI‰jJ‰jK‰uh1híh²hhjLh³Nh´NubjM)�”}”(hŒ``SLAB_RECLAIM_ACCOUNT``”h]”jS)�”}”(hj�h]”hŒSLAB_RECLAIM_ACCOUNT”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´KíhjLh²hubji)�”}”(hX  Objects are reclaimable. **Description** Use this flag for caches that have an associated shrinker. As a result, slab pages are allocated with __GFP_RECLAIMABLE, which affects grouping pages by mobility, and are accounted in SReclaimable counter in /proc/meminfo ”h]”(ji)�”}”(hŒObjects are reclaimable. ”h]”jM)�”}”(hŒObjects are reclaimable.”h]”hŒObjects are reclaimable.”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Këhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j¼h´Këhj¦ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÅh]”hŒ Description”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Kíhj¦ubjM)�”}”(hŒÝUse this flag for caches that have an associated shrinker. As a result, slab pages are allocated with __GFP_RECLAIMABLE, which affects grouping pages by mobility, and are accounted in SReclaimable counter in /proc/meminfo”h]”hŒÝUse this flag for caches that have an associated shrinker. As a result, slab pages are allocated with __GFP_RECLAIMABLE, which affects grouping pages by mobility, and are accounted in SReclaimable counter in /proc/meminfo”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Kìhj¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j¼h´KëhjLh²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmem_cache_args (C struct)”Œc.kmem_cache_args”hNt”auh1hÜhjLh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒkmem_cache_args”h]”hù)�”}”(hŒstruct kmem_cache_args”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´KóubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjh²hh³jh´Kóubhÿ)�”}”(hŒkmem_cache_args”h]”j)�”}”(hjh]”hŒkmem_cache_args”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj%ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjh²hh³jh´Kóubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjh²hh³jh´Kóubah}”(h]”jüah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jh´Kóhjþh²hubj4)�”}”(hhh]”jM)�”}”(hŒ-Less common arguments for kmem_cache_create()”h]”hŒ-Less common arguments for kmem_cache_create()”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MhjHh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjþh²hh³jh´Kóubeh}”(h]”h ]”(jAŒstruct”eh"]”h$]”h&]”jFjAjGjcjHjcjI‰jJ‰jK‰uh1híh²hhjLh³Nh´Nubj„)�”}”(hX½ **Definition**:: struct kmem_cache_args { unsigned int align; unsigned int useroffset; unsigned int usersize; unsigned int freeptr_offset; bool use_freeptr_offset; void (*ctor)(void *); unsigned int sheaf_capacity; }; **Members** ``align`` The required alignment for the objects. ``0`` means no specific alignment is requested. ``useroffset`` Usercopy region offset. ``0`` is a valid offset, when **usersize** is non-``0`` ``usersize`` Usercopy region size. ``0`` means no usercopy region is specified. ``freeptr_offset`` Custom offset for the free pointer in caches with :c:type:`SLAB_TYPESAFE_BY_RCU` or **ctor** By default, :c:type:`SLAB_TYPESAFE_BY_RCU` and **ctor** caches place the free pointer outside of the object. This might cause the object to grow in size. Cache creators that have a reason to avoid this can specify a custom free pointer offset in their data structure where the free pointer will be placed. For caches with :c:type:`SLAB_TYPESAFE_BY_RCU`, the caller must ensure that the free pointer does not overlay fields required to guard against object recycling (See :c:type:`SLAB_TYPESAFE_BY_RCU` for details). For caches with **ctor**, the caller must ensure that the free pointer does not overlay fields initialized by the constructor. Currently, only caches with :c:type:`SLAB_TYPESAFE_BY_RCU` or **ctor** may specify **freeptr_offset**. Using ``0`` as a value for **freeptr_offset** is valid. If **freeptr_offset** is specified, **use_freeptr_offset** must be set ``true``. ``use_freeptr_offset`` Whether a **freeptr_offset** is used. ``ctor`` A constructor for the objects. The constructor is invoked for each object in a newly allocated slab page. It is the cache user's responsibility to free object in the same state as after calling the constructor, or deal appropriately with any differences between a freshly constructed and a reallocated object. ``NULL`` means no constructor. ``sheaf_capacity`` Enable sheaves of given capacity for the cache. With a non-zero value, allocations from the cache go through caching arrays called sheaves. Each cpu has a main sheaf that's always present, and a spare sheaf that may be not present. When both become empty, there's an attempt to replace an empty sheaf with a full sheaf from the per-node barn. When no full sheaf is available, and gfp flags allow blocking, a sheaf is allocated and filled from slab(s) using bulk allocation. Otherwise the allocation falls back to the normal operation allocating a single object from a slab. Analogically when freeing and both percpu sheaves are full, the barn may replace it with an empty sheaf, unless it's over capacity. In that case a sheaf is bulk freed to slab pages. The sheaves do not enforce NUMA placement of objects, so allocations via kmem_cache_alloc_node() with a node specified other than NUMA_NO_NODE will bypass them. Bulk allocation and free operations also try to use the cpu sheaves and barn, but fallback to using slab pages directly. When slub_debug is enabled for the cache, the sheaf_capacity argument is ignored. ``0`` means no sheaves will be created.”h]”(jM)�”}”(hŒ**Definition**::”h]”(jŽ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjkubhŒ:”…”�”}”(hjkh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M"hjgubj )�”}”(hŒästruct kmem_cache_args { unsigned int align; unsigned int useroffset; unsigned int usersize; unsigned int freeptr_offset; bool use_freeptr_offset; void (*ctor)(void *); unsigned int sheaf_capacity; };”h]”hŒästruct kmem_cache_args { unsigned int align; unsigned int useroffset; unsigned int usersize; unsigned int freeptr_offset; bool use_freeptr_offset; void (*ctor)(void *); unsigned int sheaf_capacity; };”…”�”}”hjˆsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M$hjgubjM)�”}”(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&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M.hjgubj¤)�”}”(hhh]”(j©)�”}”(hŒc``align`` The required alignment for the objects. ``0`` means no specific alignment is requested. ”h]”(j¯)�”}”(hŒ ``align``”h]”jS)�”}”(hj¸h]”hŒalign”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M.hj²ubjÉ)�”}”(hhh]”(jM)�”}”(hŒ'The required alignment for the objects.”h]”hŒ'The required alignment for the objects.”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M,hjÎubjM)�”}”(hŒ/``0`` means no specific alignment is requested.”h]”(jS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjàubhŒ* means no specific alignment is requested.”…”�”}”(hjàh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÍh´M.hjÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÍh´M.hj¯ubj©)�”}”(hŒ```useroffset`` Usercopy region offset. ``0`` is a valid offset, when **usersize** is non-``0`` ”h]”(j¯)�”}”(hŒ``useroffset``”h]”jS)�”}”(hjh]”hŒ useroffset”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M4hjubjÉ)�”}”(hhh]”(jM)�”}”(hŒUsercopy region offset.”h]”hŒUsercopy region offset.”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M2hj$ubjM)�”}”(hŒ7``0`` is a valid offset, when **usersize** is non-``0``”h]”(jS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj6ubhŒ is a valid offset, when ”…”�”}”(hj6h²hh³Nh´NubjŽ)�”}”(hŒ **usersize**”h]”hŒusersize”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj6ubhŒ is non-”…”�”}”(hj6h²hh³Nh´NubjS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j#h´M4hj$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j#h´M4hj¯ubj©)�”}”(hŒQ``usersize`` Usercopy region size. ``0`` means no usercopy region is specified. ”h]”(j¯)�”}”(hŒ ``usersize``”h]”jS)�”}”(hj„h]”hŒusersize”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M:hj~ubjÉ)�”}”(hhh]”(jM)�”}”(hŒUsercopy region size.”h]”hŒUsercopy region size.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M8hjšubjM)�”}”(hŒ,``0`` means no usercopy region is specified.”h]”(jS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¬ubhŒ' means no usercopy region is specified.”…”�”}”(hj¬h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j™h´M:hjšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j™h´M:hj¯ubj©)�”}”(hXè``freeptr_offset`` Custom offset for the free pointer in caches with :c:type:`SLAB_TYPESAFE_BY_RCU` or **ctor** By default, :c:type:`SLAB_TYPESAFE_BY_RCU` and **ctor** caches place the free pointer outside of the object. This might cause the object to grow in size. Cache creators that have a reason to avoid this can specify a custom free pointer offset in their data structure where the free pointer will be placed. For caches with :c:type:`SLAB_TYPESAFE_BY_RCU`, the caller must ensure that the free pointer does not overlay fields required to guard against object recycling (See :c:type:`SLAB_TYPESAFE_BY_RCU` for details). For caches with **ctor**, the caller must ensure that the free pointer does not overlay fields initialized by the constructor. Currently, only caches with :c:type:`SLAB_TYPESAFE_BY_RCU` or **ctor** may specify **freeptr_offset**. Using ``0`` as a value for **freeptr_offset** is valid. If **freeptr_offset** is specified, **use_freeptr_offset** must be set ``true``. ”h]”(j¯)�”}”(hŒ``freeptr_offset``”h]”jS)�”}”(hjÚh]”hŒfreeptr_offset”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjØubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MRhjÔubjÉ)�”}”(hhh]”(jM)�”}”(hŒ\Custom offset for the free pointer in caches with :c:type:`SLAB_TYPESAFE_BY_RCU` or **ctor**”h]”(hŒ2Custom offset for the free pointer in caches with ”…”�”}”(hjóh²hh³Nh´Nubh)�”}”(hŒ:c:type:`SLAB_TYPESAFE_BY_RCU`”h]”jS)�”}”(hjýh]”hŒSLAB_TYPESAFE_BY_RCU”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”(jjAŒc-type”eh"]”h$]”h&]”uh1jRhjûubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j(Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jpj.j1ŒSLAB_TYPESAFE_BY_RCU”uh1hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M>hjóubhŒ or ”…”�”}”(hjóh²hh³Nh´NubjŽ)�”}”(hŒ**ctor**”h]”hŒctor”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjóubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jh´M>hjðubjM)�”}”(hX1By default, :c:type:`SLAB_TYPESAFE_BY_RCU` and **ctor** caches place the free pointer outside of the object. This might cause the object to grow in size. Cache creators that have a reason to avoid this can specify a custom free pointer offset in their data structure where the free pointer will be placed.”h]”(hŒ By default, ”…”�”}”(hj3h²hh³Nh´Nubh)�”}”(hŒ:c:type:`SLAB_TYPESAFE_BY_RCU`”h]”jS)�”}”(hj=h]”hŒSLAB_TYPESAFE_BY_RCU”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”(jjAŒc-type”eh"]”h$]”h&]”uh1jRhj;ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j(Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jpj.j1ŒSLAB_TYPESAFE_BY_RCU”uh1hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MAhj3ubhŒ and ”…”�”}”(hj3h²hh³Nh´NubjŽ)�”}”(hŒ**ctor**”h]”hŒctor”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj3ubhŒú caches place the free pointer outside of the object. This might cause the object to grow in size. Cache creators that have a reason to avoid this can specify a custom free pointer offset in their data structure where the free pointer will be placed.”…”�”}”(hj3h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jZh´MAhjðubjM)�”}”(hŒÑFor caches with :c:type:`SLAB_TYPESAFE_BY_RCU`, the caller must ensure that the free pointer does not overlay fields required to guard against object recycling (See :c:type:`SLAB_TYPESAFE_BY_RCU` for details).”h]”(hŒFor caches with ”…”�”}”(hjwh²hh³Nh´Nubh)�”}”(hŒ:c:type:`SLAB_TYPESAFE_BY_RCU`”h]”jS)�”}”(hj�h]”hŒSLAB_TYPESAFE_BY_RCU”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”(jjAŒc-type”eh"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j(Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jpj.j1ŒSLAB_TYPESAFE_BY_RCU”uh1hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MGhjwubhŒw, the caller must ensure that the free pointer does not overlay fields required to guard against object recycling (See ”…”�”}”(hjwh²hh³Nh´Nubh)�”}”(hŒ:c:type:`SLAB_TYPESAFE_BY_RCU`”h]”jS)�”}”(hj¥h]”hŒSLAB_TYPESAFE_BY_RCU”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”(jjAŒc-type”eh"]”h$]”h&]”uh1jRhj£ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j(Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jpj.j1ŒSLAB_TYPESAFE_BY_RCU”uh1hh³jžh´MGhjwubhŒ for details).”…”�”}”(hjwh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jžh´MGhjðubjM)�”}”(hŒ~For caches with **ctor**, the caller must ensure that the free pointer does not overlay fields initialized by the constructor.”h]”(hŒFor caches with ”…”�”}”(hjÌh²hh³Nh´NubjŽ)�”}”(hŒ**ctor**”h]”hŒctor”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÌubhŒf, the caller must ensure that the free pointer does not overlay fields initialized by the constructor.”…”�”}”(hjÌh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MKhjðubjM)�”}”(hŒfCurrently, only caches with :c:type:`SLAB_TYPESAFE_BY_RCU` or **ctor** may specify **freeptr_offset**.”h]”(hŒCurrently, only caches with ”…”�”}”(hjíh²hh³Nh´Nubh)�”}”(hŒ:c:type:`SLAB_TYPESAFE_BY_RCU`”h]”jS)�”}”(hj÷h]”hŒSLAB_TYPESAFE_BY_RCU”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”(jjAŒc-type”eh"]”h$]”h&]”uh1jRhjõubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j(Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jpj.j1ŒSLAB_TYPESAFE_BY_RCU”uh1hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MNhjíubhŒ or ”…”�”}”(hjíh²hh³Nh´NubjŽ)�”}”(hŒ**ctor**”h]”hŒctor”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjíubhŒ may specify ”…”�”}”(hjíh²hh³Nh´NubjŽ)�”}”(hŒ**freeptr_offset**”h]”hŒfreeptr_offset”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjíubhŒ.”…”�”}”(hjíh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jh´MNhjðubjM)�”}”(hŒˆUsing ``0`` as a value for **freeptr_offset** is valid. If **freeptr_offset** is specified, **use_freeptr_offset** must be set ``true``.”h]”(hŒUsing ”…”�”}”(hjCh²hh³Nh´NubjS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjCubhŒ as a value for ”…”�”}”(hjCh²hh³Nh´NubjŽ)�”}”(hŒ**freeptr_offset**”h]”hŒfreeptr_offset”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjCubhŒ is valid. If ”…”�”}”(hjCh²hh³Nh´NubjŽ)�”}”(hŒ**freeptr_offset**”h]”hŒfreeptr_offset”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjCubhŒ is specified, ”…”�”}”(hjCh²hh³Nh´NubjŽ)�”}”(hŒ**use_freeptr_offset**”h]”hŒuse_freeptr_offset”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjCubhŒ must be set ”…”�”}”(hjCh²hh³Nh´NubjS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjCubhŒ.”…”�”}”(hjCh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MQhjðubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jïh´MRhj¯ubj©)�”}”(hŒ=``use_freeptr_offset`` Whether a **freeptr_offset** is used. ”h]”(j¯)�”}”(hŒ``use_freeptr_offset``”h]”jS)�”}”(hj¾h]”hŒuse_freeptr_offset”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MVhj¸ubjÉ)�”}”(hhh]”jM)�”}”(hŒ%Whether a **freeptr_offset** is used.”h]”(hŒ Whether a ”…”�”}”(hj×h²hh³Nh´NubjŽ)�”}”(hŒ**freeptr_offset**”h]”hŒfreeptr_offset”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj×ubhŒ is used.”…”�”}”(hj×h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÓh´MVhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¸ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÓh´MVhj¯ubj©)�”}”(hX```ctor`` A constructor for the objects. The constructor is invoked for each object in a newly allocated slab page. It is the cache user's responsibility to free object in the same state as after calling the constructor, or deal appropriately with any differences between a freshly constructed and a reallocated object. ``NULL`` means no constructor. ”h]”(j¯)�”}”(hŒ``ctor``”h]”jS)�”}”(hj h]”hŒctor”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MbhjubjÉ)�”}”(hhh]”(jM)�”}”(hŒA constructor for the objects.”h]”hŒA constructor for the objects.”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MZhjubjM)�”}”(hXThe constructor is invoked for each object in a newly allocated slab page. It is the cache user's responsibility to free object in the same state as after calling the constructor, or deal appropriately with any differences between a freshly constructed and a reallocated object.”h]”hXThe constructor is invoked for each object in a newly allocated slab page. It is the cache user’s responsibility to free object in the same state as after calling the constructor, or deal appropriately with any differences between a freshly constructed and a reallocated object.”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M\hjubjM)�”}”(hŒ``NULL`` means no constructor.”h]”(jS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj@ubhŒ means no constructor.”…”�”}”(hj@h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jh´Mbhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jh´Mbhj¯ubj©)�”}”(hX¡``sheaf_capacity`` Enable sheaves of given capacity for the cache. With a non-zero value, allocations from the cache go through caching arrays called sheaves. Each cpu has a main sheaf that's always present, and a spare sheaf that may be not present. When both become empty, there's an attempt to replace an empty sheaf with a full sheaf from the per-node barn. When no full sheaf is available, and gfp flags allow blocking, a sheaf is allocated and filled from slab(s) using bulk allocation. Otherwise the allocation falls back to the normal operation allocating a single object from a slab. Analogically when freeing and both percpu sheaves are full, the barn may replace it with an empty sheaf, unless it's over capacity. In that case a sheaf is bulk freed to slab pages. The sheaves do not enforce NUMA placement of objects, so allocations via kmem_cache_alloc_node() with a node specified other than NUMA_NO_NODE will bypass them. Bulk allocation and free operations also try to use the cpu sheaves and barn, but fallback to using slab pages directly. When slub_debug is enabled for the cache, the sheaf_capacity argument is ignored. ``0`` means no sheaves will be created.”h]”(j¯)�”}”(hŒ``sheaf_capacity``”h]”jS)�”}”(hjnh]”hŒsheaf_capacity”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M€hjhubjÉ)�”}”(hhh]”(jM)�”}”(hŒ/Enable sheaves of given capacity for the cache.”h]”hŒ/Enable sheaves of given capacity for the cache.”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mfhj„ubjM)�”}”(hX&With a non-zero value, allocations from the cache go through caching arrays called sheaves. Each cpu has a main sheaf that's always present, and a spare sheaf that may be not present. When both become empty, there's an attempt to replace an empty sheaf with a full sheaf from the per-node barn.”h]”hX*With a non-zero value, allocations from the cache go through caching arrays called sheaves. Each cpu has a main sheaf that’s always present, and a spare sheaf that may be not present. When both become empty, there’s an attempt to replace an empty sheaf with a full sheaf from the per-node barn.”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mhhj„ubjM)�”}”(hŒæWhen no full sheaf is available, and gfp flags allow blocking, a sheaf is allocated and filled from slab(s) using bulk allocation. Otherwise the allocation falls back to the normal operation allocating a single object from a slab.”h]”hŒæWhen no full sheaf is available, and gfp flags allow blocking, a sheaf is allocated and filled from slab(s) using bulk allocation. Otherwise the allocation falls back to the normal operation allocating a single object from a slab.”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mnhj„ubjM)�”}”(hŒµAnalogically when freeing and both percpu sheaves are full, the barn may replace it with an empty sheaf, unless it's over capacity. In that case a sheaf is bulk freed to slab pages.”h]”hŒ·Analogically when freeing and both percpu sheaves are full, the barn may replace it with an empty sheaf, unless it’s over capacity. In that case a sheaf is bulk freed to slab pages.”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mshj„ubjM)�”}”(hŒ The sheaves do not enforce NUMA placement of objects, so allocations via kmem_cache_alloc_node() with a node specified other than NUMA_NO_NODE will bypass them.”h]”hŒ The sheaves do not enforce NUMA placement of objects, so allocations via kmem_cache_alloc_node() with a node specified other than NUMA_NO_NODE will bypass them.”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mwhj„ubjM)�”}”(hŒxBulk allocation and free operations also try to use the cpu sheaves and barn, but fallback to using slab pages directly.”h]”hŒxBulk allocation and free operations also try to use the cpu sheaves and barn, but fallback to using slab pages directly.”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M{hj„ubjM)�”}”(hŒQWhen slub_debug is enabled for the cache, the sheaf_capacity argument is ignored.”h]”hŒQWhen slub_debug is enabled for the cache, the sheaf_capacity argument is ignored.”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M~hj„ubjM)�”}”(hŒ'``0`` means no sheaves will be created.”h]”(jS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjðubhŒ" means no sheaves will be created.”…”�”}”(hjðh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M�hj„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjhubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jƒh´M€hj¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjgubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjLh²hh³Nh´NubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj(h]”hŒ Description”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M„hjLh²hubjM)�”}”(hX4Any uninitialized fields of the structure are interpreted as unused. The exception is **freeptr_offset** where ``0`` is a valid value, so **use_freeptr_offset** must be also set to ``true`` in order to interpret the field as used. For **useroffset** ``0`` is also valid, but only with non-``0`` **usersize**.”•h]”(hŒVAny uninitialized fields of the structure are interpreted as unused. The exception is ”…”�”}”(hj>h²hh³Nh´NubjŽ)�”}”(hŒ**freeptr_offset**”h]”hŒfreeptr_offset”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj>ubhŒ where ”…”�”}”(hj>h²hh³Nh´NubjS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj>ubhŒ is a valid value, so ”…”�”}”(hj>h²hh³Nh´NubjŽ)�”}”(hŒ**use_freeptr_offset**”h]”hŒuse_freeptr_offset”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj>ubhŒ must be also set to ”…”�”}”(hj>h²hh³Nh´NubjS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj>ubhŒ. in order to interpret the field as used. For ”…”�”}”(hj>h²hh³Nh´NubjŽ)�”}”(hŒ**useroffset**”h]”hŒ useroffset”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj>ubhŒ ”…”�”}”(hj>h²hh³Nh´NubjS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj>ubhŒ" is also valid, but only with non-”…”�”}”(hj>h²hh³Nh´NubjS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj>ubhŒ ”…”�”}”(hj>h²hh³Nh´NubjŽ)�”}”(hŒ **usersize**”h]”hŒusersize”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj>ubhŒ.”…”�”}”(hj>h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MhjLh²hubjM)�”}”(hŒ[When ``NULL`` args is passed to kmem_cache_create(), it is equivalent to all fields unused.”h]”(hŒWhen ”…”�”}”(hjÝh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÝubhŒN args is passed to kmem_cache_create(), it is equivalent to all fields unused.”…”�”}”(hjÝh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M%hjLh²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ'kmem_cache_create_usercopy (C function)”Œc.kmem_cache_create_usercopy”hNt”auh1hÜhjLh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒÂstruct kmem_cache * kmem_cache_create_usercopy (const char *name, unsigned int size, unsigned int align, slab_flags_t flags, unsigned int useroffset, unsigned int usersize, void (*ctor)(void *))”h]”hù)�”}”(hŒ¿struct kmem_cache *kmem_cache_create_usercopy(const char *name, unsigned int size, unsigned int align, slab_flags_t flags, unsigned int useroffset, unsigned int usersize, void (*ctor)(void*))”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M–ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjh²hh³j$h´M–ubh)�”}”(hhh]”j)�”}”(hŒ kmem_cache”h]”hŒ kmem_cache”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j8Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒkmem_cache_create_usercopy”sbŒc.kmem_cache_create_usercopy”†”asbuh1hhjh²hh³j$h´M–ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjh²hh³j$h´M–ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjh²hh³j$h´M–ubhÿ)�”}”(hŒkmem_cache_create_usercopy”h]”j)�”}”(hjTh]”hŒkmem_cache_create_usercopy”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjrubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjh²hh³j$h´M–ubj )�”}”(hŒ’(const char *name, unsigned int size, unsigned int align, slab_flags_t flags, unsigned int useroffset, unsigned int usersize, void (*ctor)(void*))”h]”(j )�”}”(hŒconst char *name”h]”(j5)�”}”(hŒconst”h]”hŒconst”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�ubjµ)�”}”(hŒchar”h]”hŒchar”…”�”}”(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�ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj�ubj)�”}”(hŒname”h]”hŒname”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‰ubj )�”}”(hŒunsigned int size”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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ëubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(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ëubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj' h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‰ubj )�”}”(hŒunsigned int align”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj@ h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj< ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjN h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj< ubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj\ h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj< ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj< ubj)�”}”(hŒalign”h]”hŒalign”…”�”}”(hjx h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj< ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‰ubj )�”}”(hŒslab_flags_t flags”h]”(h)�”}”(hhh]”j)�”}”(hŒ slab_flags_t”h]”hŒ slab_flags_t”…”�”}”(hj” h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‘ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j– Œmodname”NŒ classname”Njpjs)�”}”jv]”jRŒc.kmem_cache_create_usercopy”†”asbuh1hhj� ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj² h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj� ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjÀ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj� ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‰ubj )�”}”(hŒunsigned int useroffset”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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Õ ubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(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Õ ubj)�”}”(hŒ useroffset”h]”hŒ useroffset”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‰ubj )�”}”(hŒunsigned int usersize”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj*!h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj&!ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8!h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj&!ubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjF!h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj&!ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjT!h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj&!ubj)�”}”(hŒusersize”h]”hŒusersize”…”�”}”(hjb!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj&!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‰ubj )�”}”(hŒvoid (*ctor)(void*)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj{!h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjw!ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰!h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjw!ubjF )�”}”(hŒ(”h]”hŒ(”…”�”}”(hj—!h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjw!ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¥!h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjw!ubj)�”}”(hŒctor”h]”hŒctor”…”�”}”(hj²!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjw!ubjF )�”}”(hŒ)”h]”hŒ)”…”�”}”(hjÀ!h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjw!ubjF )�”}”(hj™!h]”hŒ(”…”�”}”(hjÎ!h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjw!ubjµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÛ!h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjw!ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjé!h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjw!ubjF )�”}”(hjÂ!h]”hŒ)”…”�”}”(hjö!h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjw!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‰ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjh²hh³j$h´M–ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjh²hh³j$h´M–ubah}”(h]”j ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j$h´M–hj h²hubj4)�”}”(hhh]”jM)�”}”(hŒDCreate a kmem cache with a region suitable for copying to userspace.”h]”hŒDCreate a kmem cache with a region suitable for copying to userspace.”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M–hj"h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj h²hh³j$h´M–ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj7"jHj7"jI‰jJ‰jK‰uh1híh²hhjLh³Nh´Nubj„)�”}”(hX **Parameters** ``const char *name`` A string which is used in /proc/slabinfo to identify this cache. ``unsigned int size`` The size of objects to be created in this cache. ``unsigned int align`` The required alignment for the objects. ``slab_flags_t flags`` SLAB flags ``unsigned int useroffset`` Usercopy region offset ``unsigned int usersize`` Usercopy region size ``void (*ctor)(void *)`` A constructor for the objects, or ``NULL``. **Description** This is a legacy wrapper, new code should use either KMEM_CACHE_USERCOPY() if whitelisting a single field is sufficient, or kmem_cache_create() with the necessary parameters passed via the args parameter (see :c:type:`struct kmem_cache_args `) **Return** a pointer to the cache on success, NULL on failure.”h]”(jM)�”}”(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&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mšhj;"ubj¤)�”}”(hhh]”(j©)�”}”(hŒV``const char *name`` A string which is used in /proc/slabinfo to identify this cache. ”h]”(j¯)�”}”(hŒ``const char *name``”h]”jS)�”}”(hj`"h]”hŒconst char *name”…”�”}”(hjb"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj^"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M˜hjZ"ubjÉ)�”}”(hhh]”jM)�”}”(hŒ@A string which is used in /proc/slabinfo to identify this cache.”h]”hŒ@A string which is used in /proc/slabinfo to identify this cache.”…”�”}”(hjy"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ju"h´M˜hjv"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjZ"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³ju"h´M˜hjW"ubj©)�”}”(hŒG``unsigned int size`` The size of objects to be created in this cache. ”h]”(j¯)�”}”(hŒ``unsigned int size``”h]”jS)�”}”(hj™"h]”hŒunsigned int size”…”�”}”(hj›"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj—"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M™hj“"ubjÉ)�”}”(hhh]”jM)�”}”(hŒ0The size of objects to be created in this cache.”h]”hŒ0The size of objects to be created in this cache.”…”�”}”(hj²"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j®"h´M™hj¯"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj“"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j®"h´M™hjW"ubj©)�”}”(hŒ?``unsigned int align`` The required alignment for the objects. ”h]”(j¯)�”}”(hŒ``unsigned int align``”h]”jS)�”}”(hjÒ"h]”hŒunsigned int align”…”�”}”(hjÔ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÐ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MšhjÌ"ubjÉ)�”}”(hhh]”jM)�”}”(hŒ'The required alignment for the objects.”h]”hŒ'The required alignment for the objects.”…”�”}”(hjë"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jç"h´Mšhjè"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÌ"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jç"h´MšhjW"ubj©)�”}”(hŒ"``slab_flags_t flags`` SLAB flags ”h]”(j¯)�”}”(hŒ``slab_flags_t flags``”h]”jS)�”}”(hj #h]”hŒslab_flags_t flags”…”�”}”(hj #h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj #ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M›hj#ubjÉ)�”}”(hhh]”jM)�”}”(hŒ SLAB flags”h]”hŒ SLAB flags”…”�”}”(hj$#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j #h´M›hj!#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j #h´M›hjW"ubj©)�”}”(hŒ3``unsigned int useroffset`` Usercopy region offset ”h]”(j¯)�”}”(hŒ``unsigned int useroffset``”h]”jS)�”}”(hjD#h]”hŒunsigned int useroffset”…”�”}”(hjF#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjB#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mœhj>#ubjÉ)�”}”(hhh]”jM)�”}”(hŒUsercopy region offset”h]”hŒUsercopy region offset”…”�”}”(hj]#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jY#h´MœhjZ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj>#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jY#h´MœhjW"ubj©)�”}”(hŒ/``unsigned int usersize`` Usercopy region size ”h]”(j¯)�”}”(hŒ``unsigned int usersize``”h]”jS)�”}”(hj}#h]”hŒunsigned int usersize”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj{#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M�hjw#ubjÉ)�”}”(hhh]”jM)�”}”(hŒUsercopy region size”h]”hŒUsercopy region size”…”�”}”(hj–#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j’#h´M�hj“#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjw#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j’#h´M�hjW"ubj©)�”}”(hŒE``void (*ctor)(void *)`` A constructor for the objects, or ``NULL``. ”h]”(j¯)�”}”(hŒ``void (*ctor)(void *)``”h]”jS)�”}”(hj¶#h]”hŒvoid (*ctor)(void *)”…”�”}”(hj¸#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj´#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mžhj°#ubjÉ)�”}”(hhh]”jM)�”}”(hŒ+A constructor for the objects, or ``NULL``.”h]”(hŒ"A constructor for the objects, or ”…”�”}”(hjÏ#h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj×#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÏ#ubhŒ.”…”�”}”(hjÏ#h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jË#h´MžhjÌ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj°#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jË#h´MžhjW"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj;"ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj$h]”hŒ Description”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M hj;"ubjM)�”}”(hXThis is a legacy wrapper, new code should use either KMEM_CACHE_USERCOPY() if whitelisting a single field is sufficient, or kmem_cache_create() with the necessary parameters passed via the args parameter (see :c:type:`struct kmem_cache_args `)”h]”(hŒÑThis is a legacy wrapper, new code should use either KMEM_CACHE_USERCOPY() if whitelisting a single field is sufficient, or kmem_cache_create() with the necessary parameters passed via the args parameter (see ”…”�”}”(hj$h²hh³Nh´Nubh)�”}”(hŒ2:c:type:`struct kmem_cache_args `”h]”jS)�”}”(hj#$h]”hŒstruct kmem_cache_args”…”�”}”(hj%$h²hh³Nh´Nubah}”(h]”h ]”(jjAŒc-type”eh"]”h$]”h&]”uh1jRhj!$ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j(Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jpj.j1Œkmem_cache_args”uh1hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MŸhj$ubhŒ)”…”�”}”(hj$h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j@$h´MŸhj;"ubjM)�”}”(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&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M¤hj;"ubjM)�”}”(hŒ3a pointer to the cache on success, NULL on failure.”h]”hŒ3a pointer to the cache on success, NULL on failure.”…”�”}”(hjc$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M¥hj;"ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjLh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmem_cache_create (C macro)”Œc.kmem_cache_create”hNt”auh1hÜhjLh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒkmem_cache_create”h]”hù)�”}”(hŒkmem_cache_create”h]”hÿ)�”}”(hŒkmem_cache_create”h]”j)�”}”(hjŒ$h]”hŒkmem_cache_create”…”�”}”(hj–$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj’$ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjŽ$h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MÇubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjŠ$h²hh³j©$h´MÇubah}”(h]”j…$ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j©$h´MÇhj‡$h²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hj‡$h²hh³j©$h´MÇubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGjÂ$jHjÂ$jI‰jJ‰jK‰uh1híh²hhjLh³Nh´NubjM)�”}”(hŒ:``kmem_cache_create (__name, __object_size, __args, ...)``”h]”jS)�”}”(hjÈ$h]”hŒ6kmem_cache_create (__name, __object_size, __args, ...)”…”�”}”(hjÊ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÆ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MÉhjLh²hubji)�”}”(hŒCreate a kmem cache. ”h]”jM)�”}”(hŒCreate a kmem cache.”h]”hŒCreate a kmem cache.”…”�”}”(hjâ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MÇhjÞ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jð$h´MÇhjLh²hubj„)�”}”(hXã**Parameters** ``__name`` A string which is used in /proc/slabinfo to identify this cache. ``__object_size`` The size of objects to be created in this cache. ``__args`` Optional arguments, see :c:type:`struct kmem_cache_args `. Passing ``NULL`` means defaults will be used for all the arguments. ``...`` variable arguments **Description** This is currently implemented as a macro using ``_Generic()`` to call either the new variant of the function, or a legacy one. The new variant has 4 parameters: ``kmem_cache_create(name, object_size, args, flags)`` See __kmem_cache_create_args() which implements this. The legacy variant has 5 parameters: ``kmem_cache_create(name, object_size, align, flags, ctor)`` The align and ctor parameters map to the respective fields of :c:type:`struct kmem_cache_args ` **Context** Cannot be called within a interrupt, but can be interrupted. **Return** a pointer to the cache on success, NULL on failure.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjý$h]”hŒ Parameters”…”�”}”(hjÿ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjû$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MËhj÷$ubj¤)�”}”(hhh]”(j©)�”}”(hŒL``__name`` A string which is used in /proc/slabinfo to identify this cache. ”h]”(j¯)�”}”(hŒ ``__name``”h]”jS)�”}”(hj%h]”hŒ__name”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MÈhj%ubjÉ)�”}”(hhh]”jM)�”}”(hŒ@A string which is used in /proc/slabinfo to identify this cache.”h]”hŒ@A string which is used in /proc/slabinfo to identify this cache.”…”�”}”(hj5%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j1%h´MÈhj2%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j1%h´MÈhj%ubj©)�”}”(hŒC``__object_size`` The size of objects to be created in this cache. ”h]”(j¯)�”}”(hŒ``__object_size``”h]”jS)�”}”(hjU%h]”hŒ __object_size”…”�”}”(hjW%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjS%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MÉhjO%ubjÉ)�”}”(hhh]”jM)�”}”(hŒ0The size of objects to be created in this cache.”h]”hŒ0The size of objects to be created in this cache.”…”�”}”(hjn%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jj%h´MÉhjk%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjO%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jj%h´MÉhj%ubj©)�”}”(hŒ›``__args`` Optional arguments, see :c:type:`struct kmem_cache_args `. Passing ``NULL`` means defaults will be used for all the arguments. ”h]”(j¯)�”}”(hŒ ``__args``”h]”jS)�”}”(hjŽ%h]”hŒ__args”…”�”}”(hj�%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjŒ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MËhjˆ%ubjÉ)�”}”(hhh]”jM)�”}”(hŒ�Optional arguments, see :c:type:`struct kmem_cache_args `. Passing ``NULL`` means defaults will be used for all the arguments.”h]”(hŒOptional arguments, see ”…”�”}”(hj§%h²hh³Nh´Nubh)�”}”(hŒ2:c:type:`struct kmem_cache_args `”h]”jS)�”}”(hj±%h]”hŒstruct kmem_cache_args”…”�”}”(hj³%h²hh³Nh´Nubah}”(h]”h ]”(jjAŒc-type”eh"]”h$]”h&]”uh1jRhj¯%ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j(Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jpj.j1Œkmem_cache_args”uh1hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MÊhj§%ubhŒ . Passing ”…”�”}”(hj§%h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjÓ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj§%ubhŒ3 means defaults will be used for all the arguments.”…”�”}”(hj§%h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÎ%h´MÊhj¤%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjˆ%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j£%h´MËhj%ubj©)�”}”(hŒ``...`` variable arguments ”h]”(j¯)�”}”(hŒ``...``”h]”jS)�”}”(hjý%h]”hŒ...”…”�”}”(hjÿ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjû%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Khj÷%ubjÉ)�”}”(hhh]”jM)�”}”(hŒvariable arguments”h]”hŒvariable arguments”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j&h´Khj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj÷%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j&h´Khj%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj÷$ubjM)�”}”(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&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Khj÷$ubjM)�”}”(hŒ~This is currently implemented as a macro using ``_Generic()`` to call either the new variant of the function, or a legacy one.”h]”(hŒ/This is currently implemented as a macro using ”…”�”}”(hjN&h²hh³Nh´NubjS)�”}”(hŒ``_Generic()``”h]”hŒ _Generic()”…”�”}”(hjV&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjN&ubhŒA to call either the new variant of the function, or a legacy one.”…”�”}”(hjN&h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MÌhj÷$ubjM)�”}”(hŒWThe new variant has 4 parameters: ``kmem_cache_create(name, object_size, args, flags)``”h]”(hŒ"The new variant has 4 parameters: ”…”�”}”(hjo&h²hh³Nh´NubjS)�”}”(hŒ5``kmem_cache_create(name, object_size, args, flags)``”h]”hŒ1kmem_cache_create(name, object_size, args, flags)”…”�”}”(hjw&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjo&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MÏhj÷$ubjM)�”}”(hŒ5See __kmem_cache_create_args() which implements this.”h]”hŒ5See __kmem_cache_create_args() which implements this.”…”�”}”(hjŒ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MÒhj÷$ubjM)�”}”(hŒaThe legacy variant has 5 parameters: ``kmem_cache_create(name, object_size, align, flags, ctor)``”h]”(hŒ%The legacy variant has 5 parameters: ”…”�”}”(hj›&h²hh³Nh´NubjS)�”}”(hŒ<``kmem_cache_create(name, object_size, align, flags, ctor)``”h]”hŒ8kmem_cache_create(name, object_size, align, flags, ctor)”…”�”}”(hj£&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj›&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MÔhj÷$ubjM)�”}”(hŒpThe align and ctor parameters map to the respective fields of :c:type:`struct kmem_cache_args `”h]”(hŒ>The align and ctor parameters map to the respective fields of ”…”�”}”(hj¸&h²hh³Nh´Nubh)�”}”(hŒ2:c:type:`struct kmem_cache_args `”h]”jS)�”}”(hjÂ&h]”hŒstruct kmem_cache_args”…”�”}”(hjÄ&h²hh³Nh´Nubah}”(h]”h ]”(jjAŒc-type”eh"]”h$]”h&]”uh1jRhjÀ&ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j(Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jpj.j1Œkmem_cache_args”uh1hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M×hj¸&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jß&h´M×hj÷$ubjM)�”}”(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&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MÚhj÷$ubjM)�”}”(hŒ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MBhj?)ubjM)�”}”(hŒkIn any case, the contents of the object pointed to are preserved up to the lesser of the new and old sizes.”h]”hŒkIn any case, the contents of the object pointed to are preserved up to the lesser of the new and old sizes.”…”�”}”(hjM+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MFhj?)ubjM)�”}”(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&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MIhj?)ubjM)�”}”(hŒvoid *kmem_cache_alloc(struct kmem_cache *cachep, gfp_t flags)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjµ+h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj±+h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MMubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄ+h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj±+h²hh³jÃ+h´MMubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÒ+h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj±+h²hh³jÃ+h´MMubhÿ)�”}”(hŒkmem_cache_alloc”h]”j)�”}”(hŒkmem_cache_alloc”h]”hŒkmem_cache_alloc”…”�”}”(hjã+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjß+ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj±+h²hh³jÃ+h´MMubj )�”}”(hŒ((struct kmem_cache *cachep, gfp_t flags)”h]”(j )�”}”(hŒstruct kmem_cache *cachep”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÿ+h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjû+ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ,h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjû+ubh)�”}”(hhh]”j)�”}”(hŒ kmem_cache”h]”hŒ kmem_cache”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj,ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j,Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljå+sbŒc.kmem_cache_alloc”†”asbuh1hhjû+ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=,h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjû+ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjK,h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjû+ubj)�”}”(hŒcachep”h]”hŒcachep”…”�”}”(hjX,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjû+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj÷+ubj )�”}”(hŒ gfp_t flags”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjt,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjq,ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jv,Œmodname”NŒ classname”Njpjs)�”}”jv]”j9,Œc.kmem_cache_alloc”†”asbuh1hhjm,ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’,h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjm,ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj ,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjm,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj÷+ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj±+h²hh³jÃ+h´MMubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj­+h²hh³jÃ+h´MMubah}”(h]”j¨+ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÃ+h´MMhjª+h²hubj4)�”}”(hhh]”jM)�”}”(hŒAllocate an object”h]”hŒAllocate an object”…”�”}”(hjÊ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MMhjÇ,h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjª+h²hh³jÃ+h´MMubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjâ,jHjâ,jI‰jJ‰jK‰uh1híh²hhjLh³Nh´Nubj„)�”}”(hX-**Parameters** ``struct kmem_cache *cachep`` The cache to allocate from. ``gfp_t flags`` See kmalloc(). **Description** Allocate an object from this cache. See kmem_cache_zalloc() for a shortcut of adding __GFP_ZERO to flags. **Return** pointer to the new object or ``NULL`` in case of error”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjì,h]”hŒ Parameters”…”�”}”(hjî,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjê,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MQhjæ,ubj¤)�”}”(hhh]”(j©)�”}”(hŒ:``struct kmem_cache *cachep`` The cache to allocate from. ”h]”(j¯)�”}”(hŒ``struct kmem_cache *cachep``”h]”jS)�”}”(hj -h]”hŒstruct kmem_cache *cachep”…”�”}”(hj -h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj -ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MNhj-ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe cache to allocate from.”h]”hŒThe cache to allocate from.”…”�”}”(hj$-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j -h´MNhj!-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j -h´MNhj-ubj©)�”}”(hŒ``gfp_t flags`` See kmalloc(). ”h]”(j¯)�”}”(hŒ``gfp_t flags``”h]”jS)�”}”(hjD-h]”hŒ gfp_t flags”…”�”}”(hjF-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjB-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MOhj>-ubjÉ)�”}”(hhh]”jM)�”}”(hŒSee kmalloc().”h]”hŒSee kmalloc().”…”�”}”(hj]-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jY-h´MOhjZ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj>-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jY-h´MOhj-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjæ,ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj-h]”hŒ Description”…”�”}”(hj�-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj}-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MQhjæ,ubjM)�”}”(hŒiAllocate an object from this cache. See kmem_cache_zalloc() for a shortcut of adding __GFP_ZERO to flags.”h]”hŒiAllocate an object from this cache. See kmem_cache_zalloc() for a shortcut of adding __GFP_ZERO to flags.”…”�”}”(hj•-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MPhjæ,ubjM)�”}”(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&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MShjæ,ubjM)�”}”(hŒ6pointer to the new object or ``NULL`` in case of error”h]”(hŒpointer to the new object or ”…”�”}”(hj¼-h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjÄ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¼-ubhŒ in case of error”…”�”}”(hj¼-h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MThjæ,ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjLh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmem_cache_charge (C function)”Œc.kmem_cache_charge”hNt”auh1hÜhjLh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ3bool kmem_cache_charge (void *objp, gfp_t gfpflags)”h]”hù)�”}”(hŒ2bool kmem_cache_charge(void *objp, gfp_t gfpflags)”h]”(jµ)�”}”(hŒbool”h]”hŒbool”…”�”}”(hjý-h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjù-h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M_ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj .h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjù-h²hh³j .h´M_ubhÿ)�”}”(hŒkmem_cache_charge”h]”j)�”}”(hŒkmem_cache_charge”h]”hŒkmem_cache_charge”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj.ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjù-h²hh³j .h´M_ubj )�”}”(hŒ(void *objp, gfp_t gfpflags)”h]”(j )�”}”(hŒ void *objp”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj:.h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj6.ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjH.h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj6.ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjV.h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj6.ubj)�”}”(hŒobjp”h]”hŒobjp”…”�”}”(hjc.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj6.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj2.ubj )�”}”(hŒgfp_t gfpflags”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj|.ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j�.Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj .sbŒc.kmem_cache_charge”†”asbuh1hhjx.ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ.h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjx.ubj)�”}”(hŒgfpflags”h]”hŒgfpflags”…”�”}”(hj­.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjx.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj2.ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjù-h²hh³j .h´M_ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjõ-h²hh³j .h´M_ubah}”(h]”jð-ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j .h´M_hjò-h²hubj4)�”}”(hhh]”jM)�”}”(hŒ-memcg charge an already allocated slab memory”h]”hŒ-memcg charge an already allocated slab memory”…”�”}”(hj×.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M_hjÔ.h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjò-h²hh³j .h´M_ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjï.jHjï.jI‰jJ‰jK‰uh1híh²hhjLh³Nh´Nubj„)�”}”(hX‡**Parameters** ``void *objp`` address of the slab object to memcg charge ``gfp_t gfpflags`` describe the allocation context **Description** kmem_cache_charge allows charging a slab object to the current memcg, primarily in cases where charging at allocation time might not be possible because the target memcg is not known (i.e. softirq context) The objp should be pointer returned by the slab allocator functions like kmalloc (with __GFP_ACCOUNT in flags) or kmem_cache_alloc. The memcg charge behavior can be controlled through gfpflags parameter, which affects how the necessary internal metadata can be allocated. Including __GFP_NOFAIL denotes that overcharging is requested instead of failure, but is not applied for the internal metadata allocation. There are several cases where it will return true even if the charging was not done: More specifically: 1. For !CONFIG_MEMCG or cgroup_disable=memory systems. 2. Already charged slab objects. 3. For slab objects from KMALLOC_NORMAL caches - allocated by kmalloc() without __GFP_ACCOUNT 4. Allocating internal metadata has failed **Return** true if charge was successful otherwise false.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjù.h]”hŒ Parameters”…”�”}”(hjû.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj÷.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mchjó.ubj¤)�”}”(hhh]”(j©)�”}”(hŒ:``void *objp`` address of the slab object to memcg charge ”h]”(j¯)�”}”(hŒ``void *objp``”h]”jS)�”}”(hj/h]”hŒ void *objp”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M`hj/ubjÉ)�”}”(hhh]”jM)�”}”(hŒ*address of the slab object to memcg charge”h]”hŒ*address of the slab object to memcg charge”…”�”}”(hj1/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j-/h´M`hj./ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j-/h´M`hj/ubj©)�”}”(hŒ3``gfp_t gfpflags`` describe the allocation context ”h]”(j¯)�”}”(hŒ``gfp_t gfpflags``”h]”jS)�”}”(hjQ/h]”hŒgfp_t gfpflags”…”�”}”(hjS/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjO/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MahjK/ubjÉ)�”}”(hhh]”jM)�”}”(hŒdescribe the allocation context”h]”hŒdescribe the allocation context”…”�”}”(hjj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jf/h´Mahjg/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjK/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jf/h´Mahj/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjó.ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjŒ/h]”hŒ Description”…”�”}”(hjŽ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŠ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mchjó.ubjM)�”}”(hŒÍkmem_cache_charge allows charging a slab object to the current memcg, primarily in cases where charging at allocation time might not be possible because the target memcg is not known (i.e. softirq context)”h]”hŒÍkmem_cache_charge allows charging a slab object to the current memcg, primarily in cases where charging at allocation time might not be possible because the target memcg is not known (i.e. softirq context)”…”�”}”(hj¢/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mbhjó.ubjM)�”}”(hXšThe objp should be pointer returned by the slab allocator functions like kmalloc (with __GFP_ACCOUNT in flags) or kmem_cache_alloc. The memcg charge behavior can be controlled through gfpflags parameter, which affects how the necessary internal metadata can be allocated. Including __GFP_NOFAIL denotes that overcharging is requested instead of failure, but is not applied for the internal metadata allocation.”h]”hXšThe objp should be pointer returned by the slab allocator functions like kmalloc (with __GFP_ACCOUNT in flags) or kmem_cache_alloc. The memcg charge behavior can be controlled through gfpflags parameter, which affects how the necessary internal metadata can be allocated. Including __GFP_NOFAIL denotes that overcharging is requested instead of failure, but is not applied for the internal metadata allocation.”…”�”}”(hj±/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mfhjó.ubjM)�”}”(hŒgThere are several cases where it will return true even if the charging was not done: More specifically:”h]”hŒgThere are several cases where it will return true even if the charging was not done: More specifically:”…”�”}”(hjÀ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mmhjó.ubhŒenumerated_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ3For !CONFIG_MEMCG or cgroup_disable=memory systems.”h]”jM)�”}”(hjØ/h]”hŒ3For !CONFIG_MEMCG or cgroup_disable=memory systems.”…”�”}”(hjÚ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MqhjÖ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjÑ/ubjÕ/)�”}”(hŒAlready charged slab objects.”h]”jM)�”}”(hjð/h]”hŒAlready charged slab objects.”…”�”}”(hjò/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mrhjî/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjÑ/ubjÕ/)�”}”(hŒZFor slab objects from KMALLOC_NORMAL caches - allocated by kmalloc() without __GFP_ACCOUNT”h]”jM)�”}”(hŒZFor slab objects from KMALLOC_NORMAL caches - allocated by kmalloc() without __GFP_ACCOUNT”h]”hŒZFor slab objects from KMALLOC_NORMAL caches - allocated by kmalloc() without __GFP_ACCOUNT”…”�”}”(hj 0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mshj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjÑ/ubjÕ/)�”}”(hŒ(Allocating internal metadata has failed ”h]”jM)�”}”(hŒ'Allocating internal metadata has failed”h]”hŒ'Allocating internal metadata has failed”…”�”}”(hj#0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Muhj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjÑ/ubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1jÏ/hjó.ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjE0h]”hŒReturn”…”�”}”(hjG0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjC0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mwhjó.ubjM)�”}”(hŒ.true if charge was successful otherwise false.”h]”hŒ.true if charge was successful otherwise false.”…”�”}”(hj[0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mxhjó.ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjLh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmalloc (C function)”Œ c.kmalloc”hNt”auh1hÜhjLh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ)void * kmalloc (size_t size, gfp_t flags)”h]”hù)�”}”(hŒ'void *kmalloc(size_t size, gfp_t flags)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjŠ0h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj†0h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MèubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™0h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj†0h²hh³j˜0h´MèubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj§0h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj†0h²hh³j˜0h´Mèubhÿ)�”}”(hŒkmalloc”h]”j)�”}”(hŒkmalloc”h]”hŒkmalloc”…”�”}”(hj¸0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj´0ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj†0h²hh³j˜0h´Mèubj )�”}”(hŒ(size_t size, gfp_t flags)”h]”(j )�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj×0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÔ0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÙ0Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljº0sbŒ c.kmalloc”†”asbuh1hhjÐ0ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷0h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÐ0ubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÐ0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÌ0ubj )�”}”(hŒ gfp_t flags”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj!1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj1ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j#1Œmodname”NŒ classname”Njpjs)�”}”jv]”jó0Œ c.kmalloc”†”asbuh1hhj1ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?1h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj1ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjM1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÌ0ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj†0h²hh³j˜0h´Mèubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj‚0h²hh³j˜0h´Mèubah}”(h]”j}0ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j˜0h´Mèhj0h²hubj4)�”}”(hhh]”jM)�”}”(hŒallocate kernel memory”h]”hŒallocate kernel memory”…”�”}”(hjw1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mèhjt1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj0h²hh³j˜0h´Mèubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj�1jHj�1jI‰jJ‰jK‰uh1híh²hhjLh³Nh´Nubj„)�”}”(hX¬**Parameters** ``size_t size`` how many bytes of memory are required. ``gfp_t flags`` describe the allocation context **Description** kmalloc is the normal method of allocating memory for objects smaller than page size in the kernel. The allocated object address is aligned to at least ARCH_KMALLOC_MINALIGN bytes. For **size** of power of two bytes, the alignment is also guaranteed to be at least to the size. For other sizes, the alignment is guaranteed to be at least the largest power-of-two divisor of **size**. The **flags** argument may be one of the GFP flags defined at include/linux/gfp_types.h and described at :ref:`Documentation/core-api/mm-api.rst ` The recommended usage of the **flags** is described at :ref:`Documentation/core-api/memory-allocation.rst ` Below is a brief outline of the most useful GFP flags ``GFP_KERNEL`` Allocate normal kernel ram. May sleep. ``GFP_NOWAIT`` Allocation will not sleep. ``GFP_ATOMIC`` Allocation will not sleep. May use emergency pools. Also it is possible to set different flags by OR'ing in one or more of the following additional **flags**: ``__GFP_ZERO`` Zero the allocated memory before returning. Also see kzalloc(). ``__GFP_HIGH`` This allocation has high priority and may use emergency pools. ``__GFP_NOFAIL`` Indicate that this allocation is in no way allowed to fail (think twice before using). ``__GFP_NORETRY`` If memory is not immediately available, then give up at once. ``__GFP_NOWARN`` If allocation fails, don't issue any warnings. ``__GFP_RETRY_MAYFAIL`` Try really hard to succeed the allocation but fail eventually.”h]”(jM)�”}”(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&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mìhj“1ubj¤)�”}”(hhh]”(j©)�”}”(hŒ7``size_t size`` how many bytes of memory are required. ”•h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hj¸1h]”hŒ size_t size”…”�”}”(hjº1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¶1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Méhj²1ubjÉ)�”}”(hhh]”jM)�”}”(hŒ&how many bytes of memory are required.”h]”hŒ&how many bytes of memory are required.”…”�”}”(hjÑ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÍ1h´MéhjÎ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj²1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÍ1h´Méhj¯1ubj©)�”}”(hŒ0``gfp_t flags`` describe the allocation context ”h]”(j¯)�”}”(hŒ``gfp_t flags``”h]”jS)�”}”(hjñ1h]”hŒ gfp_t flags”…”�”}”(hjó1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjï1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mêhjë1ubjÉ)�”}”(hhh]”jM)�”}”(hŒdescribe the allocation context”h]”hŒdescribe the allocation context”…”�”}”(hj 2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j2h´Mêhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjë1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j2h´Mêhj¯1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj“1ubjM)�”}”(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&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mìhj“1ubjM)�”}”(hŒckmalloc is the normal method of allocating memory for objects smaller than page size in the kernel.”h]”hŒckmalloc is the normal method of allocating memory for objects smaller than page size in the kernel.”…”�”}”(hjB2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mëhj“1ubjM)�”}”(hXThe allocated object address is aligned to at least ARCH_KMALLOC_MINALIGN bytes. For **size** of power of two bytes, the alignment is also guaranteed to be at least to the size. For other sizes, the alignment is guaranteed to be at least the largest power-of-two divisor of **size**.”h]”(hŒUThe allocated object address is aligned to at least ARCH_KMALLOC_MINALIGN bytes. For ”…”�”}”(hjQ2h²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjY2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjQ2ubhŒµ of power of two bytes, the alignment is also guaranteed to be at least to the size. For other sizes, the alignment is guaranteed to be at least the largest power-of-two divisor of ”…”�”}”(hjQ2h²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjk2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjQ2ubhŒ.”…”�”}”(hjQ2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mîhj“1ubjM)�”}”(hŒ¤The **flags** argument may be one of the GFP flags defined at include/linux/gfp_types.h and described at :ref:`Documentation/core-api/mm-api.rst `”h]”(hŒThe ”…”�”}”(hj„2h²hh³Nh´NubjŽ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hjŒ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj„2ubhŒ\ argument may be one of the GFP flags defined at include/linux/gfp_types.h and described at ”…”�”}”(hj„2h²hh³Nh´Nubh)�”}”(hŒ;:ref:`Documentation/core-api/mm-api.rst `”h]”hŒinline”“”)�”}”(hj 2h]”hŒ!Documentation/core-api/mm-api.rst”…”�”}”(hj¤2h²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1j¢2hjž2ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j(Œ refdomain”j®2Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj1Œmm-api-gfp-flags”uh1hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Móhj„2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÀ2h´Móhj“1ubjM)�”}”(hŒ~The recommended usage of the **flags** is described at :ref:`Documentation/core-api/memory-allocation.rst `”h]”(hŒThe recommended usage of the ”…”�”}”(hjÇ2h²hh³Nh´NubjŽ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hjÏ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÇ2ubhŒ is described at ”…”�”}”(hjÇ2h²hh³Nh´Nubh)�”}”(hŒG:ref:`Documentation/core-api/memory-allocation.rst `”h]”j£2)�”}”(hjã2h]”hŒ,Documentation/core-api/memory-allocation.rst”…”�”}”(hjå2h²hh³Nh´Nubah}”(h]”h ]”(jŒstd”Œstd-ref”eh"]”h$]”h&]”uh1j¢2hjá2ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j(Œ refdomain”jï2Œreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj1Œmemory_allocation”uh1hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M÷hjÇ2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j3h´M÷hj“1ubjM)�”}”(hŒ5Below is a brief outline of the most useful GFP flags”h]”hŒ5Below is a brief outline of the most useful GFP flags”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Múhj“1ubj¤)�”}”(hhh]”(j©)�”}”(hŒ6``GFP_KERNEL`` Allocate normal kernel ram. May sleep. ”h]”(j¯)�”}”(hŒ``GFP_KERNEL``”h]”jS)�”}”(hj 3h]”hŒ GFP_KERNEL”…”�”}”(hj"3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mýhj3ubjÉ)�”}”(hhh]”jM)�”}”(hŒ&Allocate normal kernel ram. May sleep.”h]”hŒ&Allocate normal kernel ram. May sleep.”…”�”}”(hj93h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j53h´Mýhj63ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j53h´Mýhj3ubj©)�”}”(hŒ*``GFP_NOWAIT`` Allocation will not sleep. ”h]”(j¯)�”}”(hŒ``GFP_NOWAIT``”h]”jS)�”}”(hjY3h]”hŒ GFP_NOWAIT”…”�”}”(hj[3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjW3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MhjS3ubjÉ)�”}”(hhh]”jM)�”}”(hŒAllocation will not sleep.”h]”hŒAllocation will not sleep.”…”�”}”(hjr3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jn3h´Mhjo3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjS3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jn3h´Mhj3ubj©)�”}”(hŒD``GFP_ATOMIC`` Allocation will not sleep. May use emergency pools. ”h]”(j¯)�”}”(hŒ``GFP_ATOMIC``”h]”jS)�”}”(hj’3h]”hŒ GFP_ATOMIC”…”�”}”(hj”3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MhjŒ3ubjÉ)�”}”(hhh]”jM)�”}”(hŒ4Allocation will not sleep. May use emergency pools.”h]”hŒ4Allocation will not sleep. May use emergency pools.”…”�”}”(hj«3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j§3h´Mhj¨3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjŒ3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j§3h´Mhj3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj“1ubjM)�”}”(hŒjAlso it is possible to set different flags by OR'ing in one or more of the following additional **flags**:”h]”(hŒbAlso it is possible to set different flags by OR’ing in one or more of the following additional ”…”�”}”(hjË3h²hh³Nh´NubjŽ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hjÓ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjË3ubhŒ:”…”�”}”(hjË3h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mhj“1ubj¤)�”}”(hhh]”(j©)�”}”(hŒO``__GFP_ZERO`` Zero the allocated memory before returning. Also see kzalloc(). ”h]”(j¯)�”}”(hŒ``__GFP_ZERO``”h]”jS)�”}”(hjõ3h]”hŒ __GFP_ZERO”…”�”}”(hj÷3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjó3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M hjï3ubjÉ)�”}”(hhh]”jM)�”}”(hŒ?Zero the allocated memory before returning. Also see kzalloc().”h]”hŒ?Zero the allocated memory before returning. Also see kzalloc().”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j 4h´M hj 4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjï3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j 4h´M hjì3ubj©)�”}”(hŒN``__GFP_HIGH`` This allocation has high priority and may use emergency pools. ”h]”(j¯)�”}”(hŒ``__GFP_HIGH``”h]”jS)�”}”(hj.4h]”hŒ __GFP_HIGH”…”�”}”(hj04h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj,4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M hj(4ubjÉ)�”}”(hhh]”jM)�”}”(hŒ>This allocation has high priority and may use emergency pools.”h]”hŒ>This allocation has high priority and may use emergency pools.”…”�”}”(hjG4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jC4h´M hjD4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj(4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jC4h´M hjì3ubj©)�”}”(hŒh``__GFP_NOFAIL`` Indicate that this allocation is in no way allowed to fail (think twice before using). ”h]”(j¯)�”}”(hŒ``__GFP_NOFAIL``”h]”jS)�”}”(hjg4h]”hŒ __GFP_NOFAIL”…”�”}”(hji4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhje4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mhja4ubjÉ)�”}”(hhh]”jM)�”}”(hŒVIndicate that this allocation is in no way allowed to fail (think twice before using).”h]”hŒVIndicate that this allocation is in no way allowed to fail (think twice before using).”…”�”}”(hj€4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mhj}4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhja4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j|4h´Mhjì3ubj©)�”}”(hŒP``__GFP_NORETRY`` If memory is not immediately available, then give up at once. ”h]”(j¯)�”}”(hŒ``__GFP_NORETRY``”h]”jS)�”}”(hj¡4h]”hŒ __GFP_NORETRY”…”�”}”(hj£4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjŸ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mhj›4ubjÉ)�”}”(hhh]”jM)�”}”(hŒ=If memory is not immediately available, then give up at once.”h]”hŒ=If memory is not immediately available, then give up at once.”…”�”}”(hjº4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mhj·4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj›4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¶4h´Mhjì3ubj©)�”}”(hŒ@``__GFP_NOWARN`` If allocation fails, don't issue any warnings. ”h]”(j¯)�”}”(hŒ``__GFP_NOWARN``”h]”jS)�”}”(hjÛ4h]”hŒ __GFP_NOWARN”…”�”}”(hjÝ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÙ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MhjÕ4ubjÉ)�”}”(hhh]”jM)�”}”(hŒ.If allocation fails, don't issue any warnings.”h]”hŒ0If allocation fails, don’t issue any warnings.”…”�”}”(hjô4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jð4h´Mhjñ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÕ4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jð4h´Mhjì3ubj©)�”}”(hŒV``__GFP_RETRY_MAYFAIL`` Try really hard to succeed the allocation but fail eventually.”h]”(j¯)�”}”(hŒ``__GFP_RETRY_MAYFAIL``”h]”jS)�”}”(hj5h]”hŒ__GFP_RETRY_MAYFAIL”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mhj5ubjÉ)�”}”(hhh]”jM)�”}”(hŒ>Try really hard to succeed the allocation but fail eventually.”h]”hŒ>Try really hard to succeed the allocation but fail eventually.”…”�”}”(hj-5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j)5h´Mhj*5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j)5h´Mhjì3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj“1ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjLh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmalloc_nolock (C function)”Œc.kmalloc_nolock”hNt”auh1hÜhjLh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ>void * kmalloc_nolock (size_t size, gfp_t gfp_flags, int node)”h]”hù)�”}”(hŒ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MKhj:;ubjÉ)�”}”(hhh]”jM)�”}”(hŒ0how many **FAM** elements to allocate space for.”h]”(hŒ how many ”…”�”}”(hjY;h²hh³Nh´NubjŽ)�”}”(hŒ**FAM**”h]”hŒFAM”…”�”}”(hja;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjY;ubhŒ elements to allocate space for.”…”�”}”(hjY;h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jU;h´MKhjV;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj:;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jU;h´MKhjA:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj%:ubjM)�”}”(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&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MMhj%:ubjM)�”}”(hŒæNewly allocated pointer to **TYPE** with **COUNT**-many trailing **FAM** elements, or NULL on failure or if **COUNT** cannot be represented by the member of **TYPE** that counts the **FAM** elements (annotated via __counted_by()).”h]”(hŒNewly allocated pointer to ”…”�”}”(hj£;h²hh³Nh´NubjŽ)�”}”(hŒ**TYPE**”h]”hŒTYPE”…”�”}”(hj«;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj£;ubhŒ with ”…”�”}”(hj£;h²hh³Nh´NubjŽ)�”}”(hŒ **COUNT**”h]”hŒCOUNT”…”�”}”(hj½;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj£;ubhŒ-many trailing ”…”�”}”(hj£;h²hh³Nh´NubjŽ)�”}”(hŒ**FAM**”h]”hŒFAM”…”�”}”(hjÏ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj£;ubhŒ$ elements, or NULL on failure or if ”…”�”}”(hj£;h²hh³Nh´NubjŽ)�”}”(hŒ **COUNT**”h]”hŒCOUNT”…”�”}”(hjá;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj£;ubhŒ( cannot be represented by the member of ”…”�”}”(hj£;h²hh³Nh´NubjŽ)�”}”(hŒ**TYPE**”h]”hŒTYPE”…”�”}”(hjó;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj£;ubhŒ that counts the ”…”�”}”(hj£;h²hh³Nh´NubjŽ)�”}”(hŒ**FAM**”h]”hŒFAM”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj£;ubhŒ) elements (annotated via __counted_by()).”…”�”}”(hj£;h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MMhj%:ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjLh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmalloc_obj (C macro)”Œ c.kmalloc_obj”hNt”auh1hÜhjLh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ kmalloc_obj”h]”hù)�”}”(hŒ kmalloc_obj”h]”hÿ)�”}”(hŒ kmalloc_obj”h]”j)�”}”(hj8<h]”hŒ kmalloc_obj”…”�”}”(hjB<h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj><ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj:<h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M]ubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj6<h²hh³jU<h´M]ubah}”(h]”j1<ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jU<h´M]hj3<h²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hj3<h²hh³jU<h´M]ubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGjn<jHjn<jI‰jJ‰jK‰uh1híh²hhjLh³Nh´NubjM)�”}”(hŒ"``kmalloc_obj (VAR_OR_TYPE, ...)``”h]”jS)�”}”(hjt<h]”hŒkmalloc_obj (VAR_OR_TYPE, ...)”…”�”}”(hjv<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjr<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M_hjLh²hubji)�”}”(hŒ-Allocate a single instance of the given type ”h]”jM)�”}”(hŒ,Allocate a single instance of the given type”h]”hŒ,Allocate a single instance of the given type”…”�”}”(hjŽ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M]hjŠ<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jœ<h´M]hjLh²hubj„)�”}”(hŒë**Parameters** ``VAR_OR_TYPE`` Variable or type to allocate. ``...`` optional GFP flags for the allocation (GFP_KERNEL when not specified). **Return** newly allocated pointer to a **VAR_OR_TYPE** on success, or NULL on failure.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj©<h]”hŒ Parameters”…”�”}”(hj«<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj§<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mahj£<ubj¤)�”}”(hhh]”(j©)�”}”(hŒ.``VAR_OR_TYPE`` Variable or type to allocate. ”h]”(j¯)�”}”(hŒ``VAR_OR_TYPE``”h]”jS)�”}”(hjÈ<h]”hŒ VAR_OR_TYPE”…”�”}”(hjÊ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÆ<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M^hjÂ<ubjÉ)�”}”(hhh]”jM)�”}”(hŒVariable or type to allocate.”h]”hŒVariable or type to allocate.”…”�”}”(hjá<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÝ<h´M^hjÞ<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÂ<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÝ<h´M^hj¿<ubj©)�”}”(hŒO``...`` optional GFP flags for the allocation (GFP_KERNEL when not specified). ”h]”(j¯)�”}”(hŒ``...``”h]”jS)�”}”(hj=h]”hŒ...”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÿ<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M_hjû<ubjÉ)�”}”(hhh]”jM)�”}”(hŒFoptional GFP flags for the allocation (GFP_KERNEL when not specified).”h]”hŒFoptional GFP flags for the allocation (GFP_KERNEL when not specified).”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j=h´M_hj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjû<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j=h´M_hj¿<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj£<ubjM)�”}”(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&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mahj£<ubjM)�”}”(hŒLnewly allocated pointer to a **VAR_OR_TYPE** on success, or NULL on failure.”h]”(hŒnewly allocated pointer to a ”…”�”}”(hjR=h²hh³Nh´NubjŽ)�”}”(hŒ**VAR_OR_TYPE**”h]”hŒ VAR_OR_TYPE”…”�”}”(hjZ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjR=ubhŒ on success, or NULL on failure.”…”�”}”(hjR=h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mahj£<ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjLh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmalloc_objs (C macro)”Œc.kmalloc_objs”hNt”auh1hÜhjLh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ kmalloc_objs”h]”hù)�”}”(hŒ kmalloc_objs”h]”hÿ)�”}”(hŒ kmalloc_objs”h]”j)�”}”(hj�=h]”hŒ kmalloc_objs”…”�”}”(hj—=h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj“=ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj�=h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mhubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj‹=h²hh³jª=h´Mhubah}”(h]”j†=ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jª=h´Mhhjˆ=h²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hjˆ=h²hh³jª=h´Mhubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGjÃ=jHjÃ=jI‰jJ‰jK‰uh1híh²hhjLh³Nh´NubjM)�”}”(hŒ*``kmalloc_objs (VAR_OR_TYPE, COUNT, ...)``”h]”jS)�”}”(hjÉ=h]”hŒ&kmalloc_objs (VAR_OR_TYPE, COUNT, ...)”…”�”}”(hjË=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÇ=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MjhjLh²hubji)�”}”(hŒ$Allocate an array of the given type ”h]”jM)�”}”(hŒ#Allocate an array of the given type”h]”hŒ#Allocate an array of the given type”…”�”}”(hjã=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mhhjß=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jñ=h´MhhjLh²hubj„)�”}”(hX+**Parameters** ``VAR_OR_TYPE`` Variable or type to allocate an array of. ``COUNT`` How many elements in the array. ``...`` optional GFP flags for the allocation (GFP_KERNEL when not specified). **Return** newly allocated pointer to array of **VAR_OR_TYPE** on success, or NULL on failure.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjþ=h]”hŒ Parameters”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjü=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mlhjø=ubj¤)�”}”(hhh]”(j©)�”}”(hŒ:``VAR_OR_TYPE`` Variable or type to allocate an array of. ”h]”(j¯)�”}”(hŒ``VAR_OR_TYPE``”h]”jS)�”}”(hj>h]”hŒ VAR_OR_TYPE”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mihj>ubjÉ)�”}”(hhh]”jM)�”}”(hŒ)Variable or type to allocate an array of.”h]”hŒ)Variable or type to allocate an array of.”…”�”}”(hj6>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j2>h´Mihj3>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j2>h´Mihj>ubj©)�”}”(hŒ*``COUNT`` How many elements in the array. ”h]”(j¯)�”}”(hŒ ``COUNT``”h]”jS)�”}”(hjV>h]”hŒCOUNT”…”�”}”(hjX>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjT>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MjhjP>ubjÉ)�”}”(hhh]”jM)�”}”(hŒHow many elements in the array.”h]”hŒHow many elements in the array.”…”�”}”(hjo>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jk>h´Mjhjl>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjP>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jk>h´Mjhj>ubj©)�”}”(hŒO``...`` optional GFP flags for the allocation (GFP_KERNEL when not specified). ”h]”(j¯)�”}”(hŒ``...``”h]”jS)�”}”(hj�>h]”hŒ...”…”�”}”(hj‘>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mkhj‰>ubjÉ)�”}”(hhh]”jM)�”}”(hŒFoptional GFP flags for the allocation (GFP_KERNEL when not specified).”h]”hŒFoptional GFP flags for the allocation (GFP_KERNEL when not specified).”…”�”}”(hj¨>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¤>h´Mkhj¥>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‰>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¤>h´Mkhj>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjø=ubjM)�”}”(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&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mmhjø=ubjM)�”}”(hŒSnewly allocated pointer to array of **VAR_OR_TYPE** on success, or NULL on failure.”h]”(hŒ$newly allocated pointer to array of ”…”�”}”(hjà>h²hh³Nh´NubjŽ)�”}”(hŒ**VAR_OR_TYPE**”h]”hŒ VAR_OR_TYPE”…”�”}”(hjè>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjà>ubhŒ on success, or NULL on failure.”…”�”}”(hjà>h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mmhjø=ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjLh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmalloc_flex (C macro)”Œc.kmalloc_flex”hNt”auh1hÜhjLh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ kmalloc_flex”h]”hù)�”}”(hŒ kmalloc_flex”h]”hÿ)�”}”(hŒ kmalloc_flex”h]”j)�”}”(hj?h]”hŒ kmalloc_flex”…”�”}”(hj%?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj!?ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj?h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mtubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj?h²hh³j8?h´Mtubah}”(h]”j?ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j8?h´Mthj?h²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hj?h²hh³j8?h´Mtubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGjQ?jHjQ?jI‰jJ‰jK‰uh1híh²hhjLh³Nh´NubjM)�”}”(hŒ/``kmalloc_flex (VAR_OR_TYPE, FAM, COUNT, ...)``”h]”jS)�”}”(hjW?h]”hŒ+kmalloc_flex (VAR_OR_TYPE, FAM, COUNT, ...)”…”�”}”(hjY?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjU?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MvhjLh²hubji)�”}”(hŒ;Allocate a single instance of the given flexible structure ”h]”jM)�”}”(hŒ:Allocate a single instance of the given flexible structure”h]”hŒ:Allocate a single instance of the given flexible structure”…”�”}”(hjq?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mthjm?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j?h´MthjLh²hubj„)�”}”(hX3**Parameters** ``VAR_OR_TYPE`` Variable or type to allocate (with its flex array). ``FAM`` The name of the flexible array member of the structure. ``COUNT`` How many flexible array member elements are desired. ``...`` optional GFP flags for the allocation (GFP_KERNEL when not specified). **Return** newly allocated pointer to **VAR_OR_TYPE** on success, NULL on failure. If **FAM** has been annotated with __counted_by(), the allocation will immediately fail if **COUNT** is larger than what the type of the struct's counter variable can represent.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjŒ?h]”hŒ Parameters”…”�”}”(hjŽ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŠ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mxhj†?ubj¤)�”}”(hhh]”(j©)�”}”(hŒD``VAR_OR_TYPE`` Variable or type to allocate (with its flex array). ”h]”(j¯)�”}”(hŒ``VAR_OR_TYPE``”h]”jS)�”}”(hj«?h]”hŒ VAR_OR_TYPE”…”�”}”(hj­?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj©?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Muhj¥?ubjÉ)�”}”(hhh]”jM)�”}”(hŒ3Variable or type to allocate (with its flex array).”h]”hŒ3Variable or type to allocate (with its flex array).”…”�”}”(hjÄ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÀ?h´MuhjÁ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¥?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÀ?h´Muhj¢?ubj©)�”}”(hŒ@``FAM`` The name of the flexible array member of the structure. ”h]”(j¯)�”}”(hŒ``FAM``”h]”jS)�”}”(hjä?h]”hŒFAM”…”�”}”(hjæ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjâ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MvhjÞ?ubjÉ)�”}”(hhh]”jM)�”}”(hŒ7The name of the flexible array member of the structure.”h]”hŒ7The name of the flexible array member of the structure.”…”�”}”(hjý?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jù?h´Mvhjú?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÞ?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jù?h´Mvhj¢?ubj©)�”}”(hŒ?``COUNT`` How many flexible array member elements are desired. ”h]”(j¯)�”}”(hŒ ``COUNT``”h]”jS)�”}”(hj@h]”hŒCOUNT”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mwhj@ubjÉ)�”}”(hhh]”jM)�”}”(hŒ4How many flexible array member elements are desired.”h]”hŒ4How many flexible array member elements are desired.”…”�”}”(hj6@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j2@h´Mwhj3@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j2@h´Mwhj¢?ubj©)�”}”(hŒO``...`` optional GFP flags for the allocation (GFP_KERNEL when not specified). ”h]”(j¯)�”}”(hŒ``...``”h]”jS)�”}”(hjV@h]”hŒ...”…”�”}”(hjX@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjT@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MxhjP@ubjÉ)�”}”(hhh]”jM)�”}”(hŒFoptional GFP flags for the allocation (GFP_KERNEL when not specified).”h]”hŒFoptional GFP flags for the allocation (GFP_KERNEL when not specified).”…”�”}”(hjo@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jk@h´Mxhjl@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjP@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jk@h´Mxhj¢?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj†?ubjM)�”}”(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&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mzhj†?ubjM)�”}”(hŒùnewly allocated pointer to **VAR_OR_TYPE** on success, NULL on failure. If **FAM** has been annotated with __counted_by(), the allocation will immediately fail if **COUNT** is larger than what the type of the struct's counter variable can represent.”h]”(hŒnewly allocated pointer to ”…”�”}”(hj§@h²hh³Nh´NubjŽ)�”}”(hŒ**VAR_OR_TYPE**”h]”hŒ VAR_OR_TYPE”…”�”}”(hj¯@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj§@ubhŒ! on success, NULL on failure. If ”…”�”}”(hj§@h²hh³Nh´NubjŽ)�”}”(hŒ**FAM**”h]”hŒFAM”…”�”}”(hjÁ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj§@ubhŒQ has been annotated with __counted_by(), the allocation will immediately fail if ”…”�”}”(hj§@h²hh³Nh´NubjŽ)�”}”(hŒ **COUNT**”h]”hŒCOUNT”…”�”}”(hjÓ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj§@ubhŒO is larger than what the type of the struct’s counter variable can represent.”…”�”}”(hj§@h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´Mzhj†?ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjLh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmalloc_array (C function)”Œc.kmalloc_array”hNt”auh1hÜhjLh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ9void * kmalloc_array (size_t n, size_t size, gfp_t flags)”h]”hù)�”}”(hŒ7void *kmalloc_array(size_t n, size_t size, gfp_t flags)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj Ah²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjAh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MÀubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjAh²hh³jAh´MÀubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj)Ah²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjAh²hh³jAh´MÀubhÿ)�”}”(hŒ kmalloc_array”h]”j)�”}”(hŒ kmalloc_array”h]”hŒ kmalloc_array”…”�”}”(hj:Ah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj6Aubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjAh²hh³jAh´MÀubj )�”}”(hŒ$(size_t n, size_t size, gfp_t flags)”h]”(j )�”}”(hŒsize_t n”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjYAh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjVAubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j[AŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljhj¢JubjM)�”}”(hŒàGFP_NOWAIT and GFP_ATOMIC are supported, the __GFP_NORETRY modifier is not. __GFP_RETRY_MAYFAIL is supported, and it should be used only if kmalloc is preferable to the vmalloc fallback, due to visible performance drawbacks.”h]”hŒàGFP_NOWAIT and GFP_ATOMIC are supported, the __GFP_NORETRY modifier is not. __GFP_RETRY_MAYFAIL is supported, and it should be used only if kmalloc is preferable to the vmalloc fallback, due to visible performance drawbacks.”…”�”}”(hj¨Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MAhj¢JubjM)�”}”(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&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MEhj¢JubjM)�”}”(hŒ>pointer to the allocated memory of ``NULL`` in case of failure”h]”(hŒ#pointer to the allocated memory of ”…”�”}”(hjÏKh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj×Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÏKubhŒ in case of failure”…”�”}”(hjÏKh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MFhj¢Jubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjLh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!kvrealloc_node_align (C function)”Œc.kvrealloc_node_align”hNt”auh1hÜhjLh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒcvoid * kvrealloc_node_align (const void *p, size_t size, unsigned long align, gfp_t flags, int nid)”h]”hù)�”}”(hŒavoid *kvrealloc_node_align(const void *p, size_t size, unsigned long align, gfp_t flags, int nid)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj Lh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MmubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj Lh²hh³jLh´MmubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj-Lh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj Lh²hh³jLh´Mmubhÿ)�”}”(hŒkvrealloc_node_align”h]”j)�”}”(hŒkvrealloc_node_align”h]”hŒkvrealloc_node_align”…”�”}”(hj>Lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj:Lubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj Lh²hh³jLh´Mmubj )�”}”(hŒG(const void *p, size_t size, unsigned long align, gfp_t flags, int nid)”h]”(j )�”}”(hŒ const void *p”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjZLh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjVLubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgLh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjVLubjµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjuLh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjVLubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒLh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjVLubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj‘Lh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjVLubj)�”}”(hjR h]”hŒp”…”�”}”(hjžLh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjVLubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjRLubj )�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj¹Lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¶Lubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j»LŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj@LsbŒc.kvrealloc_node_align”†”asbuh1hhj²LubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙLh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj²Lubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjçLh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj²Lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjRLubj )�”}”(hŒunsigned long align”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjüLubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjüLubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjüLubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*Mh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjüLubj)�”}”(hŒalign”h]”hŒalign”…”�”}”(hj8Mh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjüLubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjRLubj )�”}”(hŒ gfp_t flags”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjTMh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjQMubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jVMŒmodname”NŒ classname”Njpjs)�”}”jv]”jÕLŒc.kvrealloc_node_align”†”asbuh1hhjMMubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrMh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjMMubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj€Mh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjMMubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjRLubj )�”}”(hŒint nid”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj™Mh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj•MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§Mh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj•Mubj)�”}”(hŒnid”h]”hŒnid”…”�”}”(hjµMh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj•Mubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjRLubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj Lh²hh³jLh´Mmubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjLh²hh³jLh´Mmubah}”(h]”jLah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jLh´MmhjLh²hubj4)�”}”(hhh]”jM)�”}”(hŒ,reallocate memory; contents remain unchanged”h]”hŒ,reallocate memory; contents remain unchanged”…”�”}”(hjßMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MmhjÜMh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjLh²hh³jLh´Mmubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj÷MjHj÷MjI‰jJ‰jK‰uh1híh²hhjLh³Nh´Nubj„)�”}”(hX\**Parameters** ``const void *p`` object to reallocate memory for ``size_t size`` the size to reallocate ``unsigned long align`` desired alignment ``gfp_t flags`` the flags for the page level allocator ``int nid`` NUMA node id **Description** If **p** is ``NULL``, kvrealloc() behaves exactly like kvmalloc(). If **size** is 0 and **p** is not a ``NULL`` pointer, the object pointed to is freed. Only alignments up to those guaranteed by kmalloc() will be honored. Please see Documentation/core-api/memory-allocation.rst for more details. If __GFP_ZERO logic is requested, callers must ensure that, starting with the initial memory allocation, every subsequent call to this API for the same memory allocation is flagged with __GFP_ZERO. Otherwise, it is possible that __GFP_ZERO is not fully honored by this API. In any case, the contents of the object pointed to are preserved up to the lesser of the new and old sizes. This function must not be called concurrently with itself or kvfree() for the same memory allocation. **Return** pointer to the allocated memory or ``NULL`` in case of error”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjNh]”hŒ Parameters”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÿMubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MqhjûMubj¤)�”}”(hhh]”(j©)�”}”(hŒ2``const void *p`` object to reallocate memory for ”h]”(j¯)�”}”(hŒ``const void *p``”h]”jS)�”}”(hj Nh]”hŒ const void *p”…”�”}”(hj"Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MnhjNubjÉ)�”}”(hhh]”jM)�”}”(hŒobject to reallocate memory for”h]”hŒobject to reallocate memory for”…”�”}”(hj9Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j5Nh´Mnhj6Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjNubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j5Nh´MnhjNubj©)�”}”(hŒ'``size_t size`` the size to reallocate ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hjYNh]”hŒ size_t size”…”�”}”(hj[Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjWNubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MohjSNubjÉ)�”}”(hhh]”jM)�”}”(hŒthe size to reallocate”h]”hŒthe size to reallocate”…”�”}”(hjrNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jnNh´MohjoNubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjSNubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jnNh´MohjNubj©)�”}”(hŒ*``unsigned long align`` desired alignment ”h]”(j¯)�”}”(hŒ``unsigned long align``”h]”jS)�”}”(hj’Nh]”hŒunsigned long align”…”�”}”(hj”Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MphjŒNubjÉ)�”}”(hhh]”jM)�”}”(hŒdesired alignment”h]”hŒdesired alignment”…”�”}”(hj«Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j§Nh´Mphj¨Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjŒNubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j§Nh´MphjNubj©)�”}”(hŒ7``gfp_t flags`` the flags for the page level allocator ”h]”(j¯)�”}”(hŒ``gfp_t flags``”h]”jS)�”}”(hjËNh]”hŒ gfp_t flags”…”�”}”(hjÍNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÉNubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MqhjÅNubjÉ)�”}”(hhh]”jM)�”}”(hŒ&the flags for the page level allocator”h]”hŒ&the flags for the page level allocator”…”�”}”(hjäNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jàNh´MqhjáNubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÅNubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jàNh´MqhjNubj©)�”}”(hŒ``int nid`` NUMA node id ”h]”(j¯)�”}”(hŒ ``int nid``”h]”jS)�”}”(hjOh]”hŒint nid”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjOubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MrhjþNubjÉ)�”}”(hhh]”jM)�”}”(hŒ NUMA node id”h]”hŒ NUMA node id”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jOh´MrhjOubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjþNubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jOh´MrhjNubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjûMubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj?Oh]”hŒ Description”…”�”}”(hjAOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj=Oubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MthjûMubjM)�”}”(hŒ˜If **p** is ``NULL``, kvrealloc() behaves exactly like kvmalloc(). If **size** is 0 and **p** is not a ``NULL`` pointer, the object pointed to is freed.”h]”(hŒIf ”…”�”}”(hjUOh²hh³Nh´NubjŽ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj]Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjUOubhŒ is ”…”�”}”(hjUOh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjoOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjUOubhŒ2, kvrealloc() behaves exactly like kvmalloc(). If ”…”�”}”(hjUOh²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj�Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjUOubhŒ is 0 and ”…”�”}”(hjUOh²hh³Nh´NubjŽ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj“Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjUOubhŒ is not a ”…”�”}”(hjUOh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj¥Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjUOubhŒ) pointer, the object pointed to is freed.”…”�”}”(hjUOh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MshjûMubjM)�”}”(hŒŽOnly alignments up to those guaranteed by kmalloc() will be honored. Please see Documentation/core-api/memory-allocation.rst for more details.”h]”hŒŽOnly alignments up to those guaranteed by kmalloc() will be honored. Please see Documentation/core-api/memory-allocation.rst for more details.”…”�”}”(hj¾Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MvhjûMubjM)�”}”(hXIf __GFP_ZERO logic is requested, callers must ensure that, starting with the initial memory allocation, every subsequent call to this API for the same memory allocation is flagged with __GFP_ZERO. Otherwise, it is possible that __GFP_ZERO is not fully honored by this API.”h]”hXIf __GFP_ZERO logic is requested, callers must ensure that, starting with the initial memory allocation, every subsequent call to this API for the same memory allocation is flagged with __GFP_ZERO. Otherwise, it is possible that __GFP_ZERO is not fully honored by this API.”…”�”}”(hjÍOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´MyhjûMubjM)�”}”(hŒkIn any case, the contents of the object pointed to are preserved up to the lesser of the new and old sizes.”h]”hŒkIn any case, the contents of the object pointed to are preserved up to the lesser of the new and old sizes.”…”�”}”(hjÜOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M~hjûMubjM)�”}”(hŒeThis function must not be called concurrently with itself or kvfree() for the same memory allocation.”h]”hŒeThis function must not be called concurrently with itself or kvfree() for the same memory allocation.”…”�”}”(hjëOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M�hjûMubjM)�”}”(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&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:37: ./include/linux/slab.h”h´M„hjûMubjM)�”}”(hŒFree an object which was previously allocated from this cache.”h]”hŒ>Free an object which was previously allocated from this cache.”…”�”}”(hjqVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´MÔhjÂUubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjLh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒksize (C function)”Œc.ksize”hNt”auh1hÜhjLh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒsize_t ksize (const void *objp)”h]”hù)�”}”(hŒsize_t ksize(const void *objp)”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj£Vh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Vubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¥VŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒksize”sbŒc.ksize”†”asbuh1hhjœVh²hh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M'ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅVh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjœVh²hh³jÄVh´M'ubhÿ)�”}”(hŒksize”h]”j)�”}”(hjÁVh]”hŒksize”…”�”}”(hj×Vh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÓVubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjœVh²hh³jÄVh´M'ubj )�”}”(hŒ(const void *objp)”h]”j )�”}”(hŒconst void *objp”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjòVh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjîVubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿVh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjîVubjµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj Wh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjîVubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjîVubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj)Wh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjîVubj)�”}”(hŒobjp”h]”hŒobjp”…”�”}”(hj6Wh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjîVubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjêVubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjœVh²hh³jÄVh´M'ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj˜Vh²hh³jÄVh´M'ubah}”(h]”j“Vah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÄVh´M'hj•Vh²hubj4)�”}”(hhh]”hŒ bullet_list”“”)�”}”(hhh]”jÕ/)�”}”(hŒ)Report full size of underlying allocation”h]”jM)�”}”(hjgWh]”hŒ)Report full size of underlying allocation”…”�”}”(hjiWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M'hjeWubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjbWh²hh³jvWh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j`Wh³jvWh´M'hj]Wh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj•Vh²hh³jÄVh´M'ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjŽWjHjŽWjI‰jJ‰jK‰uh1híh²hhjLh³Nh´Nubj„)�”}”(hXÍ**Parameters** ``const void *objp`` pointer to the object **Description** This should only be used internally to query the true size of allocations. It is not meant to be a way to discover the usable size of an allocation after the fact. Instead, use kmalloc_size_roundup(). Using memory beyond the originally requested allocation size may trigger KASAN, UBSAN_BOUNDS, and/or FORTIFY_SOURCE. **Return** size of the actual memory used by **objp** in bytes”h]”(jM)�”}”(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&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M+hj’Wubj¤)�”}”(hhh]”j©)�”}”(hŒ+``const void *objp`` pointer to the object ”h]”(j¯)�”}”(hŒ``const void *objp``”h]”jS)�”}”(hj·Wh]”hŒconst void *objp”…”�”}”(hj¹Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjµWubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M(hj±WubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to the object”h]”hŒpointer to the object”…”�”}”(hjÐWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÌWh´M(hjÍWubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj±Wubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÌWh´M(hj®Wubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj’WubjM)�”}”(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&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M*hj’WubjM)�”}”(hX=This should only be used internally to query the true size of allocations. It is not meant to be a way to discover the usable size of an allocation after the fact. Instead, use kmalloc_size_roundup(). Using memory beyond the originally requested allocation size may trigger KASAN, UBSAN_BOUNDS, and/or FORTIFY_SOURCE.”h]”hX=This should only be used internally to query the true size of allocations. It is not meant to be a way to discover the usable size of an allocation after the fact. Instead, use kmalloc_size_roundup(). Using memory beyond the originally requested allocation size may trigger KASAN, UBSAN_BOUNDS, and/or FORTIFY_SOURCE.”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M)hj’WubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjXh]”hŒReturn”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjXubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M/hj’WubjM)�”}”(hŒ3size of the actual memory used by **objp** in bytes”h]”(hŒ"size of the actual memory used by ”…”�”}”(hj/Xh²hh³Nh´NubjŽ)�”}”(hŒ**objp**”h]”hŒobjp”…”�”}”(hj7Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj/XubhŒ in bytes”…”�”}”(hj/Xh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M0hj’Wubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjLh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkfree (C function)”Œc.kfree”hNt”auh1hÜhjLh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒvoid kfree (const void *object)”h]”hù)�”}”(hŒvoid kfree(const void *object)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjpXh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjlXh²hh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´MxubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjlXh²hh³j~Xh´Mxubhÿ)�”}”(hŒkfree”h]”j)�”}”(hŒkfree”h]”hŒkfree”…”�”}”(hj‘Xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�Xubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjlXh²hh³j~Xh´Mxubj )�”}”(hŒ(const void *object)”h]”j )�”}”(hŒconst void *object”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj­Xh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj©XubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºXh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj©Xubjµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÈXh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj©XubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖXh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj©XubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjäXh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj©Xubj)�”}”(hŒobject”h]”hŒobject”…”�”}”(hjñXh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj©Xubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¥Xubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjlXh²hh³j~Xh´Mxubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjhXh²hh³j~Xh´Mxubah}”(h]”jcXah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j~Xh´MxhjeXh²hubj4)�”}”(hhh]”jM)�”}”(hŒ free previously allocated memory”h]”hŒ free previously allocated memory”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´MxhjYh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjeXh²hh³j~Xh´Mxubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj3YjHj3YjI‰jJ‰jK‰uh1híh²hhjLh³Nh´Nubj„)�”}”(hŒ³**Parameters** ``const void *object`` pointer returned by kmalloc(), kmalloc_nolock(), or kmem_cache_alloc() **Description** If **object** is NULL, no operation is performed.”h]”(jM)�”}”(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&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M|hj7Yubj¤)�”}”(hhh]”j©)�”}”(hŒ^``const void *object`` pointer returned by kmalloc(), kmalloc_nolock(), or kmem_cache_alloc() ”h]”(j¯)�”}”(hŒ``const void *object``”h]”jS)�”}”(hj\Yh]”hŒconst void *object”…”�”}”(hj^Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjZYubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´MyhjVYubjÉ)�”}”(hhh]”jM)�”}”(hŒFpointer returned by kmalloc(), kmalloc_nolock(), or kmem_cache_alloc()”h]”hŒFpointer returned by kmalloc(), kmalloc_nolock(), or kmem_cache_alloc()”…”�”}”(hjuYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jqYh´MyhjrYubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjVYubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jqYh´MyhjSYubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj7YubjM)�”}”(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&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M{hj7YubjM)�”}”(hŒ1If **object** is NULL, no operation is performed.”h]”(hŒIf ”…”�”}”(hj­Yh²hh³Nh´NubjŽ)�”}”(hŒ **object**”h]”hŒobject”…”�”}”(hjµYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj­YubhŒ$ is NULL, no operation is performed.”…”�”}”(hj­Yh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´Mzhj7Yubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjLh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkvfree (C function)”Œc.kvfree”hNt”auh1hÜhjLh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒvoid kvfree (const void *addr)”h]”hù)�”}”(hŒvoid kvfree(const void *addr)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjîYh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjêYh²hh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´MŠubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýYh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjêYh²hh³jüYh´MŠubhÿ)�”}”(hŒkvfree”h]”j)�”}”(hŒkvfree”h]”hŒkvfree”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Zubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjêYh²hh³jüYh´MŠubj )�”}”(hŒ(const void *addr)”h]”j )�”}”(hŒconst void *addr”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj+Zh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj'ZubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8Zh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj'Zubjµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjFZh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj'ZubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTZh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj'ZubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjbZh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj'Zubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjoZh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj'Zubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj#Zubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjêYh²hh³jüYh´MŠubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjæYh²hh³jüYh´MŠubah}”(h]”jáYah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jüYh´MŠhjãYh²hubj4)�”}”(hhh]”jM)�”}”(hŒ Free memory.”h]”hŒ Free memory.”…”�”}”(hj™Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´MŠhj–Zh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjãYh²hh³jüYh´MŠubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj±ZjHj±ZjI‰jJ‰jK‰uh1híh²hhjLh³Nh´Nubj„)�”}”(hXP**Parameters** ``const void *addr`` Pointer to allocated memory. **Description** kvfree frees memory allocated by any of vmalloc(), kmalloc() or kvmalloc(). It is slightly more efficient to use kfree() or vfree() if you are certain that you know which one to use. **Context** Either preemptible task context or not-NMI interrupt.”h]”(jM)�”}”(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&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´MŽhjµZubj¤)�”}”(hhh]”j©)�”}”(hŒ2``const void *addr`` Pointer to allocated memory. ”h]”(j¯)�”}”(hŒ``const void *addr``”h]”jS)�”}”(hjÚZh]”hŒconst void *addr”…”�”}”(hjÜZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjØZubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M‹hjÔZubjÉ)�”}”(hhh]”jM)�”}”(hŒPointer to allocated memory.”h]”hŒPointer to allocated memory.”…”�”}”(hjóZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jïZh´M‹hjðZubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÔZubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jïZh´M‹hjÑZubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjµZubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj[h]”hŒ Description”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M�hjµZubjM)�”}”(hŒ¶kvfree frees memory allocated by any of vmalloc(), kmalloc() or kvmalloc(). It is slightly more efficient to use kfree() or vfree() if you are certain that you know which one to use.”h]”hŒ¶kvfree frees memory allocated by any of vmalloc(), kmalloc() or kvmalloc(). It is slightly more efficient to use kfree() or vfree() if you are certain that you know which one to use.”…”�”}”(hj+[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´MŒhjµZubjM)�”}”(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&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M�hjµZubjM)�”}”(hŒ5Either preemptible task context or not-NMI interrupt.”h]”hŒ5Either preemptible task context or not-NMI interrupt.”…”�”}”(hjR[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M‘hjµZubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjLh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkvfree_atomic (C function)”Œc.kvfree_atomic”hNt”auh1hÜhjLh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ%void kvfree_atomic (const void *addr)”h]”hù)�”}”(hŒ$void kvfree_atomic(const void *addr)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj�[h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj}[h²hh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�[h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj}[h²hh³j�[h´M�ubhÿ)�”}”(hŒ kvfree_atomic”h]”j)�”}”(hŒ kvfree_atomic”h]”hŒ kvfree_atomic”…”�”}”(hj¢[h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjž[ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj}[h²hh³j�[h´M�ubj )�”}”(hŒ(const void *addr)”h]”j )�”}”(hŒconst void *addr”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj¾[h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjº[ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjË[h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjº[ubjµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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º[ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjõ[h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjº[ubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjº[ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¶[ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj}[h²hh³j�[h´M�ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjy[h²hh³j�[h´M�ubah}”(h]”jt[ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j�[h´M�hjv[h²hubj4)�”}”(hhh]”jM)�”}”(hŒ Free memory.”h]”hŒ Free memory.”…”�”}”(hj,\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M�hj)\h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjv[h²hh³j�[h´M�ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjD\jHjD\jI‰jJ‰jK‰uh1híh²hhjLh³Nh´Nubj„)�”}”(hŒ¿**Parameters** ``const void *addr`` Pointer to allocated memory. **Description** Same as kvfree(), but uses vfree_atomic() for vmalloc backed memory. Must not be called from NMI context.”h]”(jM)�”}”(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&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M¡hjH\ubj¤)�”}”(hhh]”j©)�”}”(hŒ2``const void *addr`` Pointer to allocated memory. ”h]”(j¯)�”}”(hŒ``const void *addr``”h]”jS)�”}”(hjm\h]”hŒconst void *addr”…”�”}”(hjo\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjk\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´Mžhjg\ubjÉ)�”}”(hhh]”jM)�”}”(hŒPointer to allocated memory.”h]”hŒPointer to allocated memory.”…”�”}”(hj†\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‚\h´Mžhjƒ\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjg\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‚\h´Mžhjd\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjH\ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj¨\h]”hŒ Description”…”�”}”(hjª\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¦\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M hjH\ubjM)�”}”(hŒiSame as kvfree(), but uses vfree_atomic() for vmalloc backed memory. Must not be called from NMI context.”h]”hŒiSame as kvfree(), but uses vfree_atomic() for vmalloc backed memory. Must not be called from NMI context.”…”�”}”(hj¾\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´MŸhjH\ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjLh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkvfree_sensitive (C function)”Œc.kvfree_sensitive”hNt”auh1hÜhjLh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ4void kvfree_sensitive (const void *addr, size_t len)”h]”hù)�”}”(hŒ3void kvfree_sensitive(const void *addr, size_t len)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjí\h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjé\h²hh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M­ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjü\h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjé\h²hh³jû\h´M­ubhÿ)�”}”(hŒkvfree_sensitive”h]”j)�”}”(hŒkvfree_sensitive”h]”hŒkvfree_sensitive”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ]ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjé\h²hh³jû\h´M­ubj )�”}”(hŒ(const void *addr, size_t len)”h]”(j )�”}”(hŒconst void *addr”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj*]h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj&]ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7]h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj&]ubjµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjE]h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj&]ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjS]h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj&]ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hja]h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj&]ubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjn]h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj&]ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj"]ubj )�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjŠ]h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‡]ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jŒ]Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj]sbŒc.kvfree_sensitive”†”asbuh1hhjƒ]ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª]h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjƒ]ubj)�”}”(hŒlen”h]”hŒlen”…”�”}”(hj¸]h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjƒ]ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj"]ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjé\h²hh³jû\h´M­ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjå\h²hh³jû\h´M­ubah}”(h]”jà\ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jû\h´M­hjâ\h²hubj4)�”}”(hhh]”jM)�”}”(hŒ4Free a data object containing sensitive information.”h]”hŒ4Free a data object containing sensitive information.”…”�”}”(hjâ]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M­hjß]h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjâ\h²hh³jû\h´M­ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjú]jHjú]jI‰jJ‰jK‰uh1híh²hhjLh³Nh´Nubj„)�”}”(hXE**Parameters** ``const void *addr`` address of the data object to be freed. ``size_t len`` length of the data object. **Description** Use the special memzero_explicit() function to clear the content of a kvmalloc'ed object containing sensitive data to make sure that the compiler won't optimize out the data clearing.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj^h]”hŒ Parameters”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M±hjþ]ubj¤)�”}”(hhh]”(j©)�”}”(hŒ=``const void *addr`` address of the data object to be freed. ”h]”(j¯)�”}”(hŒ``const void *addr``”h]”jS)�”}”(hj#^h]”hŒconst void *addr”…”�”}”(hj%^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj!^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M®hj^ubjÉ)�”}”(hhh]”jM)�”}”(hŒ'address of the data object to be freed.”h]”hŒ'address of the data object to be freed.”…”�”}”(hj<^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j8^h´M®hj9^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j8^h´M®hj^ubj©)�”}”(hŒ*``size_t len`` length of the data object. ”h]”(j¯)�”}”(hŒ``size_t len``”h]”jS)�”}”(hj\^h]”hŒ size_t len”…”�”}”(hj^^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjZ^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M¯hjV^ubjÉ)�”}”(hhh]”jM)�”}”(hŒlength of the data object.”h]”hŒlength of the data object.”…”�”}”(hju^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jq^h´M¯hjr^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjV^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jq^h´M¯hj^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjþ]ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj—^h]”hŒ Description”…”�”}”(hj™^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj•^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M±hjþ]ubjM)�”}”(hŒ·Use the special memzero_explicit() function to clear the content of a kvmalloc'ed object containing sensitive data to make sure that the compiler won't optimize out the data clearing.”h]”hŒ»Use the special memzero_explicit() function to clear the content of a kvmalloc’ed object containing sensitive data to make sure that the compiler won’t optimize out the data clearing.”…”�”}”(hj­^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M°hjþ]ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjLh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"kmem_cache_alloc_bulk (C function)”Œc.kmem_cache_alloc_bulk”hNt”auh1hÜhjLh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒUbool kmem_cache_alloc_bulk (struct kmem_cache *s, gfp_t flags, size_t size, void **p)”h]”hù)�”}”(hŒTbool kmem_cache_alloc_bulk(struct kmem_cache *s, gfp_t flags, size_t size, void **p)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjÜ^h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjØ^h²hh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M,ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjê^h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjØ^h²hh³jé^h´M,ubhÿ)�”}”(hŒkmem_cache_alloc_bulk”h]”j)�”}”(hŒkmem_cache_alloc_bulk”h]”hŒkmem_cache_alloc_bulk”…”�”}”(hjü^h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjø^ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjØ^h²hh³jé^h´M,ubj )�”}”(hŒ:(struct kmem_cache *s, gfp_t flags, size_t size, void **p)”h]”(j )�”}”(hŒstruct kmem_cache *s”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj_ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%_h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj_ubh)�”}”(hhh]”j)�”}”(hŒ kmem_cache”h]”hŒ kmem_cache”…”�”}”(hj6_h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3_ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j8_Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljþ^sbŒc.kmem_cache_alloc_bulk”†”asbuh1hhj_ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjV_h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj_ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjd_h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj_ubj)�”}”(hj…Rh]”hŒs”…”�”}”(hjq_h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj_ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj_ubj )�”}”(hŒ gfp_t flags”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjŒ_h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‰_ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jŽ_Œmodname”NŒ classname”Njpjs)�”}”jv]”jR_Œc.kmem_cache_alloc_bulk”†”asbuh1hhj…_ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª_h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj…_ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj¸_h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj…_ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj_ubj )�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÔ_h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÑ_ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÖ_Œmodname”NŒ classname”Njpjs)�”}”jv]”jR_Œc.kmem_cache_alloc_bulk”†”asbuh1hhjÍ_ubjÇ)�”}”(hŒ ”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 ]”jah"]”h$]”h&]”uh1jhjÍ_ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj_ubj )�”}”(hŒvoid **p”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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`ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj5`h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj`ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjB`h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj`ubj)�”}”(hjR h]”hŒp”…”�”}”(hjO`h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj_ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjØ^h²hh³jé^h´M,ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÔ^h²hh³jé^h´M,ubah}”(h]”jÏ^ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jé^h´M,hjÑ^h²hubj4)�”}”(hhh]”jM)�”}”(hŒAllocate multiple objects”h]”hŒAllocate multiple objects”…”�”}”(hjx`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M,hju`h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÑ^h²hh³jé^h´M,ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj�`jHj�`jI‰jJ‰jK‰uh1híh²hhjLh³Nh´Nubj„)�”}”(hXY**Parameters** ``struct kmem_cache *s`` The cache to allocate from ``gfp_t flags`` GFP_* flags. See kmalloc(). ``size_t size`` Number of objects to allocate ``void **p`` Array of allocated objects **Description** Allocate **size** objects from **s** and places them into **p**. **size** must be larger than 0. Interrupts must be enabled when calling this function. Unlike alloc_pages_bulk(), this function does not check for already allocated objects in **p**, and thus the caller does not need to zero it. **Return** ``true`` if the allocation succeeded, or ``false`` if it failed.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjš`h]”hŒ Parameters”…”�”}”(hjœ`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj˜`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M0hj”`ubj¤)�”}”(hhh]”(j©)�”}”(hŒ4``struct kmem_cache *s`` The cache to allocate from ”h]”(j¯)�”}”(hŒ``struct kmem_cache *s``”h]”jS)�”}”(hj¹`h]”hŒstruct kmem_cache *s”…”�”}”(hj»`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj·`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M-hj³`ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe cache to allocate from”h]”hŒThe cache to allocate from”…”�”}”(hjÒ`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÎ`h´M-hjÏ`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj³`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÎ`h´M-hj°`ubj©)�”}”(hŒ,``gfp_t flags`` GFP_* flags. See kmalloc(). ”h]”(j¯)�”}”(hŒ``gfp_t flags``”h]”jS)�”}”(hjò`h]”hŒ gfp_t flags”…”�”}”(hjô`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjð`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M.hjì`ubjÉ)�”}”(hhh]”jM)�”}”(hŒGFP_* flags. See kmalloc().”h]”hŒGFP_* flags. See kmalloc().”…”�”}”(hj ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jah´M.hjaubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjì`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jah´M.hj°`ubj©)�”}”(hŒ.``size_t size`` Number of objects to allocate ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hj+ah]”hŒ size_t size”…”�”}”(hj-ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj)aubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M/hj%aubjÉ)�”}”(hhh]”jM)�”}”(hŒNumber of objects to allocate”h]”hŒNumber of objects to allocate”…”�”}”(hjDah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j@ah´M/hjAaubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj%aubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j@ah´M/hj°`ubj©)�”}”(hŒ(``void **p`` Array of allocated objects ”h]”(j¯)�”}”(hŒ ``void **p``”h]”jS)�”}”(hjdah]”hŒvoid **p”…”�”}”(hjfah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjbaubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M0hj^aubjÉ)�”}”(hhh]”jM)�”}”(hŒArray of allocated objects”h]”hŒArray of allocated objects”…”�”}”(hj}ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jyah´M0hjzaubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj^aubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jyah´M0hj°`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj”`ubjM)�”}”(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&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M2hj”`ubjM)�”}”(hŒaAllocate **size** objects from **s** and places them into **p**. **size** must be larger than 0.”h]”(hŒ Allocate ”…”�”}”(hjµah²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj½ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjµaubhŒ objects from ”…”�”}”(hjµah²hh³Nh´NubjŽ)�”}”(hŒ**s**”h]”hŒs”…”�”}”(hjÏah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjµaubhŒ and places them into ”…”�”}”(hjµah²hh³Nh´NubjŽ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjáah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjµaubhŒ. ”…”�”}”(hjµah²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjóah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjµaubhŒ must be larger than 0.”…”�”}”(hjµah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M1hj”`ubjM)�”}”(hŒ6Interrupts must be enabled when calling this function.”h]”hŒ6Interrupts must be enabled when calling this function.”…”�”}”(hj bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M4hj”`ubjM)�”}”(hŒ�Unlike alloc_pages_bulk(), this function does not check for already allocated objects in **p**, and thus the caller does not need to zero it.”h]”(hŒYUnlike alloc_pages_bulk(), this function does not check for already allocated objects in ”…”�”}”(hjbh²hh³Nh´NubjŽ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj#bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjbubhŒ/, and thus the caller does not need to zero it.”…”�”}”(hjbh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./mm/slub.c”h´M6hj”`ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj>bh]”hŒReturn”…”�”}”(hj@bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjdh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj;dubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j@dŒmodname”NŒ classname”Njpjs)�”}”jv]”jÞbŒc.__kmem_cache_create_args”†”asbuh1hhj7dubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\dh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj7dubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjjdh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7dubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjcubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjŸbh²hh³j°bh´M$ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj›bh²hh³j°bh´M$ubah}”(h]”j–bah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j°bh´M$hj˜bh²hubj4)�”}”(hhh]”jM)�”}”(hŒCreate a kmem cache.”h]”hŒCreate a kmem cache.”…”�”}”(hj”dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.c”h´M$hj‘dh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj˜bh²hh³j°bh´M$ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¬djHj¬djI‰jJ‰jK‰uh1híh²hhjLh³Nh´Nubj„)�”}”(hX**Parameters** ``const char *name`` A string which is used in /proc/slabinfo to identify this cache. ``unsigned int object_size`` The size of objects to be created in this cache. ``struct kmem_cache_args *args`` Additional arguments for the cache creation (see :c:type:`struct kmem_cache_args `). ``slab_flags_t flags`` See the descriptions of individual flags. The common ones are listed in the description below. **Description** Not to be called directly, use the kmem_cache_create() wrapper with the same parameters. Commonly used **flags**: :c:type:`SLAB_ACCOUNT` - Account allocations to memcg. :c:type:`SLAB_HWCACHE_ALIGN` - Align objects on cache line boundaries. :c:type:`SLAB_RECLAIM_ACCOUNT` - Objects are reclaimable. :c:type:`SLAB_TYPESAFE_BY_RCU` - Slab page (not individual objects) freeing delayed by a grace period - see the full description before using. **Context** Cannot be called within a interrupt, but can be interrupted. **Return** a pointer to the cache on success, NULL on failure.”h]”(jM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.c”h´M(hj°dubj¤)�”}”(hhh]”(j©)�”}”(hŒV``const char *name`` A string which is used in /proc/slabinfo to identify this cache. ”h]”(j¯)�”}”(hŒ``const char *name``”h]”jS)�”}”(hjÕdh]”hŒconst char *name”…”�”}”(hj×dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÓdubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.c”h´M%hjÏdubjÉ)�”}”(hhh]”jM)�”}”(hŒ@A string which is used in /proc/slabinfo to identify this cache.”h]”hŒ@A string which is used in /proc/slabinfo to identify this cache.”…”�”}”(hjîdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jêdh´M%hjëdubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÏdubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jêdh´M%hjÌdubj©)�”}”(hŒN``unsigned int object_size`` The size of objects to be created in this cache. ”h]”(j¯)�”}”(hŒ``unsigned int object_size``”h]”jS)�”}”(hjeh]”hŒunsigned int object_size”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj eubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.c”h´M&hjeubjÉ)�”}”(hhh]”jM)�”}”(hŒ0The size of objects to be created in this cache.”h]”hŒ0The size of objects to be created in this cache.”…”�”}”(hj'eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j#eh´M&hj$eubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j#eh´M&hjÌdubj©)�”}”(hŒ‡``struct kmem_cache_args *args`` Additional arguments for the cache creation (see :c:type:`struct kmem_cache_args `). ”h]”(j¯)�”}”(hŒ ``struct kmem_cache_args *args``”h]”jS)�”}”(hjGeh]”hŒstruct kmem_cache_args *args”…”�”}”(hjIeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjEeubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.c”h´M(hjAeubjÉ)�”}”(hhh]”jM)�”}”(hŒeAdditional arguments for the cache creation (see :c:type:`struct kmem_cache_args `).”h]”(hŒ1Additional arguments for the cache creation (see ”…”�”}”(hj`eh²hh³Nh´Nubh)�”}”(hŒ2:c:type:`struct kmem_cache_args `”h]”jS)�”}”(hjjeh]”hŒstruct kmem_cache_args”…”�”}”(hjleh²hh³Nh´Nubah}”(h]”h ]”(jjAŒc-type”eh"]”h$]”h&]”uh1jRhjheubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j(Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jpj.j1Œkmem_cache_args”uh1hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.c”h´M'hj`eubhŒ).”…”�”}”(hj`eh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‡eh´M'hj]eubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjAeubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j\eh´M(hjÌdubj©)�”}”(hŒv``slab_flags_t flags`` See the descriptions of individual flags. The common ones are listed in the description below. ”h]”(j¯)�”}”(hŒ``slab_flags_t flags``”h]”jS)�”}”(hj¤eh]”hŒslab_flags_t flags”…”�”}”(hj¦eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¢eubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.c”h´M*hjžeubjÉ)�”}”(hhh]”jM)�”}”(hŒ^See the descriptions of individual flags. The common ones are listed in the description below.”h]”hŒ^See the descriptions of individual flags. The common ones are listed in the description below.”…”�”}”(hj½eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.c”h´M)hjºeubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjžeubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¹eh´M*hjÌdubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj°dubjM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.c”h´M,hj°dubjM)�”}”(hŒXNot to be called directly, use the kmem_cache_create() wrapper with the same parameters.”h]”hŒXNot to be called directly, use the kmem_cache_create() wrapper with the same parameters.”…”�”}”(hjöeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.c”h´M+hj°dubjM)�”}”(hŒCommonly used **flags**:”h]”(hŒCommonly used ”…”�”}”(hjfh²hh³Nh´NubjŽ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hj fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjfubhŒ:”…”�”}”(hjfh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.c”h´M.hj°dubjM)�”}”(hŒ6:c:type:`SLAB_ACCOUNT` - Account allocations to memcg.”h]”(h)�”}”(hŒ:c:type:`SLAB_ACCOUNT`”h]”jS)�”}”(hj,fh]”hŒ SLAB_ACCOUNT”…”�”}”(hj.fh²hh³Nh´Nubah}”(h]”h ]”(jjAŒc-type”eh"]”h$]”h&]”uh1jRhj*fubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j(Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jpj.j1Œ SLAB_ACCOUNT”uh1hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.c”h´M0hj&fubhŒ - Account allocations to memcg.”…”�”}”(hj&fh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jIfh´M0hj°dubjM)�”}”(hŒF:c:type:`SLAB_HWCACHE_ALIGN` - Align objects on cache line boundaries.”h]”(h)�”}”(hŒ:c:type:`SLAB_HWCACHE_ALIGN`”h]”jS)�”}”(hjZfh]”hŒSLAB_HWCACHE_ALIGN”…”�”}”(hj\fh²hh³Nh´Nubah}”(h]”h ]”(jjAŒc-type”eh"]”h$]”h&]”uh1jRhjXfubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j(Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jpj.j1ŒSLAB_HWCACHE_ALIGN”uh1hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.c”h´M2hjTfubhŒ* - Align objects on cache line boundaries.”…”�”}”(hjTfh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jwfh´M2hj°dubjM)�”}”(hŒ9:c:type:`SLAB_RECLAIM_ACCOUNT` - Objects are reclaimable.”h]”(h)�”}”(hŒ:c:type:`SLAB_RECLAIM_ACCOUNT`”h]”jS)�”}”(hjˆfh]”hŒSLAB_RECLAIM_ACCOUNT”…”�”}”(hjŠfh²hh³Nh´Nubah}”(h]”h ]”(jjAŒc-type”eh"]”h$]”h&]”uh1jRhj†fubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j(Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jpj.j1ŒSLAB_RECLAIM_ACCOUNT”uh1hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.c”h´M4hj‚fubhŒ - Objects are reclaimable.”…”�”}”(hj‚fh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¥fh´M4hj°dubjM)�”}”(hŒŽ:c:type:`SLAB_TYPESAFE_BY_RCU` - Slab page (not individual objects) freeing delayed by a grace period - see the full description before using.”h]”(h)�”}”(hŒ:c:type:`SLAB_TYPESAFE_BY_RCU`”h]”jS)�”}”(hj¶fh]”hŒSLAB_TYPESAFE_BY_RCU”…”�”}”(hj¸fh²hh³Nh´Nubah}”(h]”h ]”(jjAŒc-type”eh"]”h$]”h&]”uh1jRhj´fubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j(Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jpj.j1ŒSLAB_TYPESAFE_BY_RCU”uh1hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.c”h´M6hj°fubhŒp - Slab page (not individual objects) freeing delayed by a grace period - see the full description before using.”…”�”}”(hj°fh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÓfh´M6hj°dubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjàfh]”hŒContext”…”�”}”(hjâfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÞfubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.c”h´M9hj°dubjM)�”}”(hŒoh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjoubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLoh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjoubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjZoh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjoubj)�”}”(hjR h]”hŒp”…”�”}”(hjgoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjoubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjoubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjânh²hh³jônh´Mâubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÞnh²hh³jônh´Mâubah}”(h]”jÙnah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jônh´MâhjÛnh²hubj4)�”}”(hhh]”jM)�”}”(hŒ4Clear sensitive information in memory before freeing”h]”hŒ4Clear sensitive information in memory before freeing”…”�”}”(hj�oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.c”h´Mâhj�oh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÛnh²hh³jônh´Mâubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¨ojHj¨ojI‰jJ‰jK‰uh1híh²hhjLh³Nh´Nubj„)�”}”(hXš**Parameters** ``const void *p`` object to free memory of **Description** The memory of the object **p** points to is zeroed before freed. If **p** is ``NULL``, kfree_sensitive() does nothing. **Note** this function zeroes the whole allocated buffer which can be a good deal bigger than the requested buffer size passed to kmalloc(). So be careful when using this function in performance sensitive code.”h]”(jM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.c”h´Mæhj¬oubj¤)�”}”(hhh]”j©)�”}”(hŒ+``const void *p`` object to free memory of ”h]”(j¯)�”}”(hŒ``const void *p``”h]”jS)�”}”(hjÑoh]”hŒ const void *p”…”�”}”(hjÓoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÏoubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.c”h´MãhjËoubjÉ)�”}”(hhh]”jM)�”}”(hŒobject to free memory of”h]”hŒobject to free memory of”…”�”}”(hjêoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jæoh´Mãhjçoubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjËoubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jæoh´MãhjÈoubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¬oubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj ph]”hŒ Description”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj pubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slab_common.c”h´Måhj¬oubjM)�”}”(hŒvThe memory of the object **p** points to is zeroed before freed. If **p** is ``NULL``, kfree_sensitive() does nothing.”•h]”(hŒThe memory of the object ”…”�”}”(hj"ph²hh³Nh´NubjŽ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj*ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj"pubhŒ& points to is zeroed before freed. If ”…”�”}”(hj"ph²hh³Nh´NubjŽ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjvubj)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjLvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjvubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj�uubj )�”}”(hŒint node”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjevh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjavubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsvh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjavubj)�”}”(hŒnode”h]”hŒnode”…”�”}”(hj�vh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjavubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj�uubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjGuh²hh³jYuh´Mÿ ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjCuh²hh³jYuh´Mÿ ubah}”(h]”j>uah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jYuh´Mÿ hj@uh²hubj4)�”}”(hhh]”jM)�”}”(hŒ>map pages linearly into kernel virtual address (vmalloc space)”h]”hŒ>map pages linearly into kernel virtual address (vmalloc space)”…”�”}”(hj«vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mÿ hj¨vh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj@uh²hh³jYuh´Mÿ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÃvjHjÃvjI‰jJ‰jK‰uh1híh²hhjrh³Nh´Nubj„)�”}”(hXˆ**Parameters** ``struct page **pages`` an array of pointers to the pages to be mapped ``unsigned int count`` number of pages ``int node`` prefer to allocate data structures on this node **Description** If you use this function for less than VMAP_MAX_ALLOC pages, it could be faster than vmap so it's good. But if you mix long-life and short-life objects with vm_map_ram(), it could consume lots of address space through fragmentation (especially on a 32bit machine). You could see failures in the end. Please use this function for short-lived objects. **Return** a pointer to the address that has been mapped, or ``NULL`` on failure”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M hjÇvubj¤)�”}”(hhh]”(j©)�”}”(hŒG``struct page **pages`` an array of pointers to the pages to be mapped ”h]”(j¯)�”}”(hŒ``struct page **pages``”h]”jS)�”}”(hjìvh]”hŒstruct page **pages”…”�”}”(hjîvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjêvubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M hjævubjÉ)�”}”(hhh]”jM)�”}”(hŒ.an array of pointers to the pages to be mapped”h]”hŒ.an array of pointers to the pages to be mapped”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jwh´M hjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjævubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jwh´M hjãvubj©)�”}”(hŒ'``unsigned int count`` number of pages ”h]”(j¯)�”}”(hŒ``unsigned int count``”h]”jS)�”}”(hj%wh]”hŒunsigned int count”…”�”}”(hj'wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj#wubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M hjwubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages”h]”hŒnumber of pages”…”�”}”(hj>wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j:wh´M hj;wubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjwubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j:wh´M hjãvubj©)�”}”(hŒ=``int node`` prefer to allocate data structures on this node ”h]”(j¯)�”}”(hŒ ``int node``”h]”jS)�”}”(hj^wh]”hŒint node”…”�”}”(hj`wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj\wubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M hjXwubjÉ)�”}”(hhh]”jM)�”}”(hŒ/prefer to allocate data structures on this node”h]”hŒ/prefer to allocate data structures on this node”…”�”}”(hjwwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jswh´M hjtwubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjXwubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jswh´M hjãvubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÇvubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M hjÇvubjM)�”}”(hX`If you use this function for less than VMAP_MAX_ALLOC pages, it could be faster than vmap so it's good. But if you mix long-life and short-life objects with vm_map_ram(), it could consume lots of address space through fragmentation (especially on a 32bit machine). You could see failures in the end. Please use this function for short-lived objects.”h]”hXbIf you use this function for less than VMAP_MAX_ALLOC pages, it could be faster than vmap so it’s good. But if you mix long-life and short-life objects with vm_map_ram(), it could consume lots of address space through fragmentation (especially on a 32bit machine). You could see failures in the end. Please use this function for short-lived objects.”…”�”}”(hj¯wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M hjÇvubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjÀwh]”hŒReturn”…”�”}”(hjÂwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¾wubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M hjÇvubjM)�”}”(hŒEa pointer to the address that has been mapped, or ``NULL`` on failure”h]”(hŒ2a pointer to the address that has been mapped, or ”…”�”}”(hjÖwh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjÞwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÖwubhŒ on failure”…”�”}”(hjÖwh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M hjÇvubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjrh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvfree (C function)”Œc.vfree”hNt”auh1hÜhjrh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒvoid vfree (const void *addr)”h]”hù)�”}”(hŒvoid vfree(const void *addr)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjxh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MŒ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&xh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjxh²hh³j%xh´MŒ ubhÿ)�”}”(hŒvfree”h]”j)�”}”(hŒvfree”h]”hŒvfree”…”�”}”(hj8xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4xubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjxh²hh³j%xh´MŒ ubj )�”}”(hŒ(const void *addr)”h]”j )�”}”(hŒconst void *addr”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjTxh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjPxubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjaxh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjPxubjµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjoxh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjPxubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}xh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjPxubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj‹xh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjPxubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj˜xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjPxubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjLxubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjxh²hh³j%xh´MŒ ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjxh²hh³j%xh´MŒ ubah}”(h]”j xah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j%xh´MŒ hj xh²hubj4)�”}”(hhh]”jM)�”}”(hŒ%Release memory allocated by vmalloc()”h]”hŒ%Release memory allocated by vmalloc()”…”�”}”(hjÂxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MŒ hj¿xh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj xh²hh³j%xh´MŒ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÚxjHjÚxjI‰jJ‰jK‰uh1híh²hhjrh³Nh´Nubj„)�”}”(hX¯**Parameters** ``const void *addr`` Memory base address **Description** Free the virtually continuous memory area starting at **addr**, as obtained from one of the vmalloc() family of APIs. This will usually also free the physical memory underlying the virtual allocation, but that memory is reference counted, so it will not be freed until the last user goes away. If **addr** is NULL, no operation is performed. **Context** May sleep if called *not* from interrupt context. Must not be called in NMI context (strictly speaking, it could be if we have CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG, but making the calling conventions for vfree() arch-dependent would be a really bad idea).”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M� hjÞxubj¤)�”}”(hhh]”j©)�”}”(hŒ)``const void *addr`` Memory base address ”h]”(j¯)�”}”(hŒ``const void *addr``”h]”jS)�”}”(hjyh]”hŒconst void *addr”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjyubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M� hjýxubjÉ)�”}”(hhh]”jM)�”}”(hŒMemory base address”h]”hŒMemory base address”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jyh´M� hjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjýxubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jyh´M� hjúxubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÞxubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj>yh]”hŒ Description”…”�”}”(hj@yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjflags ``pgprot_t prot`` page protection for the mapping **Description** Maps **count** pages from **pages** into contiguous kernel virtual space. If **flags** contains ``VM_MAP_PUT_PAGES`` the ownership of the pages array itself (which must be kmalloc or vmalloc memory) and one reference per pages in it are transferred from the caller to vmap(), and will be freed / dropped when vfree() is called on the return value. **Return** the address of the area or ``NULL`` on failure”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MÝ hj\}ubj¤)�”}”(hhh]”(j©)�”}”(hŒ/``struct page **pages`` array of page pointers ”h]”(j¯)�”}”(hŒ``struct page **pages``”h]”jS)�”}”(hj�}h]”hŒstruct page **pages”…”�”}”(hjƒ}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MÚ hj{}ubjÉ)�”}”(hhh]”jM)�”}”(hŒarray of page pointers”h]”hŒarray of page pointers”…”�”}”(hjš}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j–}h´MÚ hj—}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj{}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j–}h´MÚ hjx}ubj©)�”}”(hŒ.``unsigned int count`` number of pages to map ”h]”(j¯)�”}”(hŒ``unsigned int count``”h]”jS)�”}”(hjº}h]”hŒunsigned int count”…”�”}”(hj¼}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¸}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MÛ hj´}ubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages to map”h]”hŒnumber of pages to map”…”�”}”(hjÓ}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÏ}h´MÛ hjÐ}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj´}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÏ}h´MÛ hjx}ubj©)�”}”(hŒ'``unsigned long flags`` vm_area->flags ”h]”(j¯)�”}”(hŒ``unsigned long flags``”h]”jS)�”}”(hjó}h]”hŒunsigned long flags”…”�”}”(hjõ}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjñ}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MÜ hjí}ubjÉ)�”}”(hhh]”jM)�”}”(hŒvm_area->flags”h]”hŒvm_area->flags”…”�”}”(hj ~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j~h´MÜ hj ~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjí}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j~h´MÜ hjx}ubj©)�”}”(hŒ2``pgprot_t prot`` page protection for the mapping ”h]”(j¯)�”}”(hŒ``pgprot_t prot``”h]”jS)�”}”(hj,~h]”hŒ pgprot_t prot”…”�”}”(hj.~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj*~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MÝ hj&~ubjÉ)�”}”(hhh]”jM)�”}”(hŒpage protection for the mapping”h]”hŒpage protection for the mapping”…”�”}”(hjE~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jA~h´MÝ hjB~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj&~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jA~h´MÝ hjx}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj\}ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mß hj\}ubjM)�”}”(hX[Maps **count** pages from **pages** into contiguous kernel virtual space. If **flags** contains ``VM_MAP_PUT_PAGES`` the ownership of the pages array itself (which must be kmalloc or vmalloc memory) and one reference per pages in it are transferred from the caller to vmap(), and will be freed / dropped when vfree() is called on the return value.”h]”(hŒMaps ”…”�”}”(hj}~h²hh³Nh´NubjŽ)�”}”(hŒ **count**”h]”hŒcount”…”�”}”(hj…~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj}~ubhŒ pages from ”…”�”}”(hj}~h²hh³Nh´NubjŽ)�”}”(hŒ **pages**”h]”hŒpages”…”�”}”(hj—~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj}~ubhŒ* into contiguous kernel virtual space. If ”…”�”}”(hj}~h²hh³Nh´NubjŽ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hj©~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj}~ubhŒ contains ”…”�”}”(hj}~h²hh³Nh´NubjS)�”}”(hŒ``VM_MAP_PUT_PAGES``”h]”hŒVM_MAP_PUT_PAGES”…”�”}”(hj»~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj}~ubhŒç the ownership of the pages array itself (which must be kmalloc or vmalloc memory) and one reference per pages in it are transferred from the caller to vmap(), and will be freed / dropped when vfree() is called on the return value.”…”�”}”(hj}~h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MÞ hj\}ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mä hj\}ubjM)�”}”(hŒ.the address of the area or ``NULL`` on failure”h]”(hŒthe address of the area or ”…”�”}”(hjì~h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjô~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjì~ubhŒ on failure”…”�”}”(hjì~h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Må hj\}ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjrh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvmap_pfn (C function)”Œ c.vmap_pfn”hNt”auh1hÜhjrh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒHvoid * vmap_pfn (unsigned long *pfns, unsigned int count, pgprot_t prot)”h]”hù)�”}”(hŒFvoid *vmap_pfn(unsigned long *pfns, unsigned int count, pgprot_t prot)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj)h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M)ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj)h²hh³j;h´M)ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj)h²hh³j;h´M)ubhÿ)�”}”(hŒvmap_pfn”h]”j)�”}”(hŒvmap_pfn”h]”hŒvmap_pfn”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjWubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj)h²hh³j;h´M)ubj )�”}”(hŒ8(unsigned long *pfns, unsigned int count, pgprot_t prot)”h]”(j )�”}”(hŒunsigned long *pfns”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjsubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjsubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjsubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjsubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjsubj)�”}”(hŒpfns”h]”hŒpfns”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjsubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjoubj )�”}”(hŒunsigned int count”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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Ñubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(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Ñubj)�”}”(hŒcount”h]”hŒcount”…”�”}”(hj €h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÑubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjoubj )�”}”(hŒ pgprot_t prot”h]”(h)�”}”(hhh]”j)�”}”(hŒpgprot_t”h]”hŒpgprot_t”…”�”}”(hj)€h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj&€ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j+€Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj]sbŒ c.vmap_pfn”†”asbuh1hhj"€ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjI€h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj"€ubj)�”}”(hŒprot”h]”hŒprot”…”�”}”(hjW€h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj"€ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjoubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj)h²hh³j;h´M)ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj%h²hh³j;h´M)ubah}”(h]”j ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j;h´M)hj"h²hubj4)�”}”(hhh]”jM)�”}”(hŒ4map an array of PFNs into virtually contiguous space”h]”hŒ4map an array of PFNs into virtually contiguous space”…”�”}”(hj�€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M)hj~€h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj"h²hh³j;h´M)ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj™€jHj™€jI‰jJ‰jK‰uh1híh²hhjrh³Nh´Nubj„)�”}”(hX$**Parameters** ``unsigned long *pfns`` array of PFNs ``unsigned int count`` number of pages to map ``pgprot_t prot`` page protection for the mapping **Description** Maps **count** PFNs from **pfns** into contiguous kernel virtual space and returns the start address of the mapping.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj£€h]”hŒ Parameters”…”�”}”(hj¥€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¡€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M-hj�€ubj¤)�”}”(hhh]”(j©)�”}”(hŒ&``unsigned long *pfns`` array of PFNs ”h]”(j¯)�”}”(hŒ``unsigned long *pfns``”h]”jS)�”}”(hj€h]”hŒunsigned long *pfns”…”�”}”(hjÄ€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÀ€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M*hj¼€ubjÉ)�”}”(hhh]”jM)�”}”(hŒ array of PFNs”h]”hŒ array of PFNs”…”�”}”(hjÛ€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j×€h´M*hjØ€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¼€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j×€h´M*hj¹€ubj©)�”}”(hŒ.``unsigned int count`` number of pages to map ”h]”(j¯)�”}”(hŒ``unsigned int count``”h]”jS)�”}”(hjû€h]”hŒunsigned int count”…”�”}”(hjý€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjù€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M+hjõ€ubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages to map”h]”hŒnumber of pages to map”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�h´M+hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjõ€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�h´M+hj¹€ubj©)�”}”(hŒ2``pgprot_t prot`` page protection for the mapping ”h]”(j¯)�”}”(hŒ``pgprot_t prot``”h]”jS)�”}”(hj4�h]”hŒ pgprot_t prot”…”�”}”(hj6�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj2�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M,hj.�ubjÉ)�”}”(hhh]”jM)�”}”(hŒpage protection for the mapping”h]”hŒpage protection for the mapping”…”�”}”(hjM�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jI�h´M,hjJ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj.�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jI�h´M,hj¹€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj�€ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M.hj�€ubjM)�”}”(hŒtMaps **count** PFNs from **pfns** into contiguous kernel virtual space and returns the start address of the mapping.”h]”(hŒMaps ”…”�”}”(hj…�h²hh³Nh´NubjŽ)�”}”(hŒ **count**”h]”hŒcount”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj…�ubhŒ PFNs from ”…”�”}”(hj…�h²hh³Nh´NubjŽ)�”}”(hŒ**pfns**”h]”hŒpfns”…”�”}”(hjŸ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj…�ubhŒS into contiguous kernel virtual space and returns the start address of the mapping.”…”�”}”(hj…�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M-hj�€ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjrh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ__vmalloc_node (C function)”Œc.__vmalloc_node”hNt”auh1hÜhjrh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒmvoid * __vmalloc_node (unsigned long size, unsigned long align, gfp_t gfp_mask, int node, const void *caller)”h]”hù)�”}”(hŒkvoid *__vmalloc_node(unsigned long size, unsigned long align, gfp_t gfp_mask, int node, const void *caller)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjØ�h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÔ�h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M3ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÔ�h²hh³jæ�h´M3ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjõ�h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÔ�h²hh³jæ�h´M3ubhÿ)�”}”(hŒ__vmalloc_node”h]”j)�”}”(hŒ__vmalloc_node”h]”hŒ__vmalloc_node”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‚ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÔ�h²hh³jæ�h´M3ubj )�”}”(hŒW(unsigned long size, unsigned long align, gfp_t gfp_mask, int node, const void *caller)”h]”(j )�”}”(hŒunsigned long size”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj"‚h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj‚ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0‚h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj‚ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj>‚h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj‚ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjL‚h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj‚ubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjZ‚h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‚ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‚ubj )�”}”(hŒunsigned long align”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjs‚h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjo‚ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�‚h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjo‚ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj�‚h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjo‚ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�‚h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjo‚ubj)�”}”(hŒalign”h]”hŒalign”…”�”}”(hj«‚h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjo‚ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j 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 ]”jah"]”h$]”h&]”uh1jhjÄ‚ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÉ‚Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj‚sbŒc.__vmalloc_node”†”asbuh1hhjÀ‚ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç‚h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÀ‚ubj)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hjõ‚h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÀ‚ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‚ubj )�”}”(hŒint node”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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 ƒubj)�”}”(hŒnode”h]”hŒnode”…”�”}”(hj*ƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ƒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‚ubj )�”}”(hŒconst void *caller”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjCƒh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj?ƒubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPƒh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj?ƒubjµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj^ƒh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj?ƒubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlƒh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj?ƒubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjzƒh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj?ƒubj)�”}”(hŒcaller”h]”hŒcaller”…”�”}”(hj‡ƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj?ƒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‚ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÔ�h²hh³jæ�h´M3ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÐ�h²hh³jæ�h´M3ubah}”(h]”jË�ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jæ�h´M3hjÍ�h²hubj4)�”}”(hhh]”jM)�”}”(hŒ$allocate virtually contiguous memory”h]”hŒ$allocate virtually contiguous memory”…”�”}”(hj±ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M3hj®ƒh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÍ�h²hh³jæ�h´M3ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjɃjHjɃjI‰jJ‰jK‰uh1híh²hhjrh³Nh´Nubj„)�”}”(hXt**Parameters** ``unsigned long size`` allocation size ``unsigned long align`` desired alignment ``gfp_t gfp_mask`` flags for the page level allocator ``int node`` node to use for allocation or NUMA_NO_NODE ``const void *caller`` caller's return address **Description** Allocate enough pages to cover **size** from the page level allocator with **gfp_mask** flags. Map them into contiguous kernel virtual space. Semantics of **gfp_mask** (including reclaim/retry modifiers such as __GFP_NOFAIL) are the same as in __vmalloc_node_range_noprof(). **Return** pointer to the allocated memory or ``NULL`` on error”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÓƒh]”hŒ Parameters”…”�”}”(hjÕƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjуubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M7hj̓ubj¤)�”}”(hhh]”(j©)�”}”(hŒ'``unsigned long size`` allocation size ”h]”(j¯)�”}”(hŒ``unsigned long size``”h]”jS)�”}”(hjòƒh]”hŒunsigned long size”…”�”}”(hjôƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjðƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M4hjìƒubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation size”h]”hŒallocation size”…”�”}”(hj „h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j„h´M4hj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjìƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j„h´M4hjéƒubj©)�”}”(hŒ*``unsigned long align`` desired alignment ”h]”(j¯)�”}”(hŒ``unsigned long align``”h]”jS)�”}”(hj+„h]”hŒunsigned long align”…”�”}”(hj-„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj)„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M5hj%„ubjÉ)�”}”(hhh]”jM)�”}”(hŒdesired alignment”h]”hŒdesired alignment”…”�”}”(hjD„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j@„h´M5hjA„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj%„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j@„h´M5hjéƒubj©)�”}”(hŒ6``gfp_t gfp_mask`` flags for the page level allocator ”h]”(j¯)�”}”(hŒ``gfp_t gfp_mask``”h]”jS)�”}”(hjd„h]”hŒgfp_t gfp_mask”…”�”}”(hjf„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjb„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M6hj^„ubjÉ)�”}”(hhh]”jM)�”}”(hŒ"flags for the page level allocator”h]”hŒ"flags for the page level allocator”…”�”}”(hj}„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jy„h´M6hjz„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj^„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jy„h´M6hjéƒubj©)�”}”(hŒ8``int node`` node to use for allocation or NUMA_NO_NODE ”h]”(j¯)�”}”(hŒ ``int node``”h]”jS)�”}”(hj�„h]”hŒint node”…”�”}”(hjŸ„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj›„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M7hj—„ubjÉ)�”}”(hhh]”jM)�”}”(hŒ*node to use for allocation or NUMA_NO_NODE”h]”hŒ*node to use for allocation or NUMA_NO_NODE”…”�”}”(hj¶„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j²„h´M7hj³„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj—„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j²„h´M7hjéƒubj©)�”}”(hŒ/``const void *caller`` caller's return address ”h]”(j¯)�”}”(hŒ``const void *caller``”h]”jS)�”}”(hjÖ„h]”hŒconst void *caller”…”�”}”(hjØ„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÔ„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M8hjЄubjÉ)�”}”(hhh]”jM)�”}”(hŒcaller's return address”h]”hŒcaller’s return address”…”�”}”(hjï„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jë„h´M8hjì„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjЄubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jë„h´M8hjéƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj̓ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj…h]”hŒ Description”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M:hj̓ubjM)�”}”(hŒŽAllocate enough pages to cover **size** from the page level allocator with **gfp_mask** flags. Map them into contiguous kernel virtual space.”h]”(hŒAllocate enough pages to cover ”…”�”}”(hj'…h²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj/…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj'…ubhŒ$ from the page level allocator with ”…”�”}”(hj'…h²hh³Nh´NubjŽ)�”}”(hŒ **gfp_mask**”h]”hŒgfp_mask”…”�”}”(hjA…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj'…ubhŒ7 flags. Map them into contiguous kernel virtual space.”…”�”}”(hj'…h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M9hj̓ubjM)�”}”(hŒ„Semantics of **gfp_mask** (including reclaim/retry modifiers such as __GFP_NOFAIL) are the same as in __vmalloc_node_range_noprof().”h]”(hŒ Semantics of ”…”�”}”(hjZ…h²hh³Nh´NubjŽ)�”}”(hŒ **gfp_mask**”h]”hŒgfp_mask”…”�”}”(hjb…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjZ…ubhŒk (including reclaim/retry modifiers such as __GFP_NOFAIL) are the same as in __vmalloc_node_range_noprof().”…”�”}”(hjZ…h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M<hj̓ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M?hj̓ubjM)�”}”(hŒ4pointer to the allocated memory or ``NULL`` on error”h]”(hŒ#pointer to the allocated memory or ”…”�”}”(hj“…h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj›…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj“…ubhŒ on error”…”�”}”(hj“…h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M@hj̓ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjrh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvmalloc (C function)”Œ c.vmalloc”hNt”auh1hÜhjrh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ#void * vmalloc (unsigned long size)”h]”hù)�”}”(hŒ!void *vmalloc(unsigned long size)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÔ…h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÐ…h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M[ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(• hjã…h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÐ…h²hh³jâ…h´M[ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjñ…h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÐ…h²hh³jâ…h´M[ubhÿ)�”}”(hŒvmalloc”h]”j)�”}”(hŒvmalloc”h]”hŒvmalloc”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjþ…ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÐ…h²hh³jâ…h´M[ubj )�”}”(hŒ(unsigned long size)”h]”j )�”}”(hŒunsigned long size”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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†ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj:†h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj†ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjH†h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj†ubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjV†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj†ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj†ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÐ…h²hh³jâ…h´M[ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÌ…h²hh³jâ…h´M[ubah}”(h]”jÇ…ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jâ…h´M[hjÉ…h²hubj4)�”}”(hhh]”jM)�”}”(hŒ$allocate virtually contiguous memory”h]”hŒ$allocate virtually contiguous memory”…”�”}”(hj€†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M[hj}†h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÉ…h²hh³jâ…h´M[ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj˜†jHj˜†jI‰jJ‰jK‰uh1híh²hhjrh³Nh´Nubj„)�”}”(hX`**Parameters** ``unsigned long size`` allocation size **Description** Allocate enough pages to cover **size** from the page level allocator and map them into contiguous kernel virtual space. For tight control over page level allocator and protection flags use __vmalloc() instead. **Return** pointer to the allocated memory or ``NULL`` on error”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¢†h]”hŒ Parameters”…”�”}”(hj¤†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj †ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M_hjœ†ubj¤)�”}”(hhh]”j©)�”}”(hŒ'``unsigned long size`` allocation size ”h]”(j¯)�”}”(hŒ``unsigned long size``”h]”jS)�”}”(hjÁ†h]”hŒunsigned long size”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¿†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M\hj»†ubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation size”h]”hŒallocation size”…”�”}”(hjÚ†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÖ†h´M\hj׆ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj»†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÖ†h´M\hj¸†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjœ†ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjü†h]”hŒ Description”…”�”}”(hjþ†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjú†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M^hjœ†ubjM)�”}”(hŒxAllocate enough pages to cover **size** from the page level allocator and map them into contiguous kernel virtual space.”h]”(hŒAllocate enough pages to cover ”…”�”}”(hj‡h²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‡ubhŒQ from the page level allocator and map them into contiguous kernel virtual space.”…”�”}”(hj‡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M]hjœ†ubjM)�”}”(hŒYFor tight control over page level allocator and protection flags use __vmalloc() instead.”h]”hŒYFor tight control over page level allocator and protection flags use __vmalloc() instead.”…”�”}”(hj3‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M`hjœ†ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mchjœ†ubjM)�”}”(hŒ4pointer to the allocated memory or ``NULL`` on error”h]”(hŒ#pointer to the allocated memory or ”…”�”}”(hjZ‡h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjb‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjZ‡ubhŒ on error”…”�”}”(hjZ‡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mdhjœ†ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjrh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvmalloc_huge_node (C function)”Œc.vmalloc_huge_node”hNt”auh1hÜhjrh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒGvoid * vmalloc_huge_node (unsigned long size, gfp_t gfp_mask, int node)”h]”hù)�”}”(hŒEvoid *vmalloc_huge_node(unsigned long size, gfp_t gfp_mask, int node)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj›‡h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj—‡h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MnubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª‡h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj—‡h²hh³j©‡h´MnubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¸‡h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj—‡h²hh³j©‡h´Mnubhÿ)�”}”(hŒvmalloc_huge_node”h]”j)�”}”(hŒvmalloc_huge_node”h]”hŒvmalloc_huge_node”…”�”}”(hjɇh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŇubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj—‡h²hh³j©‡h´Mnubj )�”}”(hŒ.(unsigned long size, gfp_t gfp_mask, int node)”h]”(j )�”}”(hŒunsigned long size”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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á‡ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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á‡ubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjá‡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj݇ubj )�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj9ˆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj6ˆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j;ˆŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljˇsbŒc.vmalloc_huge_node”†”asbuh1hhj2ˆubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYˆh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj2ˆubj)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hjgˆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2ˆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj݇ubj )�”}”(hŒint node”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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|ˆubj)�”}”(hŒnode”h]”hŒnode”…”�”}”(hjœˆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj|ˆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj݇ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj—‡h²hh³j©‡h´Mnubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj“‡h²hh³j©‡h´Mnubah}”(h]”jއah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j©‡h´Mnhj�‡h²hubj4)�”}”(hhh]”jM)�”}”(hŒ6allocate virtually contiguous memory, allow huge pages”h]”hŒ6allocate virtually contiguous memory, allow huge pages”…”�”}”(hjƈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MnhjÈh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj�‡h²hh³j©‡h´Mnubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÞˆjHjÞˆjI‰jJ‰jK‰uh1híh²hhjrh³Nh´Nubj„)�”}”(hXÑ**Parameters** ``unsigned long size`` allocation size ``gfp_t gfp_mask`` flags for the page level allocator ``int node`` node to use for allocation or NUMA_NO_NODE **Description** Allocate enough pages to cover **size** from the page level allocator and map them into contiguous kernel virtual space. If **size** is greater than or equal to PMD_SIZE, allow using huge pages for the memory **Return** pointer to the allocated memory or ``NULL`` on error”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjèˆh]”hŒ Parameters”…”�”}”(hjêˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjæˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mrhjâˆubj¤)�”}”(hhh]”(j©)�”}”(hŒ'``unsigned long size`` allocation size ”h]”(j¯)�”}”(hŒ``unsigned long size``”h]”jS)�”}”(hj‰h]”hŒunsigned long size”…”�”}”(hj ‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mohj‰ubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation size”h]”hŒallocation size”…”�”}”(hj ‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‰h´Mohj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‰h´Mohjþˆubj©)�”}”(hŒ6``gfp_t gfp_mask`` flags for the page level allocator ”h]”(j¯)�”}”(hŒ``gfp_t gfp_mask``”h]”jS)�”}”(hj@‰h]”hŒgfp_t gfp_mask”…”�”}”(hjB‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj>‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mphj:‰ubjÉ)�”}”(hhh]”jM)�”}”(hŒ"flags for the page level allocator”h]”hŒ"flags for the page level allocator”…”�”}”(hjY‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jU‰h´MphjV‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj:‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jU‰h´Mphjþˆubj©)�”}”(hŒ8``int node`` node to use for allocation or NUMA_NO_NODE ”h]”(j¯)�”}”(hŒ ``int node``”h]”jS)�”}”(hjy‰h]”hŒint node”…”�”}”(hj{‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjw‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mqhjs‰ubjÉ)�”}”(hhh]”jM)�”}”(hŒ*node to use for allocation or NUMA_NO_NODE”h]”hŒ*node to use for allocation or NUMA_NO_NODE”…”�”}”(hj’‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jމh´Mqhj�‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjs‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jމh´Mqhjþˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjâˆubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj´‰h]”hŒ Description”…”�”}”(hj¶‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj²‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MshjâˆubjM)�”}”(hŒÐAllocate enough pages to cover **size** from the page level allocator and map them into contiguous kernel virtual space. If **size** is greater than or equal to PMD_SIZE, allow using huge pages for the memory”h]”(hŒAllocate enough pages to cover ”…”�”}”(hjʉh²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjÒ‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjʉubhŒU from the page level allocator and map them into contiguous kernel virtual space. If ”…”�”}”(hjʉh²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjä‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjʉubhŒL is greater than or equal to PMD_SIZE, allow using huge pages for the memory”…”�”}”(hjʉh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MrhjâˆubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MwhjâˆubjM)�”}”(hŒ4pointer to the allocated memory or ``NULL`` on error”h]”(hŒ#pointer to the allocated memory or ”…”�”}”(hjŠh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjŠubhŒ on error”…”�”}”(hjŠh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mxhjâˆubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjrh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvzalloc (C function)”Œ c.vzalloc”hNt”auh1hÜhjrh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ#void * vzalloc (unsigned long size)”h]”hù)�”}”(hŒ!void *vzalloc(unsigned long size)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjVŠh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjRŠh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M…ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeŠh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjRŠh²hh³jdŠh´M…ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjsŠh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjRŠh²hh³jdŠh´M…ubhÿ)�”}”(hŒvzalloc”h]”j)�”}”(hŒvzalloc”h]”hŒvzalloc”…”�”}”(hj„Šh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj€Šubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjRŠh²hh³jdŠh´M…ubj )�”}”(hŒ(unsigned long size)”h]”j )�”}”(hŒunsigned long size”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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œŠubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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œŠubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjØŠh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjœŠubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj˜Šubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjRŠh²hh³jdŠh´M…ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjNŠh²hh³jdŠh´M…ubah}”(h]”jIŠah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jdŠh´M…hjKŠh²hubj4)�”}”(hhh]”jM)�”}”(hŒ3allocate virtually contiguous memory with zero fill”h]”hŒ3allocate virtually contiguous memory with zero fill”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M…hjÿŠh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjKŠh²hh³jdŠh´M…ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj‹jHj‹jI‰jJ‰jK‰uh1híh²hhjrh³Nh´Nubj„)�”}”(hX…**Parameters** ``unsigned long size`` allocation size **Description** Allocate enough pages to cover **size** from the page level allocator and map them into contiguous kernel virtual space. The memory allocated is set to zero. For tight control over page level allocator and protection flags use __vmalloc() instead. **Return** pointer to the allocated memory or ``NULL`` on error”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj$‹h]”hŒ Parameters”…”�”}”(hj&‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj"‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M‰hj‹ubj¤)�”}”(hhh]”j©)�”}”(hŒ'``unsigned long size`` allocation size ”h]”(j¯)�”}”(hŒ``unsigned long size``”h]”jS)�”}”(hjC‹h]”hŒunsigned long size”…”�”}”(hjE‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjA‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M†hj=‹ubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation size”h]”hŒallocation size”…”�”}”(hj\‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jX‹h´M†hjY‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj=‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jX‹h´M†hj:‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj‹ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj~‹h]”hŒ Description”…”�”}”(hj€‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj|‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mˆhj‹ubjM)�”}”(hŒ�Allocate enough pages to cover **size** from the page level allocator and map them into contiguous kernel virtual space. The memory allocated is set to zero.”h]”(hŒAllocate enough pages to cover ”…”�”}”(hj”‹h²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjœ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj”‹ubhŒv from the page level allocator and map them into contiguous kernel virtual space. The memory allocated is set to zero.”…”�”}”(hj”‹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M‡hj‹ubjM)�”}”(hŒYFor tight control over page level allocator and protection flags use __vmalloc() instead.”h]”hŒYFor tight control over page level allocator and protection flags use __vmalloc() instead.”…”�”}”(hjµ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M‹hj‹ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MŽhj‹ubjM)�”}”(hŒ4pointer to the allocated memory or ``NULL`` on error”h]”(hŒ#pointer to the allocated memory or ”…”�”}”(hjÜ‹h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjä‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÜ‹ubhŒ on error”…”�”}”(hjÜ‹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M�hj‹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjrh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvmalloc_user (C function)”Œc.vmalloc_user”hNt”auh1hÜhjrh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ(void * vmalloc_user (unsigned long size)”h]”hù)�”}”(hŒ&void *vmalloc_user(unsigned long size)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjŒh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M™ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,Œh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŒh²hh³j+Œh´M™ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj:Œh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjŒh²hh³j+Œh´M™ubhÿ)�”}”(hŒ vmalloc_user”h]”j)�”}”(hŒ vmalloc_user”h]”hŒ vmalloc_user”…”�”}”(hjKŒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjGŒubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjŒh²hh³j+Œh´M™ubj )�”}”(hŒ(unsigned long size)”h]”j )�”}”(hŒunsigned long size”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjgŒh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjcŒubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuŒh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjcŒubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjƒŒh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjcŒubjÇ)�”}”(hŒ ”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 ]”jah"]”h$]”h&]”uh1jhjcŒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj_Œubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjŒh²hh³j+Œh´M™ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjŒh²hh³j+Œh´M™ubah}”(h]”jŒah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j+Œh´M™hjŒh²hubj4)�”}”(hhh]”jM)�”}”(hŒ9allocate zeroed virtually contiguous memory for userspace”h]”hŒ9allocate zeroed virtually contiguous memory for userspace”…”�”}”(hjÉŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M™hjÆŒh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjŒh²hh³j+Œh´M™ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjáŒjHjáŒjI‰jJ‰jK‰uh1híh²hhjrh³Nh´Nubj„)�”}”(hŒç**Parameters** ``unsigned long size`` allocation size **Description** The resulting memory area is zeroed so it can be mapped to userspace without leaking data. **Return** pointer to the allocated memory or ``NULL`` on error”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjëŒh]”hŒ Parameters”…”�”}”(hjíŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjéŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M�hjåŒubj¤)�”}”(hhh]”j©)�”}”(hŒ'``unsigned long size`` allocation size ”h]”(j¯)�”}”(hŒ``unsigned long size``”h]”jS)�”}”(hj �h]”hŒunsigned long size”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mšhj�ubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation size”h]”hŒallocation size”…”�”}”(hj#�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�h´Mšhj �ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�h´Mšhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjåŒubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MœhjåŒubjM)�”}”(hŒZThe resulting memory area is zeroed so it can be mapped to userspace without leaking data.”h]”hŒZThe resulting memory area is zeroed so it can be mapped to userspace without leaking data.”…”�”}”(hj[�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M›hjåŒubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MžhjåŒubjM)�”}”(hŒ4pointer to the allocated memory or ``NULL`` on error”h]”(hŒ#pointer to the allocated memory or ”…”�”}”(hj‚�h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjŠ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‚�ubhŒ on error”…”�”}”(hj‚�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MŸhjåŒubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjrh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvmalloc_node (C function)”Œc.vmalloc_node”hNt”auh1hÜhjrh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ2void * vmalloc_node (unsigned long size, int node)”h]”hù)�”}”(hŒ0void *vmalloc_node(unsigned long size, int node)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÃ�h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¿�h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M«ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒ�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¿�h²hh³jÑ�h´M«ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjà�h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¿�h²hh³jÑ�h´M«ubhÿ)�”}”(hŒ vmalloc_node”h]”j)�”}”(hŒ vmalloc_node”h]”hŒ vmalloc_node”…”�”}”(hjñ�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjí�ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¿�h²hh³jÑ�h´M«ubj )�”}”(hŒ(unsigned long size, int node)”h]”(j )�”}”(hŒunsigned long size”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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 Žubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj)Žh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj ŽubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7Žh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj Žubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjEŽh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Žubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjŽubj )�”}”(hŒint node”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj^Žh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjZŽubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlŽh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjZŽubj)�”}”(hŒnode”h]”hŒnode”…”�”}”(hjzŽh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjZŽubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjŽubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¿�h²hh³jÑ�h´M«ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj»�h²hh³jÑ�h´M«ubah}”(h]”j¶�ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÑ�h´M«hj¸�h²hubj4)�”}”(hhh]”jM)�”}”(hŒ"allocate memory on a specific node”h]”hŒ"allocate memory on a specific node”…”�”}”(hj¤Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M«hj¡Žh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¸�h²hh³jÑ�h´M«ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¼ŽjHj¼ŽjI‰jJ‰jK‰uh1híh²hhjrh³Nh´Nubj„)�”}”(hXz**Parameters** ``unsigned long size`` allocation size ``int node`` numa node **Description** Allocate enough pages to cover **size** from the page level allocator and map them into contiguous kernel virtual space. For tight control over page level allocator and protection flags use __vmalloc() instead. **Return** pointer to the allocated memory or ``NULL`` on error”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÆŽh]”hŒ Parameters”…”�”}”(hjÈŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÄŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M¯hjÀŽubj¤)�”}”(hhh]”(j©)�”}”(hŒ'``unsigned long size`` allocation size ”h]”(j¯)�”}”(hŒ``unsigned long size``”h]”jS)�”}”(hjåŽh]”hŒunsigned long size”…”�”}”(hjçŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjãŽubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M¬hjߎubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation size”h]”hŒallocation size”…”�”}”(hjþŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³júŽh´M¬hjûŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjߎubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³júŽh´M¬hjÜŽubj©)�”}”(hŒ``int node`` numa node ”h]”(j¯)�”}”(hŒ ``int node``”h]”jS)�”}”(hj�h]”hŒint node”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M­hj�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ numa node”h]”hŒ numa node”…”�”}”(hj7�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j3�h´M­hj4�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j3�h´M­hjÜŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÀŽubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M¯hjÀŽubjM)�”}”(hŒxAllocate enough pages to cover **size** from the page level allocator and map them into contiguous kernel virtual space.”h]”(hŒAllocate enough pages to cover ”…”�”}”(hjo�h²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjw�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjo�ubhŒQ from the page level allocator and map them into contiguous kernel virtual space.”…”�”}”(hjo�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M®hjÀŽubjM)�”}”(hŒYFor tight control over page level allocator and protection flags use __vmalloc() instead.”h]”hŒYFor tight control over page level allocator and protection flags use __vmalloc() instead.”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M±hjÀŽubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M´hjÀŽubjM)�”}”(hŒ4pointer to the allocated memory or ``NULL`` on error”h]”(hŒ#pointer to the allocated memory or ”…”�”}”(hj·�h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj¿�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj·�ubhŒ on error”…”�”}”(hj·�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MµhjÀŽubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjrh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvzalloc_node (C function)”Œc.vzalloc_node”hNt”auh1hÜhjrh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ2void * vzalloc_node (unsigned long size, int node)”h]”hù)�”}”(hŒ0void *vzalloc_node(unsigned long size, int node)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjø�h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjô�h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M¿ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjô�h²hh³j�h´M¿ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjô�h²hh³j�h´M¿ubhÿ)�”}”(hŒ vzalloc_node”h]”j)�”}”(hŒ vzalloc_node”h]”hŒ vzalloc_node”…”�”}”(hj&�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj"�ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjô�h²hh³j�h´M¿ubj )�”}”(hŒ(unsigned long size, int node)”h]”(j )�”}”(hŒunsigned long size”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjB�h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj>�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjP�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj>�ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj^�h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj>�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj>�ubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjz�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj:�ubj )�”}”(hŒint node”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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��ubj)�”}”(hŒnode”h]”hŒnode”…”�”}”(hj¯�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj��ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj:�ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjô�h²hh³j�h´M¿ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjð�h²hh³j�h´M¿ubah}”(h]”jë�ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j�h´M¿hjí�h²hubj4)�”}”(hhh]”jM)�”}”(hŒ1allocate memory on a specific node with zero fill”h]”hŒ1allocate memory on a specific node with zero fill”…”�”}”(hjÙ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M¿hjÖ�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjí�h²hh³j�h´M¿ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjñ�jHjñ�jI‰jJ‰jK‰uh1híh²hhjrh³Nh´Nubj„)�”}”(hXD**Parameters** ``unsigned long size`` allocation size ``int node`` numa node **Description** Allocate enough pages to cover **size** from the page level allocator and map them into contiguous kernel virtual space. The memory allocated is set to zero. **Return** pointer to the allocated memory or ``NULL`` on error”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjû�h]”hŒ Parameters”…”�”}”(hjý�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjù�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MÃhjõ�ubj¤)�”}”(hhh]”(j©)�”}”(hŒ'``unsigned long size`` allocation size ”h]”(j¯)�”}”(hŒ``unsigned long size``”h]”jS)�”}”(hj‘h]”hŒunsigned long size”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MÀhj‘ubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation size”h]”hŒallocation size”…”�”}”(hj3‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j/‘h´MÀhj0‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j/‘h´MÀhj‘ubj©)�”}”(hŒ``int node`` numa node ”h]”(j¯)�”}”(hŒ ``int node``”h]”jS)�”}”(hjS‘h]”hŒint node”…”�”}”(hjU‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjQ‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MÁhjM‘ubjÉ)�”}”(hhh]”jM)�”}”(hŒ numa node”h]”hŒ numa node”…”�”}”(hjl‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jh‘h´MÁhji‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjM‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jh‘h´MÁhj‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjõ�ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjŽ‘h]”hŒ Description”…”�”}”(hj�‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŒ‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MÃhjõ�ubjM)�”}”(hŒ�Allocate enough pages to cover **size** from the page level allocator and map them into contiguous kernel virtual space. The memory allocated is set to zero.”h]”(hŒAllocate enough pages to cover ”…”�”}”(hj¤‘h²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj¬‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¤‘ubhŒv from the page level allocator and map them into contiguous kernel virtual space. The memory allocated is set to zero.”…”�”}”(hj¤‘h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MÂhjõ�ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MÆhjõ�ubjM)�”}”(hŒ4pointer to the allocated memory or ``NULL`` on error”h]”(hŒ#pointer to the allocated memory or ”…”�”}”(hjÝ‘h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjå‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÝ‘ubhŒ on error”…”�”}”(hjÝ‘h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MÇhjõ�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjrh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ vrealloc_node_align (C function)”Œc.vrealloc_node_align”hNt”auh1hÜhjrh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒbvoid * vrealloc_node_align (const void *p, size_t size, unsigned long align, gfp_t flags, int nid)”h]”hù)�”}”(hŒ`void *vrealloc_node_align(const void *p, size_t size, unsigned long align, gfp_t flags, int nid)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj’h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MÑubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-’h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj’h²hh³j,’h´MÑubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj;’h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj’h²hh³j,’h´MÑubhÿ)�”}”(hŒvrealloc_node_align”h]”j)�”}”(hŒvrealloc_node_align”h]”hŒvrealloc_node_align”…”�”}”(hjL’h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjH’ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj’h²hh³j,’h´MÑubj )�”}”(hŒG(const void *p, size_t size, unsigned long align, gfp_t flags, int nid)”h]”(j )�”}”(hŒ const void *p”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjh’h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjd’ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju’h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjd’ubjµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjƒ’h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjd’ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘’h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjd’ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjŸ’h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjd’ubj)�”}”(hjR h]”hŒp”…”�”}”(hj¬’h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjd’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj`’ubj )�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÇ’h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÄ’ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÉ’Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljN’sbŒc.vrealloc_node_align”†”asbuh1hhjÀ’ubjÇ)�”}”(hŒ ”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 ]”jah"]”h$]”h&]”uh1jhjÀ’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj`’ubj )�”}”(hŒunsigned long align”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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 “ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj*“h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj “ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8“h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj “ubj)�”}”(hŒalign”h]”hŒalign”…”�”}”(hjF“h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj “ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj`’ubj )�”}”(hŒ gfp_t flags”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjb“h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj_“ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jd“Œmodname”NŒ classname”Njpjs)�”}”jv]”jã’Œc.vrealloc_node_align”†”asbuh1hhj[“ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€“h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj[“ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjŽ“h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj[“ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj`’ubj )�”}”(hŒint nid”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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£“ubj)�”}”(hŒnid”h]”hŒnid”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj£“ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj`’ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj’h²hh³j,’h´MÑubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj’h²hh³j,’h´MÑubah}”(h]”j’ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j,’h´MÑhj’h²hubj4)�”}”(hhh]”jM)�”}”(hŒAreallocate virtually contiguous memory; contents remain unchanged”h]”hŒAreallocate virtually contiguous memory; contents remain unchanged”…”�”}”(hjí“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MÑhjê“h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj’h²hh³j,’h´MÑubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj”jHj”jI‰jJ‰jK‰uh1híh²hhjrh³Nh´Nubj„)�”}”(hX'**Parameters** ``const void *p`` object to reallocate memory for ``size_t size`` the size to reallocate ``unsigned long align`` requested alignment ``gfp_t flags`` the flags for the page level allocator ``int nid`` node number of the target node **Description** If **p** is ``NULL``, vrealloc_XXX() behaves exactly like vmalloc_XXX(). If **size** is 0 and **p** is not a ``NULL`` pointer, the object pointed to is freed. If the caller wants the new memory to be on specific node *only*, __GFP_THISNODE flag should be set, otherwise the function will try to avoid reallocation and possibly disregard the specified **nid**. If __GFP_ZERO logic is requested, callers must ensure that, starting with the initial memory allocation, every subsequent call to this API for the same memory allocation is flagged with __GFP_ZERO. Otherwise, it is possible that __GFP_ZERO is not fully honored by this API. Requesting an alignment that is bigger than the alignment of the existing allocation will fail. In any case, the contents of the object pointed to are preserved up to the lesser of the new and old sizes. This function must not be called concurrently with itself or vfree() for the same memory allocation. **Return** pointer to the allocated memory; ``NULL`` if **size** is zero or in case of failure”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj”h]”hŒ Parameters”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MÕhj ”ubj¤)�”}”(hhh]”(j©)�”}”(hŒ2``const void *p`` object to reallocate memory for ”h]”(j¯)�”}”(hŒ``const void *p``”h]”jS)�”}”(hj.”h]”hŒ const void *p”…”�”}”(hj0”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj,”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MÓhj(”ubjÉ)�”}”(hhh]”jM)�”}”(hŒobject to reallocate memory for”h]”hŒobject to reallocate memory for”…”�”}”(hjG”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jC”h´MÓhjD”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj(”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jC”h´MÓhj%”ubj©)�”}”(hŒ'``size_t size`` the size to reallocate ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hjg”h]”hŒ size_t size”…”�”}”(hji”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhje”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MÔhja”ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe size to reallocate”h]”hŒthe size to reallocate”…”�”}”(hj€”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j|”h´MÔhj}”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhja”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j|”h´MÔhj%”ubj©)�”}”(hŒ,``unsigned long align`` requested alignment ”h]”(j¯)�”}”(hŒ``unsigned long align``”h]”jS)�”}”(hj ”h]”hŒunsigned long align”…”�”}”(hj¢”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjž”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MÕhjš”ubjÉ)�”}”(hhh]”jM)�”}”(hŒrequested alignment”h]”hŒrequested alignment”…”�”}”(hj¹”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jµ”h´MÕhj¶”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjš”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jµ”h´MÕhj%”ubj©)�”}”(hŒ7``gfp_t flags`` the flags for the page level allocator ”h]”(j¯)�”}”(hŒ``gfp_t flags``”h]”jS)�”}”(hjÙ”h]”hŒ gfp_t flags”…”�”}”(hjÛ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj×”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MÖhjÓ”ubjÉ)�”}”(hhh]”jM)�”}”(hŒ&the flags for the page level allocator”h]”hŒ&the flags for the page level allocator”…”�”}”(hjò”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jî”h´MÖhjï”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÓ”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jî”h´MÖhj%”ubj©)�”}”(hŒ+``int nid`` node number of the target node ”h]”(j¯)�”}”(hŒ ``int nid``”h]”jS)�”}”(hj•h]”hŒint nid”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M×hj •ubjÉ)�”}”(hhh]”jM)�”}”(hŒnode number of the target node”h]”hŒnode number of the target node”…”�”}”(hj+•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j'•h´M×hj(•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj •ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j'•h´M×hj%”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj ”ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MÙhj ”ubjM)�”}”(hŒžIf **p** is ``NULL``, vrealloc_XXX() behaves exactly like vmalloc_XXX(). If **size** is 0 and **p** is not a ``NULL`` pointer, the object pointed to is freed.”h]”(hŒIf ”…”�”}”(hjc•h²hh³Nh´NubjŽ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjk•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjc•ubhŒ is ”…”�”}”(hjc•h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj}•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjc•ubhŒ8, vrealloc_XXX() behaves exactly like vmalloc_XXX(). If ”…”�”}”(hjc•h²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj�•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjc•ubhŒ is 0 and ”…”�”}”(hjc•h²hh³Nh´NubjŽ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj¡•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjc•ubhŒ is not a ”…”�”}”(hjc•h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj³•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjc•ubhŒ) pointer, the object pointed to is freed.”…”�”}”(hjc•h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MØhj ”ubjM)�”}”(hŒÈIf the caller wants the new memory to be on specific node *only*, __GFP_THISNODE flag should be set, otherwise the function will try to avoid reallocation and possibly disregard the specified **nid**.”h]”(hŒ:If the caller wants the new memory to be on specific node ”…”�”}”(hjÌ•h²hh³Nh´NubjB)�”}”(hŒ*only*”h]”hŒonly”…”�”}”(hjÔ•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÌ•ubhŒ€, __GFP_THISNODE flag should be set, otherwise the function will try to avoid reallocation and possibly disregard the specified ”…”�”}”(hjÌ•h²hh³Nh´NubjŽ)�”}”(hŒ**nid**”h]”hŒnid”…”�”}”(hjæ•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÌ•ubhŒ.”…”�”}”(hjÌ•h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MÛhj ”ubjM)�”}”(hXIf __GFP_ZERO logic is requested, callers must ensure that, starting with the initial memory allocation, every subsequent call to this API for the same memory allocation is flagged with __GFP_ZERO. Otherwise, it is possible that __GFP_ZERO is not fully honored by this API.”h]”hXIf __GFP_ZERO logic is requested, callers must ensure that, starting with the initial memory allocation, every subsequent call to this API for the same memory allocation is flagged with __GFP_ZERO. Otherwise, it is possible that __GFP_ZERO is not fully honored by this API.”…”�”}”(hjÿ•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mßhj ”ubjM)�”}”(hŒ_Requesting an alignment that is bigger than the alignment of the existing allocation will fail.”h]”hŒ_Requesting an alignment that is bigger than the alignment of the existing allocation will fail.”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mähj ”ubjM)�”}”(hŒkIn any case, the contents of the object pointed to are preserved up to the lesser of the new and old sizes.”h]”hŒkIn any case, the contents of the object pointed to are preserved up to the lesser of the new and old sizes.”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mçhj ”ubjM)�”}”(hŒdThis function must not be called concurrently with itself or vfree() for the same memory allocation.”h]”hŒdThis function must not be called concurrently with itself or vfree() for the same memory allocation.”…”�”}”(hj,–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mêhj ”ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Míhj ”ubjM)�”}”(hŒSpointer to the allocated memory; ``NULL`` if **size** is zero or in case of failure”h]”(hŒ!pointer to the allocated memory; ”…”�”}”(hjS–h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj[–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjS–ubhŒ if ”…”�”}”(hjS–h²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjm–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjS–ubhŒ is zero or in case of failure”…”�”}”(hjS–h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mîhj ”ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjrh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvmalloc_32 (C function)”Œ c.vmalloc_32”hNt”auh1hÜhjrh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ&void * vmalloc_32 (unsigned long size)”h]”hù)�”}”(hŒ$void *vmalloc_32(unsigned long size)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¦–h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¢–h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M}ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµ–h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¢–h²hh³j´–h´M}ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¢–h²hh³j´–h´M}ubhÿ)�”}”(hŒ vmalloc_32”h]”j)�”}”(hŒ vmalloc_32”h]”hŒ vmalloc_32”…”�”}”(hjÔ–h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjЖubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¢–h²hh³j´–h´M}ubj )�”}”(hŒ(unsigned long size)”h]”j )�”}”(hŒunsigned long size”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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ì–ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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ì–ubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj(—h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjì–ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjè–ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¢–h²hh³j´–h´M}ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjž–h²hh³j´–h´M}ubah}”(h]”j™–ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j´–h´M}hj›–h²hubj4)�”}”(hhh]”jM)�”}”(hŒ8allocate virtually contiguous memory (32bit addressable)”h]”hŒ8allocate virtually contiguous memory (32bit addressable)”…”�”}”(hjR—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M}hjO—h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj›–h²hh³j´–h´M}ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjj—jHjj—jI‰jJ‰jK‰uh1híh²hhjrh³Nh´Nubj„)�”}”(hX**Parameters** ``unsigned long size`` allocation size **Description** Allocate enough 32bit PA addressable pages to cover **size** from the page level allocator and map them into contiguous kernel virtual space. **Return** pointer to the allocated memory or ``NULL`` on error”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M�hjn—ubj¤)�”}”(hhh]”j©)�”}”(hŒ'``unsigned long size`` allocation size ”h]”(j¯)�”}”(hŒ``unsigned long size``”h]”jS)�”}”(hj“—h]”hŒunsigned long size”…”�”}”(hj•—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‘—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M~hj�—ubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation size”h]”hŒallocation size”…”�”}”(hj¬—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¨—h´M~hj©—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¨—h´M~hjŠ—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjn—ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjΗh]”hŒ Description”…”�”}”(hjЗh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÌ—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M€hjn—ubjM)�”}”(hŒ�Allocate enough 32bit PA addressable pages to cover **size** from the page level allocator and map them into contiguous kernel virtual space.”h]”(hŒ4Allocate enough 32bit PA addressable pages to cover ”…”�”}”(hjä—h²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjì—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjä—ubhŒQ from the page level allocator and map them into contiguous kernel virtual space.”…”�”}”(hjä—h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mhjn—ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M‚hjn—ubjM)�”}”(hŒ4pointer to the allocated memory or ``NULL`` on error”h]”(hŒ#pointer to the allocated memory or ”…”�”}”(hj˜h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj%˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj˜ubhŒ on error”…”�”}”(hj˜h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mƒhjn—ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjrh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvmalloc_32_user (C function)”Œc.vmalloc_32_user”hNt”auh1hÜhjrh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ+void * vmalloc_32_user (unsigned long size)”h]”hù)�”}”(hŒ)void *vmalloc_32_user(unsigned long size)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj^˜h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjZ˜h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjm˜h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjZ˜h²hh³jl˜h´M�ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj{˜h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjZ˜h²hh³jl˜h´M�ubhÿ)�”}”(hŒvmalloc_32_user”h]”j)�”}”(hŒvmalloc_32_user”h]”hŒvmalloc_32_user”…”�”}”(hjŒ˜h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjˆ˜ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjZ˜h²hh³jl˜h´M�ubj )�”}”(hŒ(unsigned long size)”h]”j )�”}”(hŒunsigned long size”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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¤˜ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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¤˜ubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjà˜h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤˜ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj ˜ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjZ˜h²hh³jl˜h´M�ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjV˜h²hh³jl˜h´M�ubah}”(h]”jQ˜ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jl˜h´M�hjS˜h²hubj4)�”}”(hhh]”jM)�”}”(hŒ1allocate zeroed virtually contiguous 32bit memory”h]”hŒ1allocate zeroed virtually contiguous 32bit memory”…”�”}”(hj ™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M�hj™h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjS˜h²hh³jl˜h´M�ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj"™jHj"™jI‰jJ‰jK‰uh1híh²hhjrh³Nh´Nubj„)�”}”(hŒý**Parameters** ``unsigned long size`` allocation size **Description** The resulting memory area is 32bit addressable and zeroed so it can be mapped to userspace without leaking data. **Return** pointer to the allocated memory or ``NULL`` on error”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj,™h]”hŒ Parameters”…”�”}”(hj.™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj*™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M‘hj&™ubj¤)�”}”(hhh]”j©)�”}”(hŒ'``unsigned long size`` allocation size ”h]”(j¯)�”}”(hŒ``unsigned long size``”h]”jS)�”}”(hjK™h]”hŒunsigned long size”…”�”}”(hjM™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjI™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MŽhjE™ubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation size”h]”hŒallocation size”…”�”}”(hjd™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j`™h´MŽhja™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjE™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j`™h´MŽhjB™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj&™ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj†™h]”hŒ Description”…”�”}”(hjˆ™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj„™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M�hj&™ubjM)�”}”(hŒpThe resulting memory area is 32bit addressable and zeroed so it can be mapped to userspace without leaking data.”h]”hŒpThe resulting memory area is 32bit addressable and zeroed so it can be mapped to userspace without leaking data.”…”�”}”(hjœ™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M�hj&™ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M’hj&™ubjM)�”}”(hŒ4pointer to the allocated memory or ``NULL`` on error”h]”(hŒ#pointer to the allocated memory or ”…”�”}”(hjÙh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjË™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÙubhŒ on error”…”�”}”(hjÙh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M“hj&™ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjrh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ remap_vmalloc_range (C function)”Œc.remap_vmalloc_range”hNt”auh1hÜhjrh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒUint remap_vmalloc_range (struct vm_area_struct *vma, void *addr, unsigned long pgoff)”h]”hù)�”}”(hŒTint remap_vmalloc_range(struct vm_area_struct *vma, void *addr, unsigned long pgoff)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjšh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MÿubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjšh²hh³jšh´Mÿubhÿ)�”}”(hŒremap_vmalloc_range”h]”j)�”}”(hŒremap_vmalloc_range”h]”hŒremap_vmalloc_range”…”�”}”(hj%šh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj!šubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjšh²hh³jšh´Mÿubj )�”}”(hŒ=(struct vm_area_struct *vma, void *addr, unsigned long pgoff)”h]”(j )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjAšh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj=šubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNšh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj=šubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj_šh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj\šubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jašŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj'šsbŒc.remap_vmalloc_range”†”asbuh1hhj=šubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj=šubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj�šh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj=šubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjššh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj=šubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj9šubj )�”}”(hŒ void *addr”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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¯šubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÏšh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¯šubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjÜšh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¯šubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj9šubj )�”}”(hŒunsigned long pgoff”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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ñšubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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ñšubj)�”}”(hŒpgoff”h]”hŒpgoff”…”�”}”(hj-›h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñšubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj9šubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjšh²hh³jšh´Mÿubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjü™h²hh³jšh´Mÿubah}”(h]”j÷™ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jšh´Mÿhjù™h²hubj4)�”}”(hhh]”jM)�”}”(hŒmap vmalloc pages to userspace”h]”hŒmap vmalloc pages to userspace”…”�”}”(hjW›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MÿhjT›h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjù™h²hh³jšh´Mÿubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjo›jHjo›jI‰jJ‰jK‰uh1híh²hhjrh³Nh´Nubj„)�”}”(hXÊ**Parameters** ``struct vm_area_struct *vma`` vma to cover (map full range of vma) ``void *addr`` vmalloc memory ``unsigned long pgoff`` number of pages into addr before first page to map **Return** 0 for success, -Exxx on failure **Description** This function checks that addr is a valid vmalloc'ed area, and that it is big enough to cover the vma. Will return failure if that criteria isn't met. Similar to remap_pfn_range() (see mm/memory.c)”•h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mhjs›ubj¤)�”}”(hhh]”(j©)�”}”(hŒD``struct vm_area_struct *vma`` vma to cover (map full range of vma) ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hj˜›h]”hŒstruct vm_area_struct *vma”…”�”}”(hjš›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj–›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mhj’›ubjÉ)�”}”(hhh]”jM)�”}”(hŒ$vma to cover (map full range of vma)”h]”hŒ$vma to cover (map full range of vma)”…”�”}”(hj±›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j­›h´Mhj®›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj’›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j­›h´Mhj�›ubj©)�”}”(hŒ``void *addr`` vmalloc memory ”h]”(j¯)�”}”(hŒ``void *addr``”h]”jS)�”}”(hjÑ›h]”hŒ void *addr”…”�”}”(hjÓ›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÏ›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MhjË›ubjÉ)�”}”(hhh]”jM)�”}”(hŒvmalloc memory”h]”hŒvmalloc memory”…”�”}”(hjê›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jæ›h´Mhjç›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjË›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jæ›h´Mhj�›ubj©)�”}”(hŒK``unsigned long pgoff`` number of pages into addr before first page to map ”h]”(j¯)�”}”(hŒ``unsigned long pgoff``”h]”jS)�”}”(hj œh]”hŒunsigned long pgoff”…”�”}”(hj œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjœubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´MhjœubjÉ)�”}”(hhh]”jM)�”}”(hŒ2number of pages into addr before first page to map”h]”hŒ2number of pages into addr before first page to map”…”�”}”(hj#œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jœh´Mhj œubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjœubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jœh´Mhj�›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjs›ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mhjs›ubjM)�”}”(hŒ0 for success, -Exxx on failure”h]”hŒ0 for success, -Exxx on failure”…”�”}”(hj[œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mhjs›ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mhjs›ubjM)�”}”(hŒ–This function checks that addr is a valid vmalloc'ed area, and that it is big enough to cover the vma. Will return failure if that criteria isn't met.”h]”hŒšThis function checks that addr is a valid vmalloc’ed area, and that it is big enough to cover the vma. Will return failure if that criteria isn’t met.”…”�”}”(hj‚œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´Mhjs›ubjM)�”}”(hŒ.Similar to remap_pfn_range() (see mm/memory.c)”h]”hŒ.Similar to remap_pfn_range() (see mm/memory.c)”…”�”}”(hj‘œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:52: ./mm/vmalloc.c”h´M hjs›ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjrh²hh³Nh´Nubeh}”(h]”Œvirtually-contiguous-mappings”ah ]”h"]”Œvirtually contiguous mappings”ah$]”h&]”uh1hµhh·h²hh³hÊh´K2ubh¶)�”}”(hhh]”(h»)�”}”(hŒFile Mapping and Page Cache”h]”hŒFile Mapping and Page Cache”…”�”}”(hj²œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj¯œh²hh³hÊh´K8ubh¶)�”}”(hhh]”(h»)�”}”(hŒFilemap”h]”hŒFilemap”…”�”}”(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”]”(héŒ%filemap_fdatawrite_range (C function)”Œc.filemap_fdatawrite_range”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒVint filemap_fdatawrite_range (struct address_space *mapping, loff_t start, loff_t end)”h]”hù)�”}”(hŒUint filemap_fdatawrite_range(struct address_space *mapping, loff_t start, loff_t end)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjêœh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjæœh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MŒubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùœh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjæœh²hh³jøœh´MŒubhÿ)�”}”(hŒfilemap_fdatawrite_range”h]”j)�”}”(hŒfilemap_fdatawrite_range”h]”hŒfilemap_fdatawrite_range”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjæœh²hh³jøœh´MŒubj )�”}”(hŒ9(struct address_space *mapping, loff_t start, loff_t end)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj'�h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj#�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj#�ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjE�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjB�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jG�Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj �sbŒc.filemap_fdatawrite_range”†”asbuh1hhj#�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hje�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj#�ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjs�h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj#�ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj€�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj#�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj�ubj )�”}”(hŒ loff_t start”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjœ�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jž�Œmodname”NŒ classname”Njpjs)�”}”jv]”ja�Œc.filemap_fdatawrite_range”†”asbuh1hhj•�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjº�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj•�ubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjÈ�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj•�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj�ubj )�”}”(hŒ loff_t end”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjä�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjá�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jæ�Œmodname”NŒ classname”Njpjs)�”}”jv]”ja�Œc.filemap_fdatawrite_range”†”asbuh1hhjÝ�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÝ�ubj)�”}”(hŒend”h]”hŒend”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÝ�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj�ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjæœh²hh³jøœh´MŒubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjâœh²hh³jøœh´MŒubah}”(h]”jÝœah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jøœh´MŒhjßœh²hubj4)�”}”(hhh]”jM)�”}”(hŒ/start writeback on mapping dirty pages in range”h]”hŒ/start writeback on mapping dirty pages in range”…”�”}”(hj:žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MŒhj7žh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjßœh²hh³jøœh´MŒubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjRžjHjRžjI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hXã**Parameters** ``struct address_space *mapping`` address space structure to write ``loff_t start`` offset in bytes where the range starts ``loff_t end`` offset in bytes where the range ends (inclusive) **Description** Start writeback against all of a mapping's dirty pages that lie within the byte offsets inclusive. This is a data integrity operation that waits upon dirty or in writeback pages. **Return** ``0`` on success, negative error code otherwise.”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M�hjVžubj¤)�”}”(hhh]”(j©)�”}”(hŒC``struct address_space *mapping`` address space structure to write ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj{žh]”hŒstruct address_space *mapping”…”�”}”(hj}žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjyžubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M�hjužubjÉ)�”}”(hhh]”jM)�”}”(hŒ address space structure to write”h]”hŒ address space structure to write”…”�”}”(hj”žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�žh´M�hj‘žubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjužubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�žh´M�hjržubj©)�”}”(hŒ8``loff_t start`` offset in bytes where the range starts ”h]”(j¯)�”}”(hŒ``loff_t start``”h]”jS)�”}”(hj´žh]”hŒ loff_t start”…”�”}”(hj¶žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj²žubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MŽhj®žubjÉ)�”}”(hhh]”jM)�”}”(hŒ&offset in bytes where the range starts”h]”hŒ&offset in bytes where the range starts”…”�”}”(hjÍžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÉžh´MŽhjÊžubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj®žubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÉžh´MŽhjržubj©)�”}”(hŒ@``loff_t end`` offset in bytes where the range ends (inclusive) ”h]”(j¯)�”}”(hŒ``loff_t end``”h]”jS)�”}”(hjížh]”hŒ loff_t end”…”�”}”(hjïžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjëžubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M�hjçžubjÉ)�”}”(hhh]”jM)�”}”(hŒ0offset in bytes where the range ends (inclusive)”h]”hŒ0offset in bytes where the range ends (inclusive)”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jŸh´M�hjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjçžubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŸh´M�hjržubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjVžubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj(Ÿh]”hŒ Description”…”�”}”(hj*Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj&Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M‘hjVžubjM)�”}”(hŒoStart writeback against all of a mapping's dirty pages that lie within the byte offsets inclusive.”h]”hŒqStart writeback against all of a mapping’s dirty pages that lie within the byte offsets inclusive.”…”�”}”(hj>Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M�hjVžubjM)�”}”(hŒOThis is a data integrity operation that waits upon dirty or in writeback pages.”h]”hŒOThis is a data integrity operation that waits upon dirty or in writeback pages.”…”�”}”(hjMŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M“hjVžubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M–hjVžubjM)�”}”(hŒ0``0`` on success, negative error code otherwise.”h]”(jS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hjxŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjtŸubhŒ+ on success, negative error code otherwise.”…”�”}”(hjtŸh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M—hjVžubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÀœh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ filemap_flush_range (C function)”Œc.filemap_flush_range”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒQint filemap_flush_range (struct address_space *mapping, loff_t start, loff_t end)”h]”hù)�”}”(hŒPint filemap_flush_range(struct address_space *mapping, loff_t start, loff_t end)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj±Ÿh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj­Ÿh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M§ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀŸh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj­Ÿh²hh³j¿Ÿh´M§ubhÿ)�”}”(hŒfilemap_flush_range”h]”j)�”}”(hŒfilemap_flush_range”h]”hŒfilemap_flush_range”…”�”}”(hjÒŸh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjΟubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj­Ÿh²hh³j¿Ÿh´M§ubj )�”}”(hŒ9(struct address_space *mapping, loff_t start, loff_t end)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjîŸh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjêŸubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûŸh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjêŸubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj  h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj  ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÔŸsbŒc.filemap_flush_range”†”asbuh1hhjêŸubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj, h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjêŸubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj: h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjêŸubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjG h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjêŸubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjæŸubj )�”}”(hŒ loff_t start”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjc h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj` ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”je Œmodname”NŒ classname”Njpjs)�”}”jv]”j( Œc.filemap_flush_range”†”asbuh1hhj\ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj\ ubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj\ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjæŸubj )�”}”(hŒ loff_t end”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj« h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¨ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j­ Œmodname”NŒ classname”Njpjs)�”}”jv]”j( Œc.filemap_flush_range”†”asbuh1hhj¤ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉ h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¤ ubj)�”}”(hŒend”h]”hŒend”…”�”}”(hj× h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjæŸubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj­Ÿh²hh³j¿Ÿh´M§ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj©Ÿh²hh³j¿Ÿh´M§ubah}”(h]”j¤Ÿah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¿Ÿh´M§hj¦Ÿh²hubj4)�”}”(hhh]”jM)�”}”(hŒstart writeback on a range”h]”hŒstart writeback on a range”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M§hjþ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¦Ÿh²hh³j¿Ÿh´M§ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¡jHj¡jI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hX_**Parameters** ``struct address_space *mapping`` target address_space ``loff_t start`` index to start writeback on ``loff_t end`` last (inclusive) index for writeback **Description** This is a non-integrity writeback helper, to start writing back folios for the indicated range. **Return** ``0`` on success, negative error code otherwise.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj#¡h]”hŒ Parameters”…”�”}”(hj%¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj!¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M«hj¡ubj¤)�”}”(hhh]”(j©)�”}”(hŒ7``struct address_space *mapping`` target address_space ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjB¡h]”hŒstruct address_space *mapping”…”�”}”(hjD¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj@¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M¨hj<¡ubjÉ)�”}”(hhh]”jM)�”}”(hŒtarget address_space”h]”hŒtarget address_space”…”�”}”(hj[¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jW¡h´M¨hjX¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj<¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jW¡h´M¨hj9¡ubj©)�”}”(hŒ-``loff_t start`` index to start writeback on ”h]”(j¯)�”}”(hŒ``loff_t start``”h]”jS)�”}”(hj{¡h]”hŒ loff_t start”…”�”}”(hj}¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjy¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M©hju¡ubjÉ)�”}”(hhh]”jM)�”}”(hŒindex to start writeback on”h]”hŒindex to start writeback on”…”�”}”(hj”¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�¡h´M©hj‘¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhju¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�¡h´M©hj9¡ubj©)�”}”(hŒ4``loff_t end`` last (inclusive) index for writeback ”h]”(j¯)�”}”(hŒ``loff_t end``”h]”jS)�”}”(hj´¡h]”hŒ loff_t end”…”�”}”(hj¶¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj²¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mªhj®¡ubjÉ)�”}”(hhh]”jM)�”}”(hŒ$last (inclusive) index for writeback”h]”hŒ$last (inclusive) index for writeback”…”�”}”(hjÍ¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÉ¡h´MªhjÊ¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj®¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÉ¡h´Mªhj9¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¡ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjï¡h]”hŒ Description”…”�”}”(hjñ¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjí¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M¬hj¡ubjM)�”}”(hŒ_This is a non-integrity writeback helper, to start writing back folios for the indicated range.”h]”hŒ_This is a non-integrity writeback helper, to start writing back folios for the indicated range.”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M«hj¡ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M®hj¡ubjM)�”}”(hŒ0``0`` on success, negative error code otherwise.”h]”(jS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hj0¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj,¢ubhŒ+ on success, negative error code otherwise.”…”�”}”(hj,¢h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.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”]”(héŒfilemap_flush (C function)”Œc.filemap_flush”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ1int filemap_flush (struct address_space *mapping)”h]”hù)�”}”(hŒ0int filemap_flush(struct address_space *mapping)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hji¢h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hje¢h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M¹ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjx¢h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhje¢h²hh³jw¢h´M¹ubhÿ)�”}”(hŒ filemap_flush”h]”j)�”}”(hŒ filemap_flush”h]”hŒ filemap_flush”…”�”}”(hjŠ¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj†¢ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhje¢h²hh³jw¢h´M¹ubj )�”}”(hŒ(struct address_space *mapping)”h]”j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¦¢h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¢¢ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³¢h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¢¢ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjÄ¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÁ¢ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÆ¢Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljŒ¢sbŒc.filemap_flush”†”asbuh1hhj¢¢ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjä¢h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¢¢ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjò¢h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¢¢ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjÿ¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¢¢ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjž¢ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hje¢h²hh³jw¢h´M¹ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hja¢h²hh³jw¢h´M¹ubah}”(h]”j\¢ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jw¢h´M¹hj^¢h²hubj4)�”}”(hhh]”jM)�”}”(hŒmostly a non-blocking flush”h]”hŒmostly a non-blocking flush”…”�”}”(hj)£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M¹hj&£h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj^¢h²hh³jw¢h´M¹ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjA£jHjA£jI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hX**Parameters** ``struct address_space *mapping`` target address_space **Description** This is a mostly non-blocking flush. Not suitable for data-integrity purposes - I/O may not be started against all dirty pages. **Return** ``0`` on success, negative error code otherwise.”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M½hjE£ubj¤)�”}”(hhh]”j©)�”}”(hŒ7``struct address_space *mapping`` target address_space ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjj£h]”hŒstruct address_space *mapping”…”�”}”(hjl£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjh£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mºhjd£ubjÉ)�”}”(hhh]”jM)�”}”(hŒtarget address_space”h]”hŒtarget address_space”…”�”}”(hjƒ£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j£h´Mºhj€£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjd£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j£h´Mºhja£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjE£ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj¥£h]”hŒ Description”…”�”}”(hj§£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj££ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M¼hjE£ubjM)�”}”(hŒ€This is a mostly non-blocking flush. Not suitable for data-integrity purposes - I/O may not be started against all dirty pages.”h]”hŒ€This is a mostly non-blocking flush. Not suitable for data-integrity purposes - I/O may not be started against all dirty pages.”…”�”}”(hj»£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M»hjE£ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M¾hjE£ubjM)�”}”(hŒ0``0`` on success, negative error code otherwise.”h]”(jS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hjæ£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjâ£ubhŒ+ on success, negative error code otherwise.”…”�”}”(hjâ£h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.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”]”(héŒ#filemap_range_has_page (C function)”Œc.filemap_range_has_page”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ_bool filemap_range_has_page (struct address_space *mapping, loff_t start_byte, loff_t end_byte)”h]”hù)�”}”(hŒ^bool filemap_range_has_page(struct address_space *mapping, loff_t start_byte, loff_t end_byte)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¤h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÔubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-¤h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¤h²hh³j,¤h´MÔubhÿ)�”}”(hŒfilemap_range_has_page”h]”j)�”}”(hŒfilemap_range_has_page”h]”hŒfilemap_range_has_page”…”�”}”(hj?¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj;¤ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¤h²hh³j,¤h´MÔubj )�”}”(hŒC(struct address_space *mapping, loff_t start_byte, loff_t end_byte)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj[¤h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjW¤ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh¤h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjW¤ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjy¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjv¤ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j{¤Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljA¤sbŒc.filemap_range_has_page”†”asbuh1hhjW¤ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™¤h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjW¤ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj§¤h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjW¤ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj´¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjW¤ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjS¤ubj )�”}”(hŒloff_t start_byte”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjФh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjͤubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÒ¤Œmodname”NŒ classname”Njpjs)�”}”jv]”j•¤Œc.filemap_range_has_page”†”asbuh1hhjɤubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî¤h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjɤubj)�”}”(hŒ start_byte”h]”hŒ start_byte”…”�”}”(hjü¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjɤubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjS¤ubj )�”}”(hŒloff_t end_byte”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¥ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¥Œmodname”NŒ classname”Njpjs)�”}”jv]”j•¤Œc.filemap_range_has_page”†”asbuh1hhj¥ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6¥h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¥ubj)�”}”(hŒend_byte”h]”hŒend_byte”…”�”}”(hjD¥h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjS¤ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¤h²hh³j,¤h´MÔubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¤h²hh³j,¤h´MÔubah}”(h]”j¤ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j,¤h´MÔhj¤h²hubj4)�”}”(hhh]”jM)�”}”(hŒ check if a page exists in range.”h]”hŒ check if a page exists in range.”…”�”}”(hjn¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÔhjk¥h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¤h²hh³j,¤h´MÔubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj†¥jHj†¥jI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hXÎ**Parameters** ``struct address_space *mapping`` address space within which to check ``loff_t start_byte`` offset in bytes where the range starts ``loff_t end_byte`` offset in bytes where the range ends (inclusive) **Description** Find at least one page in the range supplied, usually used to check if direct writing in this range will trigger a writeback. **Return** ``true`` if at least one page exists in the specified range, ``false`` otherwise.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj�¥h]”hŒ Parameters”…”�”}”(hj’¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŽ¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MØhjŠ¥ubj¤)�”}”(hhh]”(j©)�”}”(hŒF``struct address_space *mapping`` address space within which to check ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj¯¥h]”hŒstruct address_space *mapping”…”�”}”(hj±¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj­¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÕhj©¥ubjÉ)�”}”(hhh]”jM)�”}”(hŒ#address space within which to check”h]”hŒ#address space within which to check”…”�”}”(hjÈ¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÄ¥h´MÕhjÅ¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj©¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÄ¥h´MÕhj¦¥ubj©)�”}”(hŒ=``loff_t start_byte`` offset in bytes where the range starts ”h]”(j¯)�”}”(hŒ``loff_t start_byte``”h]”jS)�”}”(hjè¥h]”hŒloff_t start_byte”…”�”}”(hjê¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjæ¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÖhjâ¥ubjÉ)�”}”(hhh]”jM)�”}”(hŒ&offset in bytes where the range starts”h]”hŒ&offset in bytes where the range starts”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jý¥h´MÖhjþ¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjâ¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jý¥h´MÖhj¦¥ubj©)�”}”(hŒE``loff_t end_byte`` offset in bytes where the range ends (inclusive) ”h]”(j¯)�”}”(hŒ``loff_t end_byte``”h]”jS)�”}”(hj!¦h]”hŒloff_t end_byte”…”�”}”(hj#¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M×hj¦ubjÉ)�”}”(hhh]”jM)�”}”(hŒ0offset in bytes where the range ends (inclusive)”h]”hŒ0offset in bytes where the range ends (inclusive)”…”�”}”(hj:¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j6¦h´M×hj7¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j6¦h´M×hj¦¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjŠ¥ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÙhjŠ¥ubjM)�”}”(hŒ}Find at least one page in the range supplied, usually used to check if direct writing in this range will trigger a writeback.”h]”hŒ}Find at least one page in the range supplied, usually used to check if direct writing in this range will trigger a writeback.”…”�”}”(hjr¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MØhjŠ¥ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÛhjŠ¥ubjM)�”}”(hŒQ``true`` if at least one page exists in the specified range, ``false`` otherwise.”h]”(jS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj�¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj™¦ubhŒ5 if at least one page exists in the specified range, ”…”�”}”(hj™¦h²hh³Nh´NubjS)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj¯¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj™¦ubhŒ otherwise.”…”�”}”(hj™¦h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.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”]”(héŒ$filemap_fdatawait_range (C function)”Œc.filemap_fdatawait_range”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ_int filemap_fdatawait_range (struct address_space *mapping, loff_t start_byte, loff_t end_byte)”h]”hù)�”}”(hŒ^int filemap_fdatawait_range(struct address_space *mapping, loff_t start_byte, loff_t end_byte)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjè¦h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjä¦h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷¦h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjä¦h²hh³jö¦h´Mubhÿ)�”}”(hŒfilemap_fdatawait_range”h]”j)�”}”(hŒfilemap_fdatawait_range”h]”hŒfilemap_fdatawait_range”…”�”}”(hj §h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj§ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjä¦h²hh³jö¦h´Mubj )�”}”(hŒC(struct address_space *mapping, loff_t start_byte, loff_t end_byte)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj%§h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj!§ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2§h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj!§ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjC§h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj@§ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jE§Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj §sbŒc.filemap_fdatawait_range”†”asbuh1hhj!§ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc§h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj!§ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjq§h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj!§ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj~§h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj!§ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj§ubj )�”}”(hŒloff_t start_byte”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjš§h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj—§ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jœ§Œmodname”NŒ classname”Njpjs)�”}”jv]”j_§Œc.filemap_fdatawait_range”†”asbuh1hhj“§ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸§h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj“§ubj)�”}”(hŒ start_byte”h]”hŒ start_byte”…”�”}”(hjƧh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj“§ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj§ubj )�”}”(hŒloff_t end_byte”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjâ§h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjß§ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jä§Œmodname”NŒ classname”Njpjs)�”}”jv]”j_§Œc.filemap_fdatawait_range”†”asbuh1hhjÛ§ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÛ§ubj)�”}”(hŒend_byte”h]”hŒend_byte”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÛ§ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj§ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjä¦h²hh³jö¦h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjà¦h²hh³jö¦h´Mubah}”(h]”jÛ¦ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jö¦h´Mhjݦh²hubj4)�”}”(hhh]”jM)�”}”(hŒwait for writeback to complete”h]”hŒwait for writeback to complete”…”�”}”(hj8¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mhj5¨h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjݦh²hh³jö¦h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjP¨jHjP¨jI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hXq**Parameters** ``struct address_space *mapping`` address space structure to wait for ``loff_t start_byte`` offset in bytes where the range starts ``loff_t end_byte`` offset in bytes where the range ends (inclusive) **Description** Walk the list of under-writeback pages of the given address space in the given range and wait for all of them. Check error status of the address space and return it. Since the error status of the address space is cleared by this function, callers are responsible for checking the return value and handling and/or reporting the error. **Return** error status of the address space.”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M hjT¨ubj¤)�”}”(hhh]”(j©)�”}”(hŒF``struct address_space *mapping`` address space structure to wait for ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjy¨h]”hŒstruct address_space *mapping”…”�”}”(hj{¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjw¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mhjs¨ubjÉ)�”}”(hhh]”jM)�”}”(hŒ#address space structure to wait for”h]”hŒ#address space structure to wait for”…”�”}”(hj’¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jލh´Mhj�¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjs¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jލh´Mhjp¨ubj©)�”}”(hŒ=``loff_t start_byte`` offset in bytes where the range starts ”h]”(j¯)�”}”(hŒ``loff_t start_byte``”h]”jS)�”}”(hj²¨h]”hŒloff_t start_byte”…”�”}”(hj´¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj°¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mhj¬¨ubjÉ)�”}”(hhh]”jM)�”}”(hŒ&offset in bytes where the range starts”h]”hŒ&offset in bytes where the range starts”…”�”}”(hj˨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jǨh´MhjȨubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¬¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jǨh´Mhjp¨ubj©)�”}”(hŒE``loff_t end_byte`` offset in bytes where the range ends (inclusive) ”h]”(j¯)�”}”(hŒ``loff_t end_byte``”h]”jS)�”}”(hjë¨h]”hŒloff_t end_byte”…”�”}”(hjí¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjé¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mhjå¨ubjÉ)�”}”(hhh]”jM)�”}”(hŒ0offset in bytes where the range ends (inclusive)”h]”hŒ0offset in bytes where the range ends (inclusive)”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j©h´Mhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjå¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j©h´Mhjp¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjT¨ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj&©h]”hŒ Description”…”�”}”(hj(©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj$©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M!hjT¨ubjM)�”}”(hŒ¦Walk the list of under-writeback pages of the given address space in the given range and wait for all of them. Check error status of the address space and return it.”h]”hŒ¦Walk the list of under-writeback pages of the given address space in the given range and wait for all of them. Check error status of the address space and return it.”…”�”}”(hj<©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M hjT¨ubjM)�”}”(hŒ§Since the error status of the address space is cleared by this function, callers are responsible for checking the return value and handling and/or reporting the error.”h]”hŒ§Since the error status of the address space is cleared by this function, callers are responsible for checking the return value and handling and/or reporting the error.”…”�”}”(hjK©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M$hjT¨ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M(hjT¨ubjM)�”}”(hŒ"error status of the address space.”h]”hŒ"error status of the address space.”…”�”}”(hjr©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.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”]”(héŒ0filemap_fdatawait_range_keep_errors (C function)”Œ%c.filemap_fdatawait_range_keep_errors”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒkint filemap_fdatawait_range_keep_errors (struct address_space *mapping, loff_t start_byte, loff_t end_byte)”h]”hù)�”}”(hŒjint filemap_fdatawait_range_keep_errors(struct address_space *mapping, loff_t start_byte, loff_t end_byte)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj¡©h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj�©h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M4ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°©h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�©h²hh³j¯©h´M4ubhÿ)�”}”(hŒ#filemap_fdatawait_range_keep_errors”h]”j)�”}”(hŒ#filemap_fdatawait_range_keep_errors”h]”hŒ#filemap_fdatawait_range_keep_errors”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾©ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj�©h²hh³j¯©h´M4ubj )�”}”(hŒC(struct address_space *mapping, loff_t start_byte, loff_t end_byte)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÞ©h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÚ©ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjë©h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÚ©ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjü©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjù©ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jþ©Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÄ©sbŒ%c.filemap_fdatawait_range_keep_errors”†”asbuh1hhjÚ©ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÚ©ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj*ªh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÚ©ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj7ªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÚ©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÖ©ubj )�”}”(hŒloff_t start_byte”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjSªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjPªubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jUªŒmodname”NŒ classname”Njpjs)�”}”jv]”jªŒ%c.filemap_fdatawait_range_keep_errors”†”asbuh1hhjLªubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqªh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjLªubj)�”}”(hŒ start_byte”h]”hŒ start_byte”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjLªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÖ©ubj )�”}”(hŒloff_t end_byte”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj›ªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj˜ªubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j�ªŒmodname”NŒ classname”Njpjs)�”}”jv]”jªŒ%c.filemap_fdatawait_range_keep_errors”†”asbuh1hhj”ªubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹ªh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj”ªubj)�”}”(hŒend_byte”h]”hŒend_byte”…”�”}”(hjǪh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj”ªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÖ©ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj�©h²hh³j¯©h´M4ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj™©h²hh³j¯©h´M4ubah}”(h]”j”©ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¯©h´M4hj–©h²hubj4)�”}”(hhh]”jM)�”}”(hŒwait for writeback to complete”h]”hŒwait for writeback to complete”…”�”}”(hjñªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M4hjîªh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj–©h²hh³j¯©h´M4ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj «jHj «jI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hXa**Parameters** ``struct address_space *mapping`` address space structure to wait for ``loff_t start_byte`` offset in bytes where the range starts ``loff_t end_byte`` offset in bytes where the range ends (inclusive) **Description** Walk the list of under-writeback pages of the given address space in the given range and wait for all of them. Unlike filemap_fdatawait_range(), this function does not clear error status of the address space. Use this function if callers don't handle errors themselves. Expected call sites are system-wide / filesystem-wide data flushers: e.g. sync(2), fsfreeze(8)”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj«h]”hŒ Parameters”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M8hj «ubj¤)�”}”(hhh]”(j©)�”}”(hŒF``struct address_space *mapping`` address space structure to wait for ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj2«h]”hŒstruct address_space *mapping”…”�”}”(hj4«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj0«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M5hj,«ubjÉ)�”}”(hhh]”jM)�”}”(hŒ#address space structure to wait for”h]”hŒ#address space structure to wait for”…”�”}”(hjK«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jG«h´M5hjH«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj,«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jG«h´M5hj)«ubj©)�”}”(hŒ=``loff_t start_byte`` offset in bytes where the range starts ”h]”(j¯)�”}”(hŒ``loff_t start_byte``”h]”jS)�”}”(hjk«h]”hŒloff_t start_byte”…”�”}”(hjm«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhji«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M6hje«ubjÉ)�”}”(hhh]”jM)�”}”(hŒ&offset in bytes where the range starts”h]”hŒ&offset in bytes where the range starts”…”�”}”(hj„«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j€«h´M6hj�«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhje«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j€«h´M6hj)«ubj©)�”}”(hŒE``loff_t end_byte`` offset in bytes where the range ends (inclusive) ”h]”(j¯)�”}”(hŒ``loff_t end_byte``”h]”jS)�”}”(hj¤«h]”hŒloff_t end_byte”…”�”}”(hj¦«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¢«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M7hjž«ubjÉ)�”}”(hhh]”jM)�”}”(hŒ0offset in bytes where the range ends (inclusive)”h]”hŒ0offset in bytes where the range ends (inclusive)”…”�”}”(hj½«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¹«h´M7hjº«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjž«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¹«h´M7hj)«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj «ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjß«h]”hŒ Description”…”�”}”(hjá«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÝ«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M9hj «ubjM)�”}”(hŒÑWalk the list of under-writeback pages of the given address space in the given range and wait for all of them. Unlike filemap_fdatawait_range(), this function does not clear error status of the address space.”h]”hŒÑWalk the list of under-writeback pages of the given address space in the given range and wait for all of them. Unlike filemap_fdatawait_range(), this function does not clear error status of the address space.”…”�”}”(hjõ«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M8hj «ubjM)�”}”(hŒœUse this function if callers don't handle errors themselves. Expected call sites are system-wide / filesystem-wide data flushers: e.g. sync(2), fsfreeze(8)”h]”hŒžUse this function if callers don’t handle errors themselves. Expected call sites are system-wide / filesystem-wide data flushers: e.g. sync(2), fsfreeze(8)”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.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”]”(héŒ!file_fdatawait_range (C function)”Œc.file_fdatawait_range”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒPint file_fdatawait_range (struct file *file, loff_t start_byte, loff_t end_byte)”h]”hù)�”}”(hŒOint file_fdatawait_range(struct file *file, loff_t start_byte, loff_t end_byte)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj3¬h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj/¬h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MJubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjB¬h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj/¬h²hh³jA¬h´MJubhÿ)�”}”(hŒfile_fdatawait_range”h]”j)�”}”(hŒfile_fdatawait_range”h]”hŒfile_fdatawait_range”…”�”}”(hjT¬h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjP¬ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj/¬h²hh³jA¬h´MJubj )�”}”(hŒ7(struct file *file, loff_t start_byte, loff_t end_byte)”h]”(j )�”}”(hŒstruct file *file”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjp¬h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjl¬ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}¬h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjl¬ubh)�”}”(hhh]”j)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjެh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‹¬ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j�¬Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljV¬sbŒc.file_fdatawait_range”†”asbuh1hhjl¬ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®¬h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjl¬ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¼¬h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjl¬ubj)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjɬh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjl¬ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjh¬ubj )�”}”(hŒloff_t start_byte”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjå¬h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjâ¬ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j笌modname”NŒ classname”Njpjs)�”}”jv]”jª¬Œc.file_fdatawait_range”†”asbuh1hhjÞ¬ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÞ¬ubj)�”}”(hŒ start_byte”h]”hŒ start_byte”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÞ¬ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjh¬ubj )�”}”(hŒloff_t end_byte”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj-­h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj*­ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j/­Œmodname”NŒ classname”Njpjs)�”}”jv]”jª¬Œc.file_fdatawait_range”†”asbuh1hhj&­ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjK­h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj&­ubj)�”}”(hŒend_byte”h]”hŒend_byte”…”�”}”(hjY­h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj&­ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjh¬ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj/¬h²hh³jA¬h´MJubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj+¬h²hh³jA¬h´MJubah}”(h]”j&¬ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jA¬h´MJhj(¬h²hubj4)�”}”(hhh]”jM)�”}”(hŒwait for writeback to complete”h]”hŒwait for writeback to complete”…”�”}”(hjƒ­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MJhj€­h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj(¬h²hh³jA¬h´MJubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj›­jHj›­jI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hX¹**Parameters** ``struct file *file`` file pointing to address space structure to wait for ``loff_t start_byte`` offset in bytes where the range starts ``loff_t end_byte`` offset in bytes where the range ends (inclusive) **Description** Walk the list of under-writeback pages of the address space that file refers to, in the given range and wait for all of them. Check error status of the address space vs. the file->f_wb_err cursor and return it. Since the error status of the file is advanced by this function, callers are responsible for checking the return value and handling and/or reporting the error. **Return** error status of the address space vs. the file->f_wb_err cursor.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¥­h]”hŒ Parameters”…”�”}”(hj§­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj£­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MNhjŸ­ubj¤)�”}”(hhh]”(j©)�”}”(hŒK``struct file *file`` file pointing to address space structure to wait for ”h]”(j¯)�”}”(hŒ``struct file *file``”h]”jS)�”}”(hjÄ­h]”hŒstruct file *file”…”�”}”(hjÆ­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MKhj¾­ubjÉ)�”}”(hhh]”jM)�”}”(hŒ4file pointing to address space structure to wait for”h]”hŒ4file pointing to address space structure to wait for”…”�”}”(hjÝ­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÙ­h´MKhjÚ­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¾­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÙ­h´MKhj»­ubj©)�”}”(hŒ=``loff_t start_byte`` offset in bytes where the range starts ”h]”(j¯)�”}”(hŒ``loff_t start_byte``”h]”jS)�”}”(hjý­h]”hŒloff_t start_byte”…”�”}”(hjÿ­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjû­ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MLhj÷­ubjÉ)�”}”(hhh]”jM)�”}”(hŒ&offset in bytes where the range starts”h]”hŒ&offset in bytes where the range starts”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j®h´MLhj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj÷­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j®h´MLhj»­ubj©)�”}”(hŒE``loff_t end_byte`` offset in bytes where the range ends (inclusive) ”h]”(j¯)�”}”(hŒ``loff_t end_byte``”h]”jS)�”}”(hj6®h]”hŒloff_t end_byte”…”�”}”(hj8®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj4®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MMhj0®ubjÉ)�”}”(hhh]”jM)�”}”(hŒ0offset in bytes where the range ends (inclusive)”h]”hŒ0offset in bytes where the range ends (inclusive)”…”�”}”(hjO®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jK®h´MMhjL®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj0®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jK®h´MMhj»­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjŸ­ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MOhjŸ­ubjM)�”}”(hŒÓWalk the list of under-writeback pages of the address space that file refers to, in the given range and wait for all of them. Check error status of the address space vs. the file->f_wb_err cursor and return it.”h]”hŒÓWalk the list of under-writeback pages of the address space that file refers to, in the given range and wait for all of them. Check error status of the address space vs. the file->f_wb_err cursor and return it.”…”�”}”(hj‡®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MNhjŸ­ubjM)�”}”(hŒŸSince the error status of the file is advanced by this function, callers are responsible for checking the return value and handling and/or reporting the error.”h]”hŒŸSince the error status of the file is advanced by this function, callers are responsible for checking the return value and handling and/or reporting the error.”…”�”}”(hj–®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MRhjŸ­ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MVhjŸ­ubjM)�”}”(hŒ@error status of the address space vs. the file->f_wb_err cursor.”h]”hŒ@error status of the address space vs. the file->f_wb_err cursor.”…”�”}”(hj½®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MWhjŸ­ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÀœh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ*filemap_fdatawait_keep_errors (C function)”Œc.filemap_fdatawait_keep_errors”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒAint filemap_fdatawait_keep_errors (struct address_space *mapping)”h]”hù)�”}”(hŒ@int filemap_fdatawait_keep_errors(struct address_space *mapping)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjì®h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjè®h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´McubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjû®h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjè®h²hh³jú®h´Mcubhÿ)�”}”(hŒfilemap_fdatawait_keep_errors”h]”j)�”}”(hŒfilemap_fdatawait_keep_errors”h]”hŒfilemap_fdatawait_keep_errors”…”�”}”(hj ¯h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ¯ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjè®h²hh³jú®h´Mcubj )�”}”(hŒ(struct address_space *mapping)”h]”j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj)¯h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj%¯ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6¯h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj%¯ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjG¯h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjD¯ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jI¯Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj¯sbŒc.filemap_fdatawait_keep_errors”†”asbuh1hhj%¯ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjg¯h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj%¯ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hju¯h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj%¯ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj‚¯h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj%¯ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj!¯ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjè®h²hh³jú®h´Mcubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjä®h²hh³jú®h´Mcubah}”(h]”jß®ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jú®h´Mchjá®h²hubj4)�”}”(hhh]”jM)�”}”(hŒ*wait for writeback without clearing errors”h]”hŒ*wait for writeback without clearing errors”…”�”}”(hj¬¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mchj©¯h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjá®h²hh³jú®h´Mcubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjįjHjįjI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hXð**Parameters** ``struct address_space *mapping`` address space structure to wait for **Description** Walk the list of under-writeback pages of the given address space and wait for all of them. Unlike filemap_fdatawait(), this function does not clear error status of the address space. Use this function if callers don't handle errors themselves. Expected call sites are system-wide / filesystem-wide data flushers: e.g. sync(2), fsfreeze(8) **Return** error status of the address space.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjίh]”hŒ Parameters”…”�”}”(hjЯh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj̯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mghjȯubj¤)�”}”(hhh]”j©)�”}”(hŒF``struct address_space *mapping`` address space structure to wait for ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjí¯h]”hŒstruct address_space *mapping”…”�”}”(hjï¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjë¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mdhjç¯ubjÉ)�”}”(hhh]”jM)�”}”(hŒ#address space structure to wait for”h]”hŒ#address space structure to wait for”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j°h´Mdhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjç¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j°h´Mdhjä¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjȯubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj(°h]”hŒ Description”…”�”}”(hj*°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj&°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MfhjȯubjM)�”}”(hŒ¸Walk the list of under-writeback pages of the given address space and wait for all of them. Unlike filemap_fdatawait(), this function does not clear error status of the address space.”h]”hŒ¸Walk the list of under-writeback pages of the given address space and wait for all of them. Unlike filemap_fdatawait(), this function does not clear error status of the address space.”…”�”}”(hj>°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jL•h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MehjȯubjM)�”}”(hŒœUse this function if callers don't handle errors themselves. Expected call sites are system-wide / filesystem-wide data flushers: e.g. sync(2), fsfreeze(8)”h]”hŒžUse this function if callers don’t handle errors themselves. Expected call sites are system-wide / filesystem-wide data flushers: e.g. sync(2), fsfreeze(8)”…”�”}”(hjM°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MihjȯubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MmhjȯubjM)�”}”(hŒ"error status of the address space.”h]”hŒ"error status of the address space.”…”�”}”(hjt°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mnhjȯubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÀœh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ)filemap_write_and_wait_range (C function)”Œc.filemap_write_and_wait_range”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ\int filemap_write_and_wait_range (struct address_space *mapping, loff_t lstart, loff_t lend)”h]”hù)�”}”(hŒ[int filemap_write_and_wait_range(struct address_space *mapping, loff_t lstart, loff_t lend)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj£°h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjŸ°h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M—ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²°h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŸ°h²hh³j±°h´M—ubhÿ)�”}”(hŒfilemap_write_and_wait_range”h]”j)�”}”(hŒfilemap_write_and_wait_range”h]”hŒfilemap_write_and_wait_range”…”�”}”(hjİh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÀ°ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjŸ°h²hh³j±°h´M—ubj )�”}”(hŒ;(struct address_space *mapping, loff_t lstart, loff_t lend)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjà°h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjܰubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí°h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjܰubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjþ°h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjû°ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j±Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljưsbŒc.filemap_write_and_wait_range”†”asbuh1hhjܰubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjܰubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj,±h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjܰubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj9±h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjܰubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjذubj )�”}”(hŒ loff_t lstart”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjU±h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjR±ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jW±Œmodname”NŒ classname”Njpjs)�”}”jv]”j±Œc.filemap_write_and_wait_range”†”asbuh1hhjN±ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs±h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjN±ubj)�”}”(hŒlstart”h]”hŒlstart”…”�”}”(hj�±h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjN±ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjذubj )�”}”(hŒ loff_t lend”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj�±h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjš±ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jŸ±Œmodname”NŒ classname”Njpjs)�”}”jv]”j±Œc.filemap_write_and_wait_range”†”asbuh1hhj–±ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»±h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj–±ubj)�”}”(hŒlend”h]”hŒlend”…”�”}”(hjɱh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj–±ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjذubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjŸ°h²hh³j±°h´M—ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj›°h²hh³j±°h´M—ubah}”(h]”j–°ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j±°h´M—hj˜°h²hubj4)�”}”(hhh]”jM)�”}”(hŒ write out & wait on a file range”h]”hŒ write out & wait on a file range”…”�”}”(hjó±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M—hjð±h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj˜°h²hh³j±°h´M—ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj ²jHj ²jI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hXë**Parameters** ``struct address_space *mapping`` the address_space for the pages ``loff_t lstart`` offset in bytes where the range starts ``loff_t lend`` offset in bytes where the range ends (inclusive) **Description** Write out and wait upon file offsets lstart->lend, inclusive. Note that **lend** is inclusive (describes the last byte to be written) so that this function can be used to write to the very end-of-file (end = -1). **Return** error status of the address space.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj²h]”hŒ Parameters”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M›hj²ubj¤)�”}”(hhh]”(j©)�”}”(hŒB``struct address_space *mapping`` the address_space for the pages ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj4²h]”hŒstruct address_space *mapping”…”�”}”(hj6²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj2²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M˜hj.²ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe address_space for the pages”h]”hŒthe address_space for the pages”…”�”}”(hjM²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jI²h´M˜hjJ²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj.²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jI²h´M˜hj+²ubj©)�”}”(hŒ9``loff_t lstart`` offset in bytes where the range starts ”h]”(j¯)�”}”(hŒ``loff_t lstart``”h]”jS)�”}”(hjm²h]”hŒ loff_t lstart”…”�”}”(hjo²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjk²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M™hjg²ubjÉ)�”}”(hhh]”jM)�”}”(hŒ&offset in bytes where the range starts”h]”hŒ&offset in bytes where the range starts”…”�”}”(hj†²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‚²h´M™hjƒ²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjg²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‚²h´M™hj+²ubj©)�”}”(hŒA``loff_t lend`` offset in bytes where the range ends (inclusive) ”h]”(j¯)�”}”(hŒ``loff_t lend``”h]”jS)�”}”(hj¦²h]”hŒ loff_t lend”…”�”}”(hj¨²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¤²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mšhj ²ubjÉ)�”}”(hhh]”jM)�”}”(hŒ0offset in bytes where the range ends (inclusive)”h]”hŒ0offset in bytes where the range ends (inclusive)”…”�”}”(hj¿²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j»²h´Mšhj¼²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j»²h´Mšhj+²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj²ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjá²h]”hŒ Description”…”�”}”(hjã²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjß²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mœhj²ubjM)�”}”(hŒ=Write out and wait upon file offsets lstart->lend, inclusive.”h]”hŒ=Write out and wait upon file offsets lstart->lend, inclusive.”…”�”}”(hj÷²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M›hj²ubjM)�”}”(hŒ–Note that **lend** is inclusive (describes the last byte to be written) so that this function can be used to write to the very end-of-file (end = -1).”h]”(hŒ Note that ”…”�”}”(hj³h²hh³Nh´NubjŽ)�”}”(hŒ**lend**”h]”hŒlend”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj³ubhŒ„ is inclusive (describes the last byte to be written) so that this function can be used to write to the very end-of-file (end = -1).”…”�”}”(hj³h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M�hj²ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M hj²ubjM)�”}”(hŒ"error status of the address space.”h]”hŒ"error status of the address space.”…”�”}”(hj?³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.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”]”(héŒ*file_check_and_advance_wb_err (C function)”Œc.file_check_and_advance_wb_err”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ5int file_check_and_advance_wb_err (struct file *file)”h]”hù)�”}”(hŒ4int file_check_and_advance_wb_err(struct file *file)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjn³h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjj³h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÆubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}³h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjj³h²hh³j|³h´MÆubhÿ)�”}”(hŒfile_check_and_advance_wb_err”h]”j)�”}”(hŒfile_check_and_advance_wb_err”h]”hŒfile_check_and_advance_wb_err”…”�”}”(hj�³h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‹³ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjj³h²hh³j|³h´MÆubj )�”}”(hŒ(struct file *file)”h]”j )�”}”(hŒstruct file *file”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj«³h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj§³ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸³h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj§³ubh)�”}”(hhh]”j)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjɳh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjƳubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j˳Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj‘³sbŒc.file_check_and_advance_wb_err”†”asbuh1hhj§³ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé³h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj§³ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj÷³h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj§³ubj)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj§³ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj£³ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjj³h²hh³j|³h´MÆubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjf³h²hh³j|³h´MÆubah}”(h]”ja³ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j|³h´MÆhjc³h²hubj4)�”}”(hhh]”jM)�”}”(hŒNreport wb error (if any) that was previously and advance wb_err to current one”h]”hŒNreport wb error (if any) that was previously and advance wb_err to current one”…”�”}”(hj.´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÆhj+´h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjc³h²hh³j|³h´MÆubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjF´jHjF´jI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hX**Parameters** ``struct file *file`` struct file on which the error is being reported **Description** When userland calls fsync (or something like nfsd does the equivalent), we want to report any writeback errors that occurred since the last fsync (or since the file was opened if there haven't been any). Grab the wb_err from the mapping. If it matches what we have in the file, then just quickly return 0. The file is all caught up. If it doesn't match, then take the mapping value, set the "seen" flag in it and try to swap it into place. If it works, or another task beat us to it with the new value, then update the f_wb_err and return the error portion. The error at this point must be reported via proper channels (a'la fsync, or NFS COMMIT operation, etc.). While we handle mapping->wb_err with atomic operations, the f_wb_err value is protected by the f_lock since we must ensure that it reflects the latest value swapped in for this file descriptor. **Return** ``0`` on success, negative error code otherwise.”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÊhjJ´ubj¤)�”}”(hhh]”j©)�”}”(hŒG``struct file *file`` struct file on which the error is being reported ”h]”(j¯)�”}”(hŒ``struct file *file``”h]”jS)�”}”(hjo´h]”hŒstruct file *file”…”�”}”(hjq´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjm´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÈhji´ubjÉ)�”}”(hhh]”jM)�”}”(hŒ0struct file on which the error is being reported”h]”hŒ0struct file on which the error is being reported”…”�”}”(hjˆ´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j„´h´MÈhj…´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhji´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j„´h´MÈhjf´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjJ´ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjª´h]”hŒ Description”…”�”}”(hj¬´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¨´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÊhjJ´ubjM)�”}”(hŒËWhen userland calls fsync (or something like nfsd does the equivalent), we want to report any writeback errors that occurred since the last fsync (or since the file was opened if there haven't been any).”h]”hŒÍWhen userland calls fsync (or something like nfsd does the equivalent), we want to report any writeback errors that occurred since the last fsync (or since the file was opened if there haven’t been any).”…”�”}”(hjÀ´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÉhjJ´ubjM)�”}”(hŒ€Grab the wb_err from the mapping. If it matches what we have in the file, then just quickly return 0. The file is all caught up.”h]”hŒ€Grab the wb_err from the mapping. If it matches what we have in the file, then just quickly return 0. The file is all caught up.”…”�”}”(hjÏ´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÍhjJ´ubjM)�”}”(hXJIf it doesn't match, then take the mapping value, set the "seen" flag in it and try to swap it into place. If it works, or another task beat us to it with the new value, then update the f_wb_err and return the error portion. The error at this point must be reported via proper channels (a'la fsync, or NFS COMMIT operation, etc.).”h]”hXRIf it doesn’t match, then take the mapping value, set the “seenâ€� flag in it and try to swap it into place. If it works, or another task beat us to it with the new value, then update the f_wb_err and return the error portion. The error at this point must be reported via proper channels (a’la fsync, or NFS COMMIT operation, etc.).”…”�”}”(hjÞ´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÐhjJ´ubjM)�”}”(hŒÁWhile we handle mapping->wb_err with atomic operations, the f_wb_err value is protected by the f_lock since we must ensure that it reflects the latest value swapped in for this file descriptor.”h]”hŒÁWhile we handle mapping->wb_err with atomic operations, the f_wb_err value is protected by the f_lock since we must ensure that it reflects the latest value swapped in for this file descriptor.”…”�”}”(hjí´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÖhjJ´ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÚhjJ´ubjM)�”}”(hŒ0``0`` on success, negative error code otherwise.”h]”(jS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjµubhŒ+ on success, negative error code otherwise.”…”�”}”(hjµh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÛhjJ´ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÀœh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ&file_write_and_wait_range (C function)”Œc.file_write_and_wait_range”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒMint file_write_and_wait_range (struct file *file, loff_t lstart, loff_t lend)”h]”hù)�”}”(hŒLint file_write_and_wait_range(struct file *file, loff_t lstart, loff_t lend)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjQµh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjMµh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MúubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`µh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjMµh²hh³j_µh´Múubhÿ)�”}”(hŒfile_write_and_wait_range”h]”j)�”}”(hŒfile_write_and_wait_range”h]”hŒfile_write_and_wait_range”…”�”}”(hjrµh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjnµubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjMµh²hh³j_µh´Múubj )�”}”(hŒ/(struct file *file, loff_t lstart, loff_t lend)”h]”(j )�”}”(hŒstruct file *file”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj޵h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjеubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›µh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjеubh)�”}”(hhh]”j)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj¬µh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj©µubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j®µŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljtµsbŒc.file_write_and_wait_range”†”asbuh1hhjеubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj̵h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjеubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÚµh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjеubj)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjçµh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjеubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj†µubj )�”}”(hŒ loff_t lstart”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¶ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¶Œmodname”NŒ classname”Njpjs)�”}”jv]”jȵŒc.file_write_and_wait_range”†”asbuh1hhjüµubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!¶h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjüµubj)�”}”(hŒlstart”h]”hŒlstart”…”�”}”(hj/¶h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjüµubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj†µubj )�”}”(hŒ loff_t lend”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjK¶h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjH¶ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jM¶Œmodname”NŒ classname”Njpjs)�”}”jv]”jȵŒc.file_write_and_wait_range”†”asbuh1hhjD¶ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hji¶h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjD¶ubj)�”}”(hŒlend”h]”hŒlend”…”�”}”(hjw¶h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjD¶ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj†µubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjMµh²hh³j_µh´Múubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjIµh²hh³j_µh´Múubah}”(h]”jDµah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j_µh´MúhjFµh²hubj4)�”}”(hhh]”jM)�”}”(hŒ write out & wait on a file range”h]”hŒ write out & wait on a file range”…”�”}”(hj¡¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Múhjž¶h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjFµh²hh³j_µh´Múubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¹¶jHj¹¶jI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hX‡**Parameters** ``struct file *file`` file pointing to address_space with pages ``loff_t lstart`` offset in bytes where the range starts ``loff_t lend`` offset in bytes where the range ends (inclusive) **Description** Write out and wait upon file offsets lstart->lend, inclusive. Note that **lend** is inclusive (describes the last byte to be written) so that this function can be used to write to the very end-of-file (end = -1). After writing out and waiting on the data, we check and advance the f_wb_err cursor to the latest value, and return any errors detected there. **Return** ``0`` on success, negative error code otherwise.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjöh]”hŒ Parameters”…”�”}”(hjŶh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÁ¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mþhj½¶ubj¤)�”}”(hhh]”(j©)�”}”(hŒ@``struct file *file`` file pointing to address_space with pages ”h]”(j¯)�”}”(hŒ``struct file *file``”h]”jS)�”}”(hjâ¶h]”hŒstruct file *file”…”�”}”(hjä¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjà¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MûhjܶubjÉ)�”}”(hhh]”jM)�”}”(hŒ)file pointing to address_space with pages”h]”hŒ)file pointing to address_space with pages”…”�”}”(hjû¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j÷¶h´Mûhjø¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjܶubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j÷¶h´MûhjÙ¶ubj©)�”}”(hŒ9``loff_t lstart`` offset in bytes where the range starts ”h]”(j¯)�”}”(hŒ``loff_t lstart``”h]”jS)�”}”(hj·h]”hŒ loff_t lstart”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mühj·ubjÉ)�”}”(hhh]”jM)�”}”(hŒ&offset in bytes where the range starts”h]”hŒ&offset in bytes where the range starts”…”�”}”(hj4·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j0·h´Mühj1·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j0·h´MühjÙ¶ubj©)�”}”(hŒA``loff_t lend`` offset in bytes where the range ends (inclusive) ”h]”(j¯)�”}”(hŒ``loff_t lend``”h]”jS)�”}”(hjT·h]”hŒ loff_t lend”…”�”}”(hjV·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjR·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MýhjN·ubjÉ)�”}”(hhh]”jM)�”}”(hŒ0offset in bytes where the range ends (inclusive)”h]”hŒ0offset in bytes where the range ends (inclusive)”…”�”}”(hjm·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ji·h´Mýhjj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjN·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³ji·h´MýhjÙ¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj½¶ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj�·h]”hŒ Description”…”�”}”(hj‘·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mÿhj½¶ubjM)�”}”(hŒ=Write out and wait upon file offsets lstart->lend, inclusive.”h]”hŒ=Write out and wait upon file offsets lstart->lend, inclusive.”…”�”}”(hj¥·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mþhj½¶ubjM)�”}”(hŒ–Note that **lend** is inclusive (describes the last byte to be written) so that this function can be used to write to the very end-of-file (end = -1).”h]”(hŒ Note that ”…”�”}”(hj´·h²hh³Nh´NubjŽ)�”}”(hŒ**lend**”h]”hŒlend”…”�”}”(hj¼·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj´·ubhŒ„ is inclusive (describes the last byte to be written) so that this function can be used to write to the very end-of-file (end = -1).”…”�”}”(hj´·h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mhj½¶ubjM)�”}”(hŒŽAfter writing out and waiting on the data, we check and advance the f_wb_err cursor to the latest value, and return any errors detected there.”h]”hŒŽAfter writing out and waiting on the data, we check and advance the f_wb_err cursor to the latest value, and return any errors detected there.”…”�”}”(hjÕ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mhj½¶ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mhj½¶ubjM)�”}”(hŒ0``0`` on success, negative error code otherwise.”h]”(jS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjü·ubhŒ+ on success, negative error code otherwise.”…”�”}”(hjü·h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mhj½¶ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÀœh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%replace_page_cache_folio (C function)”Œc.replace_page_cache_folio”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒDvoid replace_page_cache_folio (struct folio *old, struct folio *new)”h]”hù)�”}”(hŒCvoid replace_page_cache_folio(struct folio *old, struct folio *new)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj9¸h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj5¸h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjH¸h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj5¸h²hh³jG¸h´Mubhÿ)�”}”(hŒreplace_page_cache_folio”h]”j)�”}”(hŒreplace_page_cache_folio”h]”hŒreplace_page_cache_folio”…”�”}”(hjZ¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjV¸ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj5¸h²hh³jG¸h´Mubj )�”}”(hŒ&(struct folio *old, struct folio *new)”h]”(j )�”}”(hŒstruct folio *old”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjv¸h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjr¸ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒ¸h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjr¸ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj”¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‘¸ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j–¸Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj\¸sbŒc.replace_page_cache_folio”†”asbuh1hhjr¸ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´¸h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjr¸ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjr¸ubj)�”}”(hŒold”h]”hŒold”…”�”}”(hjϸh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjr¸ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjn¸ubj )�”}”(hŒstruct folio *new”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjè¸h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjä¸ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõ¸h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjä¸ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¹ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¹Œmodname”NŒ classname”Njpjs)�”}”jv]”j°¸Œc.replace_page_cache_folio”†”asbuh1hhjä¸ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$¹h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjä¸ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj2¹h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjä¸ubj)�”}”(hŒnew”h]”hŒnew”…”�”}”(hj?¹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjä¸ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjn¸ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj5¸h²hh³jG¸h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj1¸h²hh³jG¸h´Mubah}”(h]”j,¸ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jG¸h´Mhj.¸h²hubj4)�”}”(hhh]”jM)�”}”(hŒ(replace a pagecache folio with a new one”h]”hŒ(replace a pagecache folio with a new one”…”�”}”(hji¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mhjf¹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj.¸h²hh³jG¸h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj�¹jHj�¹jI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hXÔ**Parameters** ``struct folio *old`` folio to be replaced ``struct folio *new`` folio to replace with **Description** This function replaces a folio in the pagecache with a new one. On success it acquires the pagecache reference for the new folio and drops it for the old folio. Both the old and new folios must be locked. This function does not add the new folio to the LRU, the caller must do that. The remove + add is atomic. This function cannot fail.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj‹¹h]”hŒ Parameters”…”�”}”(hj�¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‰¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M#hj…¹ubj¤)�”}”(hhh]”(j©)�”}”(hŒ+``struct folio *old`` folio to be replaced ”h]”(j¯)�”}”(hŒ``struct folio *old``”h]”jS)�”}”(hjª¹h]”hŒstruct folio *old”…”�”}”(hj¬¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¨¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M hj¤¹ubjÉ)�”}”(hhh]”jM)�”}”(hŒfolio to be replaced”h]”hŒfolio to be replaced”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¿¹h´M hjÀ¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¤¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¿¹h´M hj¡¹ubj©)�”}”(hŒ,``struct folio *new`` folio to replace with ”h]”(j¯)�”}”(hŒ``struct folio *new``”h]”jS)�”}”(hjã¹h]”hŒstruct folio *new”…”�”}”(hjå¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjá¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M!hjݹubjÉ)�”}”(hhh]”jM)�”}”(hŒfolio to replace with”h]”hŒfolio to replace with”…”�”}”(hjü¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jø¹h´M!hjù¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjݹubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jø¹h´M!hj¡¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj…¹ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjºh]”hŒ Description”…”�”}”(hj ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjºubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M#hj…¹ubjM)�”}”(hXThis function replaces a folio in the pagecache with a new one. On success it acquires the pagecache reference for the new folio and drops it for the old folio. Both the old and new folios must be locked. This function does not add the new folio to the LRU, the caller must do that.”h]”hXThis function replaces a folio in the pagecache with a new one. On success it acquires the pagecache reference for the new folio and drops it for the old folio. Both the old and new folios must be locked. This function does not add the new folio to the LRU, the caller must do that.”…”�”}”(hj4ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M"hj…¹ubjM)�”}”(hŒ7The remove + add is atomic. This function cannot fail.”h]”hŒ7The remove + add is atomic. This function cannot fail.”…”�”}”(hjCºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.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”]”(héŒfolio_unlock (C function)”Œc.folio_unlock”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ'void folio_unlock (struct folio *folio)”h]”hù)�”}”(hŒ&void folio_unlock(struct folio *folio)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjrºh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjnºh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÞubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�ºh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjnºh²hh³j€ºh´MÞubhÿ)�”}”(hŒ folio_unlock”h]”j)�”}”(hŒ folio_unlock”h]”hŒ folio_unlock”…”�”}”(hj“ºh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ºubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjnºh²hh³j€ºh´MÞubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¯ºh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj«ºubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼ºh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj«ºubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjͺh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjʺubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jϺŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj•ºsbŒc.folio_unlock”†”asbuh1hhj«ºubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíºh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj«ºubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjûºh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj«ºubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj«ºubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj§ºubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjnºh²hh³j€ºh´MÞubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjjºh²hh³j€ºh´MÞubah}”(h]”jeºah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j€ºh´MÞhjgºh²hubj4)�”}”(hhh]”jM)�”}”(hŒUnlock a locked folio.”h]”hŒUnlock a locked folio.”…”�”}”(hj2»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÞhj/»h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjgºh²hh³j€ºh´MÞubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjJ»jHjJ»jI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hŒï**Parameters** ``struct folio *folio`` The folio. **Description** Unlocks the folio and wakes up any thread sleeping on the page lock. **Context** May be called from interrupt or process context. May not be called from NMI context.”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MâhjN»ubj¤)�”}”(hhh]”j©)�”}”(hŒ#``struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjs»h]”hŒstruct folio *folio”…”�”}”(hju»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjq»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mßhjm»ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hjŒ»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jˆ»h´Mßhj‰»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjm»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jˆ»h´Mßhjj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjN»ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj®»h]”hŒ Description”…”�”}”(hj°»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¬»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MáhjN»ubjM)�”}”(hŒDUnlocks the folio and wakes up any thread sleeping on the page lock.”h]”hŒDUnlocks the folio and wakes up any thread sleeping on the page lock.”…”�”}”(hjÄ»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MàhjN»ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MâhjN»ubjM)�”}”(hŒUMay be called from interrupt or process context. May not be called from NMI context.”h]”hŒUMay be called from interrupt or process context. May not be called from NMI context.”…”�”}”(hjë»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.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”]”(héŒfolio_end_read (C function)”Œc.folio_end_read”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ7void folio_end_read (struct folio *folio, bool success)”h]”hù)�”}”(hŒ6void folio_end_read(struct folio *folio, bool success)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¼h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MòubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)¼h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¼h²hh³j(¼h´Mòubhÿ)�”}”(hŒfolio_end_read”h]”j)�”}”(hŒfolio_end_read”h]”hŒfolio_end_read”…”�”}”(hj;¼h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7¼ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¼h²hh³j(¼h´Mòubj )�”}”(hŒ#(struct folio *folio, bool success)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjW¼h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjS¼ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjd¼h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjS¼ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hju¼h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjr¼ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jw¼Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj=¼sbŒc.folio_end_read”†”asbuh1hhjS¼ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•¼h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjS¼ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj£¼h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjS¼ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj°¼h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjS¼ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjO¼ubj )�”}”(hŒ bool success”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(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żubj)�”}”(hŒsuccess”h]”hŒsuccess”…”�”}”(hjä¼h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjżubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjO¼ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¼h²hh³j(¼h´Mòubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¼h²hh³j(¼h´Mòubah}”(h]”j ¼ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j(¼h´Mòhj¼h²hubj4)�”}”(hhh]”jM)�”}”(hŒEnd read on a folio.”h]”hŒEnd read on a folio.”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mòhj ½h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¼h²hh³j(¼h´Mòubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj&½jHj&½jI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hX**Parameters** ``struct folio *folio`` The folio. ``bool success`` True if all reads completed successfully. **Description** When all reads against a folio have completed, filesystems should call this function to let the pagecache know that no more reads are outstanding. This will unlock the folio and wake up any thread sleeping on the lock. The folio will also be marked uptodate if all reads succeeded. **Context** May be called from interrupt or process context. May not be called from NMI context.”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Möhj*½ubj¤)�”}”(hhh]”(j©)�”}”(hŒ#``struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjO½h]”hŒstruct folio *folio”…”�”}”(hjQ½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjM½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MóhjI½ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hjh½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jd½h´Móhje½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjI½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jd½h´MóhjF½ubj©)�”}”(hŒ;``bool success`` True if all reads completed successfully. ”h]”(j¯)�”}”(hŒ``bool success``”h]”jS)�”}”(hjˆ½h]”hŒ bool success”…”�”}”(hjнh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj†½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Môhj‚½ubjÉ)�”}”(hhh]”jM)�”}”(hŒ)True if all reads completed successfully.”h]”hŒ)True if all reads completed successfully.”…”�”}”(hj¡½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�½h´Môhjž½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‚½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�½h´MôhjF½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj*½ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjýh]”hŒ Description”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÁ½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Möhj*½ubjM)�”}”(hXWhen all reads against a folio have completed, filesystems should call this function to let the pagecache know that no more reads are outstanding. This will unlock the folio and wake up any thread sleeping on the lock. The folio will also be marked uptodate if all reads succeeded.”h]”hXWhen all reads against a folio have completed, filesystems should call this function to let the pagecache know that no more reads are outstanding. This will unlock the folio and wake up any thread sleeping on the lock. The folio will also be marked uptodate if all reads succeeded.”…”�”}”(hjÙ½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mõhj*½ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mûhj*½ubjM)�”}”(hŒUMay be called from interrupt or process context. May not be called from NMI context.”h]”hŒUMay be called from interrupt or process context. May not be called from NMI context.”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.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”]”(héŒ folio_end_private_2 (C function)”Œc.folio_end_private_2”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ.void folio_end_private_2 (struct folio *folio)”h]”hù)�”}”(hŒ-void folio_end_private_2(struct folio *folio)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj/¾h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj+¾h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>¾h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj+¾h²hh³j=¾h´Mubhÿ)�”}”(hŒfolio_end_private_2”h]”j)�”}”(hŒfolio_end_private_2”h]”hŒfolio_end_private_2”…”�”}”(hjP¾h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjL¾ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj+¾h²hh³j=¾h´Mubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjl¾h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjh¾ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjy¾h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjh¾ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjоh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‡¾ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jŒ¾Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljR¾sbŒc.folio_end_private_2”†”asbuh1hhjh¾ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª¾h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjh¾ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¸¾h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjh¾ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjh¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjd¾ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj+¾h²hh³j=¾h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj'¾h²hh³j=¾h´Mubah}”(h]”j"¾ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j=¾h´Mhj$¾h²hubj4)�”}”(hhh]”jM)�”}”(hŒ(Clear PG_private_2 and wake any waiters.”h]”hŒ(Clear PG_private_2 and wake any waiters.”…”�”}”(hjï¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mhjì¾h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj$¾h²hh³j=¾h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¿jHj¿jI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hXx**Parameters** ``struct folio *folio`` The folio. **Description** Clear the PG_private_2 bit on a folio and wake up any sleepers waiting for it. The folio reference held for PG_private_2 being set is released. This is, for example, used when a netfs folio is being written to a local disk cache, thereby allowing writes to the cache for the same folio to be serialised.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¿h]”hŒ Parameters”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mhj ¿ubj¤)�”}”(hhh]”j©)�”}”(hŒ#``struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj0¿h]”hŒstruct folio *folio”…”�”}”(hj2¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj.¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mhj*¿ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hjI¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jE¿h´MhjF¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj*¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jE¿h´Mhj'¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj ¿ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mhj ¿ubjM)�”}”(hŒ�Clear the PG_private_2 bit on a folio and wake up any sleepers waiting for it. The folio reference held for PG_private_2 being set is released.”h]”hŒ�Clear the PG_private_2 bit on a folio and wake up any sleepers waiting for it. The folio reference held for PG_private_2 being set is released.”…”�”}”(hj�¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mhj ¿ubjM)�”}”(hŒŸThis is, for example, used when a netfs folio is being written to a local disk cache, thereby allowing writes to the cache for the same folio to be serialised.”h]”hŒŸThis is, for example, used when a netfs folio is being written to a local disk cache, thereby allowing writes to the cache for the same folio to be serialised.”…”�”}”(hj�¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mhj ¿ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÀœh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!folio_wait_private_2 (C function)”Œc.folio_wait_private_2”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ/void folio_wait_private_2 (struct folio *folio)”h]”hù)�”}”(hŒ.void folio_wait_private_2(struct folio *folio)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¿¿h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj»¿h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M$ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjοh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj»¿h²hh³jÍ¿h´M$ubhÿ)�”}”(hŒfolio_wait_private_2”h]”j)�”}”(hŒfolio_wait_private_2”h]”hŒfolio_wait_private_2”…”�”}”(hjà¿h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÜ¿ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj»¿h²hh³jÍ¿h´M$ubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjü¿h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjø¿ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Àh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjø¿ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÀubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÀŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljâ¿sbŒc.folio_wait_private_2”†”asbuh1hhjø¿ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:Àh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjø¿ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjHÀh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjø¿ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjUÀh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjø¿ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjô¿ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj»¿h²hh³jÍ¿h´M$ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj·¿h²hh³jÍ¿h´M$ubah}”(h]”j²¿ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÍ¿h´M$hj´¿h²hubj4)�”}”(hhh]”jM)�”}”(hŒ/Wait for PG_private_2 to be cleared on a folio.”h]”hŒ/Wait for PG_private_2 to be cleared on a folio.”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M$hj|Àh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj´¿h²hh³jÍ¿h´M$ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj—ÀjHj—ÀjI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hŒ�**Parameters** ``struct folio *folio`` The folio to wait on. **Description** Wait for PG_private_2 to be cleared on a folio.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¡Àh]”hŒ Parameters”…”�”}”(hj£Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŸÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M(hj›Àubj¤)�”}”(hhh]”j©)�”}”(hŒ.``struct folio *folio`` The folio to wait on. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjÀÀh]”hŒstruct folio *folio”…”�”}”(hjÂÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¾Àubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M%hjºÀubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to wait on.”h]”hŒThe folio to wait on.”…”�”}”(hjÙÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÕÀh´M%hjÖÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjºÀubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÕÀh´M%hj·Àubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj›ÀubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjûÀh]”hŒ Description”…”�”}”(hjýÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjùÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M'hj›ÀubjM)�”}”(hŒ/Wait for PG_private_2 to be cleared on a folio.”h]”hŒ/Wait for PG_private_2 to be cleared on a folio.”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.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”]”(héŒ*folio_wait_private_2_killable (C function)”Œc.folio_wait_private_2_killable”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ7int folio_wait_private_2_killable (struct folio *folio)”h]”hù)�”}”(hŒ6int folio_wait_private_2_killable(struct folio *folio)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj@Áh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj<Áh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M1ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOÁh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj<Áh²hh³jNÁh´M1ubhÿ)�”}”(hŒfolio_wait_private_2_killable”h]”j)�”}”(hŒfolio_wait_private_2_killable”h]”hŒfolio_wait_private_2_killable”…”�”}”(hjaÁh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj]Áubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj<Áh²hh³jNÁh´M1ubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj}Áh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjyÁubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠÁh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjyÁubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj›Áh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj˜Áubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j�ÁŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljcÁsbŒc.folio_wait_private_2_killable”†”asbuh1hhjyÁubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»Áh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjyÁubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÉÁh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjyÁubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÖÁh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjyÁubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjuÁubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj<Áh²hh³jNÁh´M1ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj8Áh²hh³jNÁh´M1ubah}”(h]”j3Áah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jNÁh´M1hj5Áh²hubj4)�”}”(hhh]”jM)�”}”(hŒ/Wait for PG_private_2 to be cleared on a folio.”h]”hŒ/Wait for PG_private_2 to be cleared on a folio.”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M1hjýÁh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj5Áh²hh³jNÁh´M1ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÂjHjÂjI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hX**Parameters** ``struct folio *folio`` The folio to wait on. **Description** Wait for PG_private_2 to be cleared on a folio or until a fatal signal is received by the calling task. **Return** - 0 if successful. - -EINTR if a fatal signal was encountered.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj"Âh]”hŒ Parameters”…”�”}”(hj$Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj Âubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M5hjÂubj¤)�”}”(hhh]”j©)�”}”(hŒ.``struct folio *folio`` The folio to wait on. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjAÂh]”hŒstruct folio *folio”…”�”}”(hjCÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj?Âubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M2hj;ÂubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to wait on.”h]”hŒThe folio to wait on.”…”�”}”(hjZÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jVÂh´M2hjWÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj;Âubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jVÂh´M2hj8Âubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÂubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M4hjÂubjM)�”}”(hŒgWait for PG_private_2 to be cleared on a folio or until a fatal signal is received by the calling task.”h]”hŒgWait for PG_private_2 to be cleared on a folio or until a fatal signal is received by the calling task.”…”�”}”(hj’Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M3hjÂubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M6hjÂubjaW)�”}”(hhh]”(jÕ/)�”}”(hŒ0 if successful.”h]”jM)�”}”(hj¾Âh]”hŒ0 if successful.”…”�”}”(hjÀÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M7hj¼Âubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hj¹ÂubjÕ/)�”}”(hŒ)-EINTR if a fatal signal was encountered.”h]”jM)�”}”(hjÖÂh]”hŒ)-EINTR if a fatal signal was encountered.”…”�”}”(hjØÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M8hjÔÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hj¹Âubeh}”(h]”h ]”h"]”h$]”h&]”jƒWj„Wuh1j`Wh³jÍÂh´M7hjÂubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÀœh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ.folio_end_writeback_no_dropbehind (C function)”Œ#c.folio_end_writeback_no_dropbehind”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒÇubj¤)�”}”(hhh]”j©)�”}”(hŒ)``struct folio *folio`` The folio to lock”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjcÇh]”hŒstruct folio *folio”…”�”}”(hjeÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjaÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M¯hj]ÇubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to lock”h]”hŒThe folio to lock”…”�”}”(hj|Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MªhjyÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj]Çubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jxÇh´M¯hjZÇ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”]”(héŒ!page_cache_next_miss (C function)”Œc.page_cache_next_miss”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒcpgoff_t page_cache_next_miss (struct address_space *mapping, pgoff_t index, unsigned long max_scan)”h]”hù)�”}”(hŒbpgoff_t page_cache_next_miss(struct address_space *mapping, pgoff_t index, unsigned long max_scan)”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjÀÇh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj½Çubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÂÇŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒpage_cache_next_miss”sbŒc.page_cache_next_miss”†”asbuh1hhj¹Çh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâÇh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¹Çh²hh³jáÇh´Mubhÿ)�”}”(hŒpage_cache_next_miss”h]”j)�”}”(hjÞÇh]”hŒpage_cache_next_miss”…”�”}”(hjôÇh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjðÇubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¹Çh²hh³jáÇh´Mubj )�”}”(hŒF(struct address_space *mapping, pgoff_t index, unsigned long max_scan)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj ÈubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj Èubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj-Èh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj*Èubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j/ÈŒmodname”NŒ classname”Njpjs)�”}”jv]”jÜÇŒc.page_cache_next_miss”†”asbuh1hhj ÈubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKÈh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj ÈubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjYÈh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj Èubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjfÈh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Èubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÈubj )�”}”(hŒ pgoff_t index”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hj‚Èh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÈubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j„ÈŒmodname”NŒ classname”Njpjs)�”}”jv]”jÜÇŒc.page_cache_next_miss”†”asbuh1hhj{ÈubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Èh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj{Èubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(hj®Èh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj{Èubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÈubj )�”}”(hŒunsigned long max_scan”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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ÃÈubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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ÃÈubj)�”}”(hŒmax_scan”h]”hŒmax_scan”…”�”}”(hjÿÈh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÃÈubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÈubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¹Çh²hh³jáÇh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjµÇh²hh³jáÇh´Mubah}”(h]”j°Çah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jáÇh´Mhj²Çh²hubj4)�”}”(hhh]”jM)�”}”(hŒ$Find the next gap in the page cache.”h]”hŒ$Find the next gap in the page cache.”…”�”}”(hj)Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mhj&Éh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj²Çh²hh³jáÇh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjAÉjHjAÉjI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hX **Parameters** ``struct address_space *mapping`` Mapping. ``pgoff_t index`` Index. ``unsigned long max_scan`` Maximum range to search. **Description** Search the range [index, min(index + max_scan - 1, ULONG_MAX)] for the gap with the lowest index. This function may be called under the rcu_read_lock. However, this will not atomically search a snapshot of the cache at a single point in time. For example, if a gap is created at index 5, then subsequently a gap is created at index 10, page_cache_next_miss covering both indices may return 10 if called under the rcu_read_lock. **Return** The index of the gap if found, otherwise an index outside the range specified (in which case 'return - index >= max_scan' will be true). In the rare case of index wrap-around, 0 will be returned.”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MhjEÉubj¤)�”}”(hhh]”(j©)�”}”(hŒ+``struct address_space *mapping`` Mapping. ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjjÉh]”hŒstruct address_space *mapping”…”�”}”(hjlÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjhÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MhjdÉubjÉ)�”}”(hhh]”jM)�”}”(hŒMapping.”h]”hŒMapping.”…”�”}”(hjƒÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÉh´Mhj€Éubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjdÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÉh´MhjaÉubj©)�”}”(hŒ``pgoff_t index`` Index. ”h]”(j¯)�”}”(hŒ``pgoff_t index``”h]”jS)�”}”(hj£Éh]”hŒ pgoff_t index”…”�”}”(hj¥Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¡Éubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mhj�ÉubjÉ)�”}”(hhh]”jM)�”}”(hŒIndex.”h]”hŒIndex.”…”�”}”(hj¼Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¸Éh´Mhj¹Éubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�Éubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¸Éh´MhjaÉubj©)�”}”(hŒ4``unsigned long max_scan`` Maximum range to search. ”h]”(j¯)�”}”(hŒ``unsigned long max_scan``”h]”jS)�”}”(hjÜÉh]”hŒunsigned long max_scan”…”�”}”(hjÞÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÚÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MhjÖÉubjÉ)�”}”(hhh]”jM)�”}”(hŒMaximum range to search.”h]”hŒMaximum range to search.”…”�”}”(hjõÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jñÉh´MhjòÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÖÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jñÉh´MhjaÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjEÉubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÊh]”hŒ Description”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MhjEÉubjM)�”}”(hŒaSearch the range [index, min(index + max_scan - 1, ULONG_MAX)] for the gap with the lowest index.”h]”hŒaSearch the range [index, min(index + max_scan - 1, ULONG_MAX)] for the gap with the lowest index.”…”�”}”(hj-Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MhjEÉubjM)�”}”(hXJThis function may be called under the rcu_read_lock. However, this will not atomically search a snapshot of the cache at a single point in time. For example, if a gap is created at index 5, then subsequently a gap is created at index 10, page_cache_next_miss covering both indices may return 10 if called under the rcu_read_lock.”h]”hXJThis function may be called under the rcu_read_lock. However, this will not atomically search a snapshot of the cache at a single point in time. For example, if a gap is created at index 5, then subsequently a gap is created at index 10, page_cache_next_miss covering both indices may return 10 if called under the rcu_read_lock.”…”�”}”(hj<Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M hjEÉubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MhjEÉubjM)�”}”(hŒÃThe index of the gap if found, otherwise an index outside the range specified (in which case 'return - index >= max_scan' will be true). In the rare case of index wrap-around, 0 will be returned.”h]”hŒÇThe index of the gap if found, otherwise an index outside the range specified (in which case ‘return - index >= max_scan’ will be true). In the rare case of index wrap-around, 0 will be returned.”…”�”}”(hjcÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MhjEÉubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÀœh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!page_cache_prev_miss (C function)”Œc.page_cache_prev_miss”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒcpgoff_t page_cache_prev_miss (struct address_space *mapping, pgoff_t index, unsigned long max_scan)”h]”hù)�”}”(hŒbpgoff_t page_cache_prev_miss(struct address_space *mapping, pgoff_t index, unsigned long max_scan)”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hj•Êh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj’Êubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j—ÊŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒpage_cache_prev_miss”sbŒc.page_cache_prev_miss”†”asbuh1hhjŽÊh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M'ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·Êh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŽÊh²hh³j¶Êh´M'ubhÿ)�”}”(hŒpage_cache_prev_miss”h]”j)�”}”(hj³Êh]”hŒpage_cache_prev_miss”…”�”}”(hjÉÊh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÅÊubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjŽÊh²hh³j¶Êh´M'ubj )�”}”(hŒF(struct address_space *mapping, pgoff_t index, unsigned long max_scan)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjäÊh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjàÊubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñÊh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjàÊubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÿÊubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jËŒmodname”NŒ classname”Njpjs)�”}”jv]”j±ÊŒc.page_cache_prev_miss”†”asbuh1hhjàÊubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Ëh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjàÊubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj.Ëh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjàÊubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj;Ëh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjàÊubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÜÊubj )�”}”(hŒ pgoff_t index”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjWËh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjTËubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jYËŒmodname”NŒ classname”Njpjs)�”}”jv]”j±ÊŒc.page_cache_prev_miss”†”asbuh1hhjPËubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuËh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjPËubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(hjƒËh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjPËubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÜÊubj )�”}”(hŒunsigned long max_scan”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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˜Ëubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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˜Ëubj)�”}”(hŒmax_scan”h]”hŒmax_scan”…”�”}”(hjÔËh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj˜Ëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÜÊubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjŽÊh²hh³j¶Êh´M'ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjŠÊh²hh³j¶Êh´M'ubah}”(h]”j…Êah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¶Êh´M'hj‡Êh²hubj4)�”}”(hhh]”jM)�”}”(hŒ(Find the previous gap in the page cache.”h]”hŒ(Find the previous gap in the page cache.”…”�”}”(hjþËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M'hjûËh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj‡Êh²hh³j¶Êh´M'ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÌjHjÌjI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hX**Parameters** ``struct address_space *mapping`` Mapping. ``pgoff_t index`` Index. ``unsigned long max_scan`` Maximum range to search. **Description** Search the range [max(index - max_scan + 1, 0), index] for the gap with the highest index. This function may be called under the rcu_read_lock. However, this will not atomically search a snapshot of the cache at a single point in time. For example, if a gap is created at index 10, then subsequently a gap is created at index 5, page_cache_prev_miss() covering both indices may return 5 if called under the rcu_read_lock. **Return** The index of the gap if found, otherwise an index outside the range specified (in which case 'index - return >= max_scan' will be true). In the rare case of wrap-around, ULONG_MAX will be returned.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj Ìh]”hŒ Parameters”…”�”}”(hj"Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÌubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M+hjÌubj¤)�”}”(hhh]”(j©)�”}”(hŒ+``struct address_space *mapping`` Mapping. ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj?Ìh]”hŒstruct address_space *mapping”…”�”}”(hjAÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj=Ìubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M(hj9ÌubjÉ)�”}”(hhh]”jM)�”}”(hŒMapping.”h]”hŒMapping.”…”�”}”(hjXÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jTÌh´M(hjUÌubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj9Ìubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jTÌh´M(hj6Ìubj©)�”}”(hŒ``pgoff_t index`` Index. ”h]”(j¯)�”}”(hŒ``pgoff_t index``”h]”jS)�”}”(hjxÌh]”hŒ pgoff_t index”…”�”}”(hjzÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjvÌubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M)hjrÌubjÉ)�”}”(hhh]”jM)�”}”(hŒIndex.”h]”hŒIndex.”…”�”}”(hj‘Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�Ìh´M)hjŽÌubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjrÌubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�Ìh´M)hj6Ìubj©)�”}”(hŒ4``unsigned long max_scan`` Maximum range to search. ”h]”(j¯)�”}”(hŒ``unsigned long max_scan``”h]”jS)�”}”(hj±Ìh]”hŒunsigned long max_scan”…”�”}”(hj³Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¯Ìubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M*hj«ÌubjÉ)�”}”(hhh]”jM)�”}”(hŒMaximum range to search.”h]”hŒMaximum range to search.”…”�”}”(hjÊÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÆÌh´M*hjÇÌubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj«Ìubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÆÌh´M*hj6Ìubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÌubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjìÌh]”hŒ Description”…”�”}”(hjîÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjêÌubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M,hjÌubjM)�”}”(hŒZSearch the range [max(index - max_scan + 1, 0), index] for the gap with the highest index.”h]”hŒZSearch the range [max(index - max_scan + 1, 0), index] for the gap with the highest index.”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M+hjÌubjM)�”}”(hXKThis function may be called under the rcu_read_lock. However, this will not atomically search a snapshot of the cache at a single point in time. For example, if a gap is created at index 10, then subsequently a gap is created at index 5, page_cache_prev_miss() covering both indices may return 5 if called under the rcu_read_lock.”h]”hXKThis function may be called under the rcu_read_lock. However, this will not atomically search a snapshot of the cache at a single point in time. For example, if a gap is created at index 10, then subsequently a gap is created at index 5, page_cache_prev_miss() covering both indices may return 5 if called under the rcu_read_lock.”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M.hjÌubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M4hjÌubjM)�”}”(hŒÅThe index of the gap if found, otherwise an index outside the range specified (in which case 'index - return >= max_scan' will be true). In the rare case of wrap-around, ULONG_MAX will be returned.”h]”hŒÉThe index of the gap if found, otherwise an index outside the range specified (in which case ‘index - return >= max_scan’ will be true). In the rare case of wrap-around, ULONG_MAX will be returned.”…”�”}”(hj8Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M5hjÌubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÀœh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%__filemap_get_folio_mpol (C function)”Œc.__filemap_get_folio_mpol”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒŒstruct folio * __filemap_get_folio_mpol (struct address_space *mapping, pgoff_t index, fgf_t fgp_flags, gfp_t gfp, struct mempolicy *policy)”h]”hù)�”}”(hŒŠstruct folio *__filemap_get_folio_mpol(struct address_space *mapping, pgoff_t index, fgf_t fgp_flags, gfp_t gfp, struct mempolicy *policy)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjgÍh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjcÍh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M‹ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuÍh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjcÍh²hh³jtÍh´M‹ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj†Íh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjƒÍubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jˆÍŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒ__filemap_get_folio_mpol”sbŒc.__filemap_get_folio_mpol”†”asbuh1hhjcÍh²hh³jtÍh´M‹ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§Íh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjcÍh²hh³jtÍh´M‹ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjµÍh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjcÍh²hh³jtÍh´M‹ubhÿ)�”}”(hŒ__filemap_get_folio_mpol”h]”j)�”}”(hj¤Íh]”hŒ__filemap_get_folio_mpol”…”�”}”(hjÆÍh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÂÍubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjcÍh²hh³jtÍh´M‹ubj )�”}”(hŒd(struct address_space *mapping, pgoff_t index, fgf_t fgp_flags, gfp_t gfp, struct mempolicy *policy)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjáÍh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÝÍubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîÍh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÝÍubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjÿÍh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjüÍubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÎŒmodname”NŒ classname”Njpjs)�”}”jv]”j¢ÍŒc.__filemap_get_folio_mpol”†”asbuh1hhjÝÍubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÝÍubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj+Îh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÝÍubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj8Îh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÝÍubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÙÍubj )�”}”(hŒ pgoff_t index”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjTÎh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjQÎubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jVÎŒmodname”NŒ classname”Njpjs)�”}”jv]”j¢ÍŒc.__filemap_get_folio_mpol”†”asbuh1hhjMÎubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrÎh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjMÎubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(hj€Îh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjMÎubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÙÍubj )�”}”(hŒfgf_t fgp_flags”h]”(h)�”}”(hhh]”j)�”}”(hŒfgf_t”h]”hŒfgf_t”…”�”}”(hjœÎh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™Îubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jžÎŒmodname”NŒ classname”Njpjs)�”}”jv]”j¢ÍŒc.__filemap_get_folio_mpol”†”asbuh1hhj•ÎubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºÎh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj•Îubj)�”}”(hŒ fgp_flags”h]”hŒ fgp_flags”…”�”}”(hjÈÎh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj•Îubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÙÍubj )�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjäÎh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjáÎubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jæÎŒmodname”NŒ classname”Njpjs)�”}”jv]”j¢ÍŒc.__filemap_get_folio_mpol”†”asbuh1hhjÝÎubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÝÎubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÝÎubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÙÍubj )�”}”(hŒstruct mempolicy *policy”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj)Ïh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj%ÏubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6Ïh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj%Ïubh)�”}”(hhh]”j)�”}”(hŒ mempolicy”h]”hŒ mempolicy”…”�”}”(hjGÏh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjDÏubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jIÏŒmodname”NŒ classname”Njpjs)�”}”jv]”j¢ÍŒc.__filemap_get_folio_mpol”†”asbuh1hhj%ÏubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeÏh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj%ÏubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjsÏh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj%Ïubj)�”}”(hŒpolicy”h]”hŒpolicy”…”�”}”(hj€Ïh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj%Ïubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÙÍubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjcÍh²hh³jtÍh´M‹ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj_Íh²hh³jtÍh´M‹ubah}”(h]”jZÍah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jtÍh´M‹hj\Íh²hubj4)�”}”(hhh]”jM)�”}”(hŒ$Find and get a reference to a folio.”h]”hŒ$Find and get a reference to a folio.”…”�”}”(hjªÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M‹hj§Ïh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj\Íh²hh³jtÍh´M‹ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÂÏjHjÂÏjI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hX´**Parameters** ``struct address_space *mapping`` The address_space to search. ``pgoff_t index`` The page index. ``fgf_t fgp_flags`` ``FGP`` flags modify how the folio is returned. ``gfp_t gfp`` Memory allocation flags to use if ``FGP_CREAT`` is specified. ``struct mempolicy *policy`` NUMA memory allocation policy to follow. **Description** Looks up the page cache entry at **mapping** & **index**. If ``FGP_LOCK`` or ``FGP_CREAT`` are specified then the function may sleep even if the ``GFP`` flags specified for ``FGP_CREAT`` are atomic. If this function returns a folio, it is returned with an increased refcount. **Return** The found folio or an ERR_PTR() otherwise.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÌÏh]”hŒ Parameters”…”�”}”(hjÎÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÊÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M�hjÆÏubj¤)�”}”(hhh]”(j©)�”}”(hŒ?``struct address_space *mapping`` The address_space to search. ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjëÏh]”hŒstruct address_space *mapping”…”�”}”(hjíÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjéÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MŒhjåÏubjÉ)�”}”(hhh]”jM)�”}”(hŒThe address_space to search.”h]”hŒThe address_space to search.”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÐh´MŒhjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjåÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÐh´MŒhjâÏubj©)�”}”(hŒ"``pgoff_t index`` The page index. ”h]”(j¯)�”}”(hŒ``pgoff_t index``”h]”jS)�”}”(hj$Ðh]”hŒ pgoff_t index”…”�”}”(hj&Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj"Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M�hjÐubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page index.”h]”hŒThe page index.”…”�”}”(hj=Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j9Ðh´M�hj:Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j9Ðh´M�hjâÏubj©)�”}”(hŒD``fgf_t fgp_flags`` ``FGP`` flags modify how the folio is returned. ”h]”(j¯)�”}”(hŒ``fgf_t fgp_flags``”h]”jS)�”}”(hj]Ðh]”hŒfgf_t fgp_flags”…”�”}”(hj_Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj[Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MŽhjWÐubjÉ)�”}”(hhh]”jM)�”}”(hŒ/``FGP`` flags modify how the folio is returned.”h]”(jS)�”}”(hŒ``FGP``”h]”hŒFGP”…”�”}”(hjzÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjvÐubhŒ( flags modify how the folio is returned.”…”�”}”(hjvÐh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jrÐh´MŽhjsÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjWÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jrÐh´MŽhjâÏubj©)�”}”(hŒL``gfp_t gfp`` Memory allocation flags to use if ``FGP_CREAT`` is specified. ”h]”(j¯)�”}”(hŒ ``gfp_t gfp``”h]”jS)�”}”(hj¤Ðh]”hŒ gfp_t gfp”…”�”}”(hj¦Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¢Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M�hjžÐubjÉ)�”}”(hhh]”jM)�”}”(hŒ=Memory allocation flags to use if ``FGP_CREAT`` is specified.”h]”(hŒ"Memory allocation flags to use if ”…”�”}”(hj½Ðh²hh³Nh´NubjS)�”}”(hŒ ``FGP_CREAT``”h]”hŒ FGP_CREAT”…”�”}”(hjÅÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj½ÐubhŒ is specified.”…”�”}”(hj½Ðh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¹Ðh´M�hjºÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjžÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¹Ðh´M�hjâÏubj©)�”}”(hŒF``struct mempolicy *policy`` NUMA memory allocation policy to follow. ”h]”(j¯)�”}”(hŒ``struct mempolicy *policy``”h]”jS)�”}”(hjïÐh]”hŒstruct mempolicy *policy”…”�”}”(hjñÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjíÐubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M�hjéÐubjÉ)�”}”(hhh]”jM)�”}”(hŒ(NUMA memory allocation policy to follow.”h]”hŒ(NUMA memory allocation policy to follow.”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÑh´M�hjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjéÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÑh´M�hjâÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÆÏubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj*Ñh]”hŒ Description”…”�”}”(hj,Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj(Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M’hjÆÏubjM)�”}”(hŒ9Looks up the page cache entry at **mapping** & **index**.”h]”(hŒ!Looks up the page cache entry at ”…”�”}”(hj@Ñh²hh³Nh´NubjŽ)�”}”(hŒ **mapping**”h]”hŒmapping”…”�”}”(hjHÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj@ÑubhŒ & ”…”�”}”(hj@Ñh²hh³Nh´NubjŽ)�”}”(hŒ **index**”h]”hŒindex”…”�”}”(hjZÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj@ÑubhŒ.”…”�”}”(hj@Ñh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M‘hjÆÏubjM)�”}”(hŒŒIf ``FGP_LOCK`` or ``FGP_CREAT`` are specified then the function may sleep even if the ``GFP`` flags specified for ``FGP_CREAT`` are atomic.”h]”(hŒIf ”…”�”}”(hjsÑh²hh³Nh´NubjS)�”}”(hŒ ``FGP_LOCK``”h]”hŒFGP_LOCK”…”�”}”(hj{Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjsÑubhŒ or ”…”�”}”(hjsÑh²hh³Nh´NubjS)�”}”(hŒ ``FGP_CREAT``”h]”hŒ FGP_CREAT”…”�”}”(hj�Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjsÑubhŒ7 are specified then the function may sleep even if the ”…”�”}”(hjsÑh²hh³Nh´NubjS)�”}”(hŒ``GFP``”h]”hŒGFP”…”�”}”(hjŸÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjsÑubhŒ flags specified for ”…”�”}”(hjsÑh²hh³Nh´NubjS)�”}”(hŒ ``FGP_CREAT``”h]”hŒ FGP_CREAT”…”�”}”(hj±Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjsÑubhŒ are atomic.”…”�”}”(hjsÑh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M“hjÆÏubjM)�”}”(hŒLIf this function returns a folio, it is returned with an increased refcount.”h]”hŒLIf this function returns a folio, it is returned with an increased refcount.”…”�”}”(hjÊÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M–hjÆÏubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M˜hjÆÏubjM)�”}”(hŒ*The found folio or an ERR_PTR() otherwise.”h]”hŒ*The found folio or an ERR_PTR() otherwise.”…”�”}”(hjñÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.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”]”(héŒfilemap_get_folios (C function)”Œc.filemap_get_folios”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒtunsigned filemap_get_folios (struct address_space *mapping, pgoff_t *start, pgoff_t end, struct folio_batch *fbatch)”h]”hù)�”}”(hŒsunsigned filemap_get_folios(struct address_space *mapping, pgoff_t *start, pgoff_t end, struct folio_batch *fbatch)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj Òh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÒh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M½ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/Òh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÒh²hh³j.Òh´M½ubhÿ)�”}”(hŒfilemap_get_folios”h]”j)�”}”(hŒfilemap_get_folios”h]”hŒfilemap_get_folios”…”�”}”(hjAÒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj=Òubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÒh²hh³j.Òh´M½ubj )�”}”(hŒX(struct address_space *mapping, pgoff_t *start, pgoff_t end, struct folio_batch *fbatch)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj]Òh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjYÒubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjÒh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjYÒubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj{Òh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjxÒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j}ÒŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljCÒsbŒc.filemap_get_folios”†”asbuh1hhjYÒubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›Òh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjYÒubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj©Òh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjYÒubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj¶Òh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjYÒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjUÒubj )�”}”(hŒpgoff_t *start”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjÒÒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÏÒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÔÒŒmodname”NŒ classname”Njpjs)�”}”jv]”j—ÒŒc.filemap_get_folios”†”asbuh1hhjËÒubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðÒh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjËÒubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjþÒh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjËÒubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj Óh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjËÒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjUÒubj )�”}”(hŒ pgoff_t end”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hj'Óh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj$Óubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j)ÓŒmodname”NŒ classname”Njpjs)�”}”jv]”j—ÒŒc.filemap_get_folios”†”asbuh1hhj ÓubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEÓh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj Óubj)�”}”(hŒend”h]”hŒend”…”�”}”(hjSÓh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Óubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjUÒubj )�”}”(hŒstruct folio_batch *fbatch”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjlÓh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjhÓubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyÓh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjhÓubh)�”}”(hhh]”j)�”}”(hŒ folio_batch”h]”hŒ folio_batch”…”�”}”(hjŠÓh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‡Óubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jŒÓŒmodname”NŒ classname”Njpjs)�”}”jv]”j—ÒŒc.filemap_get_folios”†”asbuh1hhjhÓubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨Óh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjhÓubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¶Óh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjhÓubj)�”}”(hŒfbatch”h]”hŒfbatch”…”�”}”(hjÃÓh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjhÓubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjUÒubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÒh²hh³j.Òh´M½ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÒh²hh³j.Òh´M½ubah}”(h]”jÒah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j.Òh´M½hjÒh²hubj4)�”}”(hhh]”jM)�”}”(hŒGet a batch of folios”h]”hŒGet a batch of folios”…”�”}”(hjíÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M½hjêÓh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÒh²hh³j.Òh´M½ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÔjHjÔjI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hX1**Parameters** ``struct address_space *mapping`` The address_space to search ``pgoff_t *start`` The starting page index ``pgoff_t end`` The final page index (inclusive) ``struct folio_batch *fbatch`` The batch to fill. **Description** Search for and return a batch of folios in the mapping starting at index **start** and up to index **end** (inclusive). The folios are returned in **fbatch** with an elevated reference count. **Return** The number of folios which were found. We also update **start** to index the next folio for the traversal.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÔh]”hŒ Parameters”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÁhj Ôubj¤)�”}”(hhh]”(j©)�”}”(hŒ>``struct address_space *mapping`` The address_space to search ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj.Ôh]”hŒstruct address_space *mapping”…”�”}”(hj0Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj,Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M¾hj(ÔubjÉ)�”}”(hhh]”jM)�”}”(hŒThe address_space to search”h]”hŒThe address_space to search”…”�”}”(hjGÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jCÔh´M¾hjDÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj(Ôubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jCÔh´M¾hj%Ôubj©)�”}”(hŒ+``pgoff_t *start`` The starting page index ”h]”(j¯)�”}”(hŒ``pgoff_t *start``”h]”jS)�”}”(hjgÔh]”hŒpgoff_t *start”…”�”}”(hjiÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjeÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M¿hjaÔubjÉ)�”}”(hhh]”jM)�”}”(hŒThe starting page index”h]”hŒThe starting page index”…”�”}”(hj€Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j|Ôh´M¿hj}Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjaÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j|Ôh´M¿hj%Ôubj©)�”}”(hŒ1``pgoff_t end`` The final page index (inclusive) ”h]”(j¯)�”}”(hŒ``pgoff_t end``”h]”jS)�”}”(hj Ôh]”hŒ pgoff_t end”…”�”}”(hj¢Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjžÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÀhjšÔubjÉ)�”}”(hhh]”jM)�”}”(hŒ The final page index (inclusive)”h]”hŒ The final page index (inclusive)”…”�”}”(hj¹Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jµÔh´MÀhj¶Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjšÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jµÔh´MÀhj%Ôubj©)�”}”(hŒ2``struct folio_batch *fbatch`` The batch to fill. ”h]”(j¯)�”}”(hŒ``struct folio_batch *fbatch``”h]”jS)�”}”(hjÙÔh]”hŒstruct folio_batch *fbatch”…”�”}”(hjÛÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj×Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÁhjÓÔubjÉ)�”}”(hhh]”jM)�”}”(hŒThe batch to fill.”h]”hŒThe batch to fill.”…”�”}”(hjòÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jîÔh´MÁhjïÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÓÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jîÔh´MÁhj%Ôubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj ÔubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÕh]”hŒ Description”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÃhj ÔubjM)�”}”(hŒÀSearch for and return a batch of folios in the mapping starting at index **start** and up to index **end** (inclusive). The folios are returned in **fbatch** with an elevated reference count.”h]”(hŒISearch for and return a batch of folios in the mapping starting at index ”…”�”}”(hj*Õh²hh³Nh´NubjŽ)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hj2Õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj*ÕubhŒ and up to index ”…”�”}”(hj*Õh²hh³Nh´NubjŽ)�”}”(hŒ**end**”h]”hŒend”…”�”}”(hjDÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj*ÕubhŒ* (inclusive). The folios are returned in ”…”�”}”(hj*Õh²hh³Nh´NubjŽ)�”}”(hŒ **fbatch**”h]”hŒfbatch”…”�”}”(hjVÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj*ÕubhŒ" with an elevated reference count.”…”�”}”(hj*Õh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÂhj ÔubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÆhj ÔubjM)�”}”(hŒjThe number of folios which were found. We also update **start** to index the next folio for the traversal.”h]”(hŒ6The number of folios which were found. We also update ”…”�”}”(hj‡Õh²hh³Nh´NubjŽ)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hj�Õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‡ÕubhŒ+ to index the next folio for the traversal.”…”�”}”(hj‡Õh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.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”]”(héŒ&filemap_get_folios_contig (C function)”Œc.filemap_get_folios_contig”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ{unsigned filemap_get_folios_contig (struct address_space *mapping, pgoff_t *start, pgoff_t end, struct folio_batch *fbatch)”h]”hù)�”}”(hŒzunsigned filemap_get_folios_contig(struct address_space *mapping, pgoff_t *start, pgoff_t end, struct folio_batch *fbatch)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÈÕh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÄÕh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÒubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×Õh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÄÕh²hh³jÖÕh´MÒubhÿ)�”}”(hŒfilemap_get_folios_contig”h]”j)�”}”(hŒfilemap_get_folios_contig”h]”hŒfilemap_get_folios_contig”…”�”}”(hjéÕh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjåÕubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÄÕh²hh³jÖÕh´MÒubj )�”}”(hŒX(struct address_space *mapping, pgoff_t *start, pgoff_t end, struct folio_batch *fbatch)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÖubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÖubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj#Öh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Öubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j%ÖŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljëÕsbŒc.filemap_get_folios_contig”†”asbuh1hhjÖubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCÖh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÖubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjQÖh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÖubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj^Öh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÖubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjýÕubj )�”}”(hŒpgoff_t *start”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjzÖh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjwÖubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j|ÖŒmodname”NŒ classname”Njpjs)�”}”jv]”j?ÖŒc.filemap_get_folios_contig”†”asbuh1hhjsÖubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜Öh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjsÖubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¦Öh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjsÖubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj³Öh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjsÖubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjýÕubj )�”}”(hŒ pgoff_t end”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjÏÖh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÌÖubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÑÖŒmodname”NŒ classname”Njpjs)�”}”jv]”j?ÖŒc.filemap_get_folios_contig”†”asbuh1hhjÈÖubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíÖh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÈÖubj)�”}”(hŒend”h]”hŒend”…”�”}”(hjûÖh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÈÖubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjýÕubj )�”}”(hŒstruct folio_batch *fbatch”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj×ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!×h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj×ubh)�”}”(hhh]”j)�”}”(hŒ folio_batch”h]”hŒ folio_batch”…”�”}”(hj2×h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj/×ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j4׌modname”NŒ classname”Njpjs)�”}”jv]”j?ÖŒc.filemap_get_folios_contig”†”asbuh1hhj×ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjP×h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj×ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj^×h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj×ubj)�”}”(hŒfbatch”h]”hŒfbatch”…”�”}”(hjk×h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj×ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjýÕubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÄÕh²hh³jÖÕh´MÒubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÀÕh²hh³jÖÕh´MÒubah}”(h]”j»Õah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÖÕh´MÒhj½Õh²hubj4)�”}”(hhh]”jM)�”}”(hŒ Get a batch of contiguous folios”h]”hŒ Get a batch of contiguous folios”…”�”}”(hj•×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÒhj’×h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj½Õh²hh³jÖÕh´MÒubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj­×jHj­×jI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hX0**Parameters** ``struct address_space *mapping`` The address_space to search ``pgoff_t *start`` The starting page index ``pgoff_t end`` The final page index (inclusive) ``struct folio_batch *fbatch`` The batch to fill **Description** filemap_get_folios_contig() works exactly like filemap_get_folios(), except the returned folios are guaranteed to be contiguous. This may not return all contiguous folios if the batch gets filled up. **Return** The number of folios found. Also update **start** to be positioned for traversal of the next folio.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj·×h]”hŒ Parameters”…”�”}”(hj¹×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjµ×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÖhj±×ubj¤)�”}”(hhh]”(j©)�”}”(hŒ>``struct address_space *mapping`` The address_space to search ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjÖ×h]”hŒstruct address_space *mapping”…”�”}”(hjØ×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÔ×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÓhjÐ×ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe address_space to search”h]”hŒThe address_space to search”…”�”}”(hjï×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jë×h´MÓhjì×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÐ×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jë×h´MÓhjÍ×ubj©)�”}”(hŒ+``pgoff_t *start`` The starting page index ”h]”(j¯)�”}”(hŒ``pgoff_t *start``”h]”jS)�”}”(hjØh]”hŒpgoff_t *start”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj Øubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÔhj ØubjÉ)�”}”(hhh]”jM)�”}”(hŒThe starting page index”h]”hŒThe starting page index”…”�”}”(hj(Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j$Øh´MÔhj%Øubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj Øubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j$Øh´MÔhjÍ×ubj©)�”}”(hŒ1``pgoff_t end`` The final page index (inclusive) ”h]”(j¯)�”}”(hŒ``pgoff_t end``”h]”jS)�”}”(hjHØh]”hŒ pgoff_t end”…”�”}”(hjJØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjFØubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÕhjBØubjÉ)�”}”(hhh]”jM)�”}”(hŒ The final page index (inclusive)”h]”hŒ The final page index (inclusive)”…”�”}”(hjaØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j]Øh´MÕhj^Øubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjBØubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j]Øh´MÕhjÍ×ubj©)�”}”(hŒ1``struct folio_batch *fbatch`` The batch to fill ”h]”(j¯)�”}”(hŒ``struct folio_batch *fbatch``”h]”jS)�”}”(hj�Øh]”hŒstruct folio_batch *fbatch”…”�”}”(hjƒØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjØubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÖhj{ØubjÉ)�”}”(hhh]”jM)�”}”(hŒThe batch to fill”h]”hŒThe batch to fill”…”�”}”(hjšØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j–Øh´MÖhj—Øubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj{Øubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j–Øh´MÖhjÍ×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj±×ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj¼Øh]”hŒ Description”…”�”}”(hj¾Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjºØubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MØhj±×ubjM)�”}”(hŒÇfilemap_get_folios_contig() works exactly like filemap_get_folios(), except the returned folios are guaranteed to be contiguous. This may not return all contiguous folios if the batch gets filled up.”h]”hŒÇfilemap_get_folios_contig() works exactly like filemap_get_folios(), except the returned folios are guaranteed to be contiguous. This may not return all contiguous folios if the batch gets filled up.”…”�”}”(hjÒØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M×hj±×ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÛhj±×ubjM)�”}”(hŒcThe number of folios found. Also update **start** to be positioned for traversal of the next folio.”h]”(hŒ(The number of folios found. Also update ”…”�”}”(hjùØh²hh³Nh´NubjŽ)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjùØubhŒ2 to be positioned for traversal of the next folio.”…”�”}”(hjùØh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.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”]”(héŒ#filemap_get_folios_tag (C function)”Œc.filemap_get_folios_tag”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ‡unsigned filemap_get_folios_tag (struct address_space *mapping, pgoff_t *start, pgoff_t end, xa_mark_t tag, struct folio_batch *fbatch)”h]”hù)�”}”(hŒ†unsigned filemap_get_folios_tag(struct address_space *mapping, pgoff_t *start, pgoff_t end, xa_mark_t tag, struct folio_batch *fbatch)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj:Ùh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj6Ùh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIÙh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj6Ùh²hh³jHÙh´M ubhÿ)�”}”(hŒfilemap_get_folios_tag”h]”j)�”}”(hŒfilemap_get_folios_tag”h]”hŒfilemap_get_folios_tag”…”�”}”(hj[Ùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjWÙubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj6Ùh²hh³jHÙh´M ubj )�”}”(hŒg(struct address_space *mapping, pgoff_t *start, pgoff_t end, xa_mark_t tag, struct folio_batch *fbatch)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjwÙh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjsÙubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„Ùh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjsÙubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj•Ùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj’Ùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j—ÙŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj]ÙsbŒc.filemap_get_folios_tag”†”asbuh1hhjsÙubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµÙh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjsÙubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÃÙh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjsÙubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjÐÙh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjsÙubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjoÙubj )�”}”(hŒpgoff_t *start”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjìÙh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjéÙubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jîÙŒmodname”NŒ classname”Njpjs)�”}”jv]”j±ÙŒc.filemap_get_folios_tag”†”asbuh1hhjåÙubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Úh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjåÙubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjåÙubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj%Úh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjåÙubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjoÙubj )�”}”(hŒ pgoff_t end”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjAÚh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>Úubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jCÚŒmodname”NŒ classname”Njpjs)�”}”jv]”j±ÙŒc.filemap_get_folios_tag”†”asbuh1hhj:ÚubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_Úh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj:Úubj)�”}”(hŒend”h]”hŒend”…”�”}”(hjmÚh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj:Úubeh}”(h]”h ]”h"]”h$•]”h&]”Œnoemph”ˆjjuh1j hjoÙubj )�”}”(hŒ xa_mark_t tag”h]”(h)�”}”(hhh]”j)�”}”(hŒ xa_mark_t”h]”hŒ xa_mark_t”…”�”}”(hj‰Úh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj†Úubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j‹ÚŒmodname”NŒ classname”Njpjs)�”}”jv]”j±ÙŒc.filemap_get_folios_tag”†”asbuh1hhj‚ÚubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§Úh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj‚Úubj)�”}”(hŒtag”h]”hŒtag”…”�”}”(hjµÚh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‚Úubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjoÙubj )�”}”(hŒstruct folio_batch *fbatch”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÎÚh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÊÚubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛÚh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÊÚubh)�”}”(hhh]”j)�”}”(hŒ folio_batch”h]”hŒ folio_batch”…”�”}”(hjìÚh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjéÚubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jîÚŒmodname”NŒ classname”Njpjs)�”}”jv]”j±ÙŒc.filemap_get_folios_tag”†”asbuh1hhjÊÚubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Ûh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÊÚubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÊÚubj)�”}”(hŒfbatch”h]”hŒfbatch”…”�”}”(hj%Ûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÊÚubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjoÙubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj6Ùh²hh³jHÙh´M ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj2Ùh²hh³jHÙh´M ubah}”(h]”j-Ùah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jHÙh´M hj/Ùh²hubj4)�”}”(hhh]”jM)�”}”(hŒ&Get a batch of folios matching **tag**”h]”(hŒGet a batch of folios matching ”…”�”}”(hjOÛh²hh³Nh´NubjŽ)�”}”(hŒ**tag**”h]”hŒtag”…”�”}”(hjWÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjOÛubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M hjLÛh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj/Ùh²hh³jHÙh´M ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjuÛjHjuÛjI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hXU**Parameters** ``struct address_space *mapping`` The address_space to search ``pgoff_t *start`` The starting page index ``pgoff_t end`` The final page index (inclusive) ``xa_mark_t tag`` The tag index ``struct folio_batch *fbatch`` The batch to fill **Description** The first folio may start before **start**; if it does, it will contain **start**. The final folio may extend beyond **end**; if it does, it will contain **end**. The folios have ascending indices. There may be gaps between the folios if there are indices which have no folio in the page cache. If folios are added to or removed from the page cache while this is running, they may or may not be found by this call. Only returns folios that are tagged with **tag**. **Return** The number of folios found. Also update **start** to index the next folio for traversal.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÛh]”hŒ Parameters”…”�”}”(hj�Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj}Ûubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M hjyÛubj¤)�”}”(hhh]”(j©)�”}”(hŒ>``struct address_space *mapping`` The address_space to search ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjžÛh]”hŒstruct address_space *mapping”…”�”}”(hj Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjœÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M hj˜ÛubjÉ)�”}”(hhh]”jM)�”}”(hŒThe address_space to search”h]”hŒThe address_space to search”…”�”}”(hj·Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j³Ûh´M hj´Ûubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj˜Ûubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j³Ûh´M hj•Ûubj©)�”}”(hŒ+``pgoff_t *start`` The starting page index ”h]”(j¯)�”}”(hŒ``pgoff_t *start``”h]”jS)�”}”(hj×Ûh]”hŒpgoff_t *start”…”�”}”(hjÙÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÕÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M hjÑÛubjÉ)�”}”(hhh]”jM)�”}”(hŒThe starting page index”h]”hŒThe starting page index”…”�”}”(hjðÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jìÛh´M hjíÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÑÛubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jìÛh´M hj•Ûubj©)�”}”(hŒ1``pgoff_t end`` The final page index (inclusive) ”h]”(j¯)�”}”(hŒ``pgoff_t end``”h]”jS)�”}”(hjÜh]”hŒ pgoff_t end”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M hj ÜubjÉ)�”}”(hhh]”jM)�”}”(hŒ The final page index (inclusive)”h]”hŒ The final page index (inclusive)”…”�”}”(hj)Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j%Üh´M hj&Üubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj Üubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j%Üh´M hj•Ûubj©)�”}”(hŒ ``xa_mark_t tag`` The tag index ”h]”(j¯)�”}”(hŒ``xa_mark_t tag``”h]”jS)�”}”(hjIÜh]”hŒ xa_mark_t tag”…”�”}”(hjKÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjGÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M hjCÜubjÉ)�”}”(hhh]”jM)�”}”(hŒ The tag index”h]”hŒ The tag index”…”�”}”(hjbÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j^Üh´M hj_Üubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjCÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j^Üh´M hj•Ûubj©)�”}”(hŒ1``struct folio_batch *fbatch`` The batch to fill ”h]”(j¯)�”}”(hŒ``struct folio_batch *fbatch``”h]”jS)�”}”(hj‚Üh]”hŒstruct folio_batch *fbatch”…”�”}”(hj„Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj€Üubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M hj|ÜubjÉ)�”}”(hhh]”jM)�”}”(hŒThe batch to fill”h]”hŒThe batch to fill”…”�”}”(hj›Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j—Üh´M hj˜Üubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj|Üubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j—Üh´M hj•Ûubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjyÛubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj½Üh]”hŒ Description”…”�”}”(hj¿Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj»Üubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M hjyÛubjM)�”}”(hXÔThe first folio may start before **start**; if it does, it will contain **start**. The final folio may extend beyond **end**; if it does, it will contain **end**. The folios have ascending indices. There may be gaps between the folios if there are indices which have no folio in the page cache. If folios are added to or removed from the page cache while this is running, they may or may not be found by this call. Only returns folios that are tagged with **tag**.”h]”(hŒ!The first folio may start before ”…”�”}”(hjÓÜh²hh³Nh´NubjŽ)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hjÛÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÓÜubhŒ; if it does, it will contain ”…”�”}”(hjÓÜh²hh³Nh´NubjŽ)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hjíÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÓÜubhŒ%. The final folio may extend beyond ”…”�”}”(hjÓÜh²hh³Nh´NubjŽ)�”}”(hŒ**end**”h]”hŒend”…”�”}”(hjÿÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÓÜubhŒ; if it does, it will contain ”…”�”}”(hjÓÜh²hh³Nh´NubjŽ)�”}”(hŒ**end**”h]”hŒend”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÓÜubhX*. The folios have ascending indices. There may be gaps between the folios if there are indices which have no folio in the page cache. If folios are added to or removed from the page cache while this is running, they may or may not be found by this call. Only returns folios that are tagged with ”…”�”}”(hjÓÜh²hh³Nh´NubjŽ)�”}”(hŒ**tag**”h]”hŒtag”…”�”}”(hj#Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÓÜubhŒ.”…”�”}”(hjÓÜh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M hjyÛubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M& hjyÛubjM)�”}”(hŒXThe number of folios found. Also update **start** to index the next folio for traversal.”h]”(hŒ(The number of folios found. Also update ”…”�”}”(hjTÝh²hh³Nh´NubjŽ)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hj\Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjTÝubhŒ' to index the next folio for traversal.”…”�”}”(hjTÝh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.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”]”(héŒfilemap_read (C function)”Œc.filemap_read”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒVssize_t filemap_read (struct kiocb *iocb, struct iov_iter *iter, ssize_t already_read)”h]”hù)�”}”(hŒUssize_t filemap_read(struct kiocb *iocb, struct iov_iter *iter, ssize_t already_read)”h]”(h)�”}”(hhh]”j)�”}”(hŒssize_t”h]”hŒssize_t”…”�”}”(hj˜Ýh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj•Ýubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jšÝŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒ filemap_read”sbŒc.filemap_read”†”asbuh1hhj‘Ýh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M× ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºÝh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj‘Ýh²hh³j¹Ýh´M× ubhÿ)�”}”(hŒ filemap_read”h]”j)�”}”(hj¶Ýh]”hŒ filemap_read”…”�”}”(hjÌÝh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÈÝubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj‘Ýh²hh³j¹Ýh´M× ubj )�”}”(hŒA(struct kiocb *iocb, struct iov_iter *iter, ssize_t already_read)”h]”(j )�”}”(hŒstruct kiocb *iocb”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjçÝh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjãÝubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjôÝh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjãÝubh)�”}”(hhh]”j)�”}”(hŒkiocb”h]”hŒkiocb”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÞubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÞŒmodname”NŒ classname”Njpjs)�”}”jv]”j´ÝŒc.filemap_read”†”asbuh1hhjãÝubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#Þh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjãÝubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj1Þh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjãÝubj)�”}”(hŒiocb”h]”hŒiocb”…”�”}”(hj>Þh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjãÝubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjßÝubj )�”}”(hŒstruct iov_iter *iter”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjWÞh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjSÞubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdÞh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjSÞubh)�”}”(hhh]”j)�”}”(hŒiov_iter”h]”hŒiov_iter”…”�”}”(hjuÞh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjrÞubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jwÞŒmodname”NŒ classname”Njpjs)�”}”jv]”j´ÝŒc.filemap_read”†”asbuh1hhjSÞubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“Þh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjSÞubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¡Þh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjSÞubj)�”}”(hŒiter”h]”hŒiter”…”�”}”(hj®Þh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjSÞubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjßÝubj )�”}”(hŒssize_t already_read”h]”(h)�”}”(hhh]”j)�”}”(hŒssize_t”h]”hŒssize_t”…”�”}”(hjÊÞh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÇÞubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÌÞŒmodname”NŒ classname”Njpjs)�”}”jv]”j´ÝŒc.filemap_read”†”asbuh1hhjÃÞubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèÞh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÃÞubj)�”}”(hŒ already_read”h]”hŒ already_read”…”�”}”(hjöÞh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÃÞubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjßÝubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj‘Ýh²hh³j¹Ýh´M× ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj�Ýh²hh³j¹Ýh´M× ubah}”(h]”jˆÝah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¹Ýh´M× hjŠÝh²hubj4)�”}”(hhh]”jM)�”}”(hŒRead data from the page cache.”h]”hŒRead data from the page cache.”…”�”}”(hj ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M× hjßh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjŠÝh²hh³j¹Ýh´M× ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj8ßjHj8ßjI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hX**Parameters** ``struct kiocb *iocb`` The iocb to read. ``struct iov_iter *iter`` Destination for the data. ``ssize_t already_read`` Number of bytes already read by the caller. **Description** Copies data from the page cache. If the data is not currently present, uses the readahead and read_folio address_space operations to fetch it. **Return** Total number of bytes copied, including those already read by the caller. If an error happens before any bytes are copied, returns a negative error number.”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÛ hj<ßubj¤)�”}”(hhh]”(j©)�”}”(hŒ)``struct kiocb *iocb`` The iocb to read. ”h]”(j¯)�”}”(hŒ``struct kiocb *iocb``”h]”jS)�”}”(hjaßh]”hŒstruct kiocb *iocb”…”�”}”(hjcßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj_ßubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MØ hj[ßubjÉ)�”}”(hhh]”jM)�”}”(hŒThe iocb to read.”h]”hŒThe iocb to read.”…”�”}”(hjzßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jvßh´MØ hjwßubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj[ßubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jvßh´MØ hjXßubj©)�”}”(hŒ4``struct iov_iter *iter`` Destination for the data. ”h]”(j¯)�”}”(hŒ``struct iov_iter *iter``”h]”jS)�”}”(hjšßh]”hŒstruct iov_iter *iter”…”�”}”(hjœßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj˜ßubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÙ hj”ßubjÉ)�”}”(hhh]”jM)�”}”(hŒDestination for the data.”h]”hŒDestination for the data.”…”�”}”(hj³ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¯ßh´MÙ hj°ßubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj”ßubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¯ßh´MÙ hjXßubj©)�”}”(hŒE``ssize_t already_read`` Number of bytes already read by the caller. ”h]”(j¯)�”}”(hŒ``ssize_t already_read``”h]”jS)�”}”(hjÓßh]”hŒssize_t already_read”…”�”}”(hjÕßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÑßubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÚ hjÍßubjÉ)�”}”(hhh]”jM)�”}”(hŒ+Number of bytes already read by the caller.”h]”hŒ+Number of bytes already read by the caller.”…”�”}”(hjìßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jèßh´MÚ hjéßubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÍßubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jèßh´MÚ hjXßubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj<ßubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjàh]”hŒ Description”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj àubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÜ hj<ßubjM)�”}”(hŒ�Copies data from the page cache. If the data is not currently present, uses the readahead and read_folio address_space operations to fetch it.”h]”hŒ�Copies data from the page cache. If the data is not currently present, uses the readahead and read_folio address_space operations to fetch it.”…”�”}”(hj$àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÛ hj<ßubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj5àh]”hŒReturn”…”�”}”(hj7àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj3àubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÞ hj<ßubjM)�”}”(hŒœTotal number of bytes copied, including those already read by the caller. If an error happens before any bytes are copied, returns a negative error number.”h]”hŒœTotal number of bytes copied, including those already read by the caller. If an error happens before any bytes are copied, returns a negative error number.”…”�”}”(hjKàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.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”]”(héŒ#generic_file_read_iter (C function)”Œc.generic_file_read_iter”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒJssize_t generic_file_read_iter (struct kiocb *iocb, struct iov_iter *iter)”h]”hù)�”}”(hŒIssize_t generic_file_read_iter(struct kiocb *iocb, struct iov_iter *iter)”h]”(h)�”}”(hhh]”j)�”}”(hŒssize_t”h]”hŒssize_t”…”�”}”(hj}àh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjzàubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jàŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒgeneric_file_read_iter”sbŒc.generic_file_read_iter”†”asbuh1hhjvàh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MŠ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸàh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjvàh²hh³jžàh´MŠ ubhÿ)�”}”(hŒgeneric_file_read_iter”h]”j)�”}”(hj›àh]”hŒgeneric_file_read_iter”…”�”}”(hj±àh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj­àubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjvàh²hh³jžàh´MŠ ubj )�”}”(hŒ+(struct kiocb *iocb, struct iov_iter *iter)”h]”(j )�”}”(hŒstruct kiocb *iocb”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÌàh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÈàubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙàh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÈàubh)�”}”(hhh]”j)�”}”(hŒkiocb”h]”hŒkiocb”…”�”}”(hjêàh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjçàubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jìàŒmodname”NŒ classname”Njpjs)�”}”jv]”j™àŒc.generic_file_read_iter”†”asbuh1hhjÈàubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÈàubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÈàubj)�”}”(hŒiocb”h]”hŒiocb”…”�”}”(hj#áh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÈàubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÄàubj )�”}”(hŒstruct iov_iter *iter”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj<áh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj8áubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIáh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj8áubh)�”}”(hhh]”j)�”}”(hŒiov_iter”h]”hŒiov_iter”…”�”}”(hjZáh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjWáubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j\áŒmodname”NŒ classname”Njpjs)�”}”jv]”j™àŒc.generic_file_read_iter”†”asbuh1hhj8áubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxáh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj8áubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj†áh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj8áubj)�”}”(hŒiter”h]”hŒiter”…”�”}”(hj“áh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj8áubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÄàubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjvàh²hh³jžàh´MŠ ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjràh²hh³jžàh´MŠ ubah}”(h]”jmàah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jžàh´MŠ hjoàh²hubj4)�”}”(hhh]”jM)�”}”(hŒgeneric filesystem read routine”h]”hŒgeneric filesystem read routine”…”�”}”(hj½áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MŠ hjºáh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjoàh²hh³jžàh´MŠ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÕájHjÕájI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hX**Parameters** ``struct kiocb *iocb`` kernel I/O control block ``struct iov_iter *iter`` destination for the data read **Description** This is the "read_iter()" routine for all filesystems that can use the page cache directly. The IOCB_NOWAIT flag in iocb->ki_flags indicates that -EAGAIN shall be returned when no data can be read without waiting for I/O requests to complete; it doesn't prevent readahead. The IOCB_NOIO flag in iocb->ki_flags indicates that no new I/O requests shall be made for the read or for readahead. When no data can be read, -EAGAIN shall be returned. When readahead would be triggered, a partial, possibly empty read shall be returned. **Return** * number of bytes copied, even for partial reads * negative error code (or 0 if IOCB_NOIO) if nothing was read”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjßáh]”hŒ Parameters”…”�”}”(hjááh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÝáubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MŽ hjÙáubj¤)�”}”(hhh]”(j©)�”}”(hŒ0``struct kiocb *iocb`` kernel I/O control block ”h]”(j¯)�”}”(hŒ``struct kiocb *iocb``”h]”jS)�”}”(hjþáh]”hŒstruct kiocb *iocb”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjüáubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M‹ hjøáubjÉ)�”}”(hhh]”jM)�”}”(hŒkernel I/O control block”h]”hŒkernel I/O control block”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jâh´M‹ hjâubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjøáubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jâh´M‹ hjõáubj©)�”}”(hŒ8``struct iov_iter *iter`` destination for the data read ”h]”(j¯)�”}”(hŒ``struct iov_iter *iter``”h]”jS)�”}”(hj7âh]”hŒstruct iov_iter *iter”…”�”}”(hj9âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj5âubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MŒ hj1âubjÉ)�”}”(hhh]”jM)�”}”(hŒdestination for the data read”h]”hŒdestination for the data read”…”�”}”(hjPâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jLâh´MŒ hjMâubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj1âubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jLâh´MŒ hjõáubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÙáubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MŽ hjÙáubjM)�”}”(hŒ[This is the "read_iter()" routine for all filesystems that can use the page cache directly.”h]”hŒ_This is the “read_iter()â€� routine for all filesystems that can use the page cache directly.”…”�”}”(hjˆâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M� hjÙáubjM)�”}”(hŒ´The IOCB_NOWAIT flag in iocb->ki_flags indicates that -EAGAIN shall be returned when no data can be read without waiting for I/O requests to complete; it doesn't prevent readahead.”h]”hŒ¶The IOCB_NOWAIT flag in iocb->ki_flags indicates that -EAGAIN shall be returned when no data can be read without waiting for I/O requests to complete; it doesn’t prevent readahead.”…”�”}”(hj—âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M� hjÙáubjM)�”}”(hXThe IOCB_NOIO flag in iocb->ki_flags indicates that no new I/O requests shall be made for the read or for readahead. When no data can be read, -EAGAIN shall be returned. When readahead would be triggered, a partial, possibly empty read shall be returned.”h]”hXThe IOCB_NOIO flag in iocb->ki_flags indicates that no new I/O requests shall be made for the read or for readahead. When no data can be read, -EAGAIN shall be returned. When readahead would be triggered, a partial, possibly empty read shall be returned.”…”�”}”(hj¦âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M” hjÙáubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M™ hjÙáubjaW)�”}”(hhh]”(jÕ/)�”}”(hŒ.number of bytes copied, even for partial reads”h]”jM)�”}”(hjÒâh]”hŒ.number of bytes copied, even for partial reads”…”�”}”(hjÔâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mš hjÐâubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjÍâubjÕ/)�”}”(hŒ;negative error code (or 0 if IOCB_NOIO) if nothing was read”h]”jM)�”}”(hjêâh]”hŒ;negative error code (or 0 if IOCB_NOIO) if nothing was read”…”�”}”(hjìâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M› hjèâubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjÍâubeh}”(h]”h ]”h"]”h$]”h&]”jƒWjI uh1j`Wh³jáâh´Mš hjÙáubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÀœh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ filemap_splice_read (C function)”Œc.filemap_splice_read”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒyssize_t filemap_splice_read (struct file *in, loff_t *ppos, struct pipe_inode_info *pipe, size_t len, unsigned int flags)”h]”hù)�”}”(hŒxssize_t filemap_splice_read(struct file *in, loff_t *ppos, struct pipe_inode_info *pipe, size_t len, unsigned int flags)”h]”(h)�”}”(hhh]”j)�”}”(hŒssize_t”h]”hŒssize_t”…”�”}”(hj)ãh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj&ãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j+ãŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒfilemap_splice_read”sbŒc.filemap_splice_read”†”asbuh1hhj"ãh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mî ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKãh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj"ãh²hh³jJãh´Mî ubhÿ)�”}”(hŒfilemap_splice_read”h]”j)�”}”(hjGãh]”hŒfilemap_splice_read”…”�”}”(hj]ãh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjYãubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj"ãh²hh³jJãh´Mî ubj )�”}”(hŒ](struct file *in, loff_t *ppos, struct pipe_inode_info *pipe, size_t len, unsigned int flags)”h]”(j )�”}”(hŒstruct file *in”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjxãh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjtãubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…ãh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjtãubh)�”}”(hhh]”j)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj–ãh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj“ãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j˜ãŒmodname”NŒ classname”Njpjs)�”}”jv]”jEãŒc.filemap_splice_read”†”asbuh1hhjtãubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´ãh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjtãubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÂãh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjtãubj)�”}”(hŒin”h]”hŒin”…”�”}”(hjÏãh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjtãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjpãubj )�”}”(hŒ loff_t *ppos”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjëãh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjèãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jíãŒmodname”NŒ classname”Njpjs)�”}”jv]”jEãŒc.filemap_splice_read”†”asbuh1hhjäãubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj äh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjäãubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjäãubj)�”}”(hŒppos”h]”hŒppos”…”�”}”(hj$äh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjäãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjpãubj )�”}”(hŒstruct pipe_inode_info *pipe”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj=äh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj9äubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJäh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj9äubh)�”}”(hhh]”j)�”}”(hŒpipe_inode_info”h]”hŒpipe_inode_info”…”�”}”(hj[äh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjXäubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j]äŒmodname”NŒ classname”Njpjs)�”}”jv]”jEãŒc.filemap_splice_read”†”asbuh1hhj9äubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyäh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj9äubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj‡äh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj9äubj)�”}”(hŒpipe”h]”hŒpipe”…”�”}”(hj”äh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj9äubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjpãubj )�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj°äh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj­äubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j²äŒmodname”NŒ classname”Njpjs)�”}”jv]”jEãŒc.filemap_splice_read”†”asbuh1hhj©äubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎäh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj©äubj)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjÜäh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj©äubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjpãubj )�”}”(hŒunsigned int flags”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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ñäubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(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ñäubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj-åh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñäubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjpãubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj"ãh²hh³jJãh´Mî ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjãh²hh³jJãh´Mî ubah}”(h]”jãah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jJãh´Mî hjãh²hubj4)�”}”(hhh]”jM)�”}”(hŒ/Splice data from a file's pagecache into a pipe”h]”hŒ1Splice data from a file’s pagecache into a pipe”…”�”}”(hjWåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mî hjTåh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjãh²hh³jJãh´Mî ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjoåjHjoåjI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hXV**Parameters** ``struct file *in`` The file to read from ``loff_t *ppos`` Pointer to the file position to read from ``struct pipe_inode_info *pipe`` The pipe to splice into ``size_t len`` The amount to splice ``unsigned int flags`` The SPLICE_F_* flags **Description** This function gets folios from a file's pagecache and splices them into the pipe. Readahead will be called as necessary to fill more folios. This may be used for blockdevs also. **Return** On success, the number of bytes read will be returned and ***ppos** will be updated if appropriate; 0 will be returned if there is no more data to be read; -EAGAIN will be returned if the pipe had no space, and some other negative error code will be returned on error. A short read may occur if the pipe has insufficient space, we reach the end of the data or we hit a hole.”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mò hjsåubj¤)�”}”(hhh]”(j©)�”}”(hŒ*``struct file *in`` The file to read from ”h]”(j¯)�”}”(hŒ``struct file *in``”h]”jS)�”}”(hj˜åh]”hŒstruct file *in”…”�”}”(hjšåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj–åubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mï hj’åubjÉ)�”}”(hhh]”jM)�”}”(hŒThe file to read from”h]”hŒThe file to read from”…”�”}”(hj±åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j­åh´Mï hj®åubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj’åubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j­åh´Mï hj�åubj©)�”}”(hŒ;``loff_t *ppos`` Pointer to the file position to read from ”h]”(j¯)�”}”(hŒ``loff_t *ppos``”h]”jS)�”}”(hjÑåh]”hŒ loff_t *ppos”…”�”}”(hjÓåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÏåubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mð hjËåubjÉ)�”}”(hhh]”jM)�”}”(hŒ)Pointer to the file position to read from”h]”hŒ)Pointer to the file position to read from”…”�”}”(hjêåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jæåh´Mð hjçåubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjËåubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jæåh´Mð hj�åubj©)�”}”(hŒ9``struct pipe_inode_info *pipe`` The pipe to splice into ”h]”(j¯)�”}”(hŒ ``struct pipe_inode_info *pipe``”h]”jS)�”}”(hj æh]”hŒstruct pipe_inode_info *pipe”…”�”}”(hj æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjæubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mñ hjæubjÉ)�”}”(hhh]”jM)�”}”(hŒThe pipe to splice into”h]”hŒThe pipe to splice into”…”�”}”(hj#æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jæh´Mñ hj æubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjæubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jæh´Mñ hj�åubj©)�”}”(hŒ$``size_t len`` The amount to splice ”h]”(j¯)�”}”(hŒ``size_t len``”h]”jS)�”}”(hjCæh]”hŒ size_t len”…”�”}”(hjEæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjAæubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mò hj=æubjÉ)�”}”(hhh]”jM)�”}”(hŒThe amount to splice”h]”hŒThe amount to splice”…”�”}”(hj\æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jXæh´Mò hjYæubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj=æubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jXæh´Mò hj�åubj©)�”}”(hŒ,``unsigned int flags`` The SPLICE_F_* flags ”h]”(j¯)�”}”(hŒ``unsigned int flags``”h]”jS)�”}”(hj|æh]”hŒunsigned int flags”…”�”}”(hj~æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjzæubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mó hjvæubjÉ)�”}”(hhh]”jM)�”}”(hŒThe SPLICE_F_* flags”h]”hŒThe SPLICE_F_* flags”…”�”}”(hj•æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‘æh´Mó hj’æubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjvæubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‘æh´Mó hj�åubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjsåubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj·æh]”hŒ Description”…”�”}”(hj¹æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjµæubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mõ hjsåubjM)�”}”(hŒ³This function gets folios from a file's pagecache and splices them into the pipe. Readahead will be called as necessary to fill more folios. This may be used for blockdevs also.”h]”hŒµThis function gets folios from a file’s pagecache and splices them into the pipe. Readahead will be called as necessary to fill more folios. This may be used for blockdevs also.”…”�”}”(hjÍæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mô hjsåubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mø hjsåubjM)�”}”(hXwOn success, the number of bytes read will be returned and ***ppos** will be updated if appropriate; 0 will be returned if there is no more data to be read; -EAGAIN will be returned if the pipe had no space, and some other negative error code will be returned on error. A short read may occur if the pipe has insufficient space, we reach the end of the data or we hit a hole.”h]”(hŒ:On success, the number of bytes read will be returned and ”…”�”}”(hjôæh²hh³Nh´NubjŽ)�”}”(hŒ ***ppos**”h]”hŒ*ppos”…”�”}”(hjüæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjôæubhX4 will be updated if appropriate; 0 will be returned if there is no more data to be read; -EAGAIN will be returned if the pipe had no space, and some other negative error code will be returned on error. A short read may occur if the pipe has insufficient space, we reach the end of the data or we hit a hole.”…”�”}”(hjôæh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mù hjsåubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÀœh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfilemap_fault (C function)”Œc.filemap_fault”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ/vm_fault_t filemap_fault (struct vm_fault *vmf)”h]”hù)�”}”(hŒ.vm_fault_t filemap_fault(struct vm_fault *vmf)”h]”(h)�”}”(hhh]”j)�”}”(hŒ vm_fault_t”h]”hŒ vm_fault_t”…”�”}”(hj8çh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj5çubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j:çŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒ filemap_fault”sbŒc.filemap_fault”†”asbuh1hhj1çh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÍ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZçh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj1çh²hh³jYçh´MÍ ubhÿ)�”}”(hŒ filemap_fault”h]”j)�”}”(hjVçh]”hŒ filemap_fault”…”�”}”(hjlçh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjhçubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj1çh²hh³jYçh´MÍ ubj )�”}”(hŒ(struct vm_fault *vmf)”h]”j )�”}”(hŒstruct vm_fault *vmf”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj‡çh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjƒçubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”çh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjƒçubh)�”}”(hhh]”j)�”}”(hŒvm_fault”h]”hŒvm_fault”…”�”}”(hj¥çh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¢çubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j§çŒmodname”NŒ classname”Njpjs)�”}”jv]”jTçŒc.filemap_fault”†”asbuh1hhjƒçubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃçh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjƒçubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÑçh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjƒçubj)�”}”(hŒvmf”h]”hŒvmf”…”�”}”(hjÞçh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjƒçubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjçubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj1çh²hh³jYçh´MÍ ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj-çh²hh³jYçh´MÍ ubah}”(h]”j(çah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jYçh´MÍ hj*çh²hubj4)�”}”(hhh]”jM)�”}”(hŒ)read in file data for page fault handling”h]”hŒ)read in file data for page fault handling”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÍ hjèh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj*çh²hh³jYçh´MÍ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj èjHj èjI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hX-**Parameters** ``struct vm_fault *vmf`` struct vm_fault containing details of the fault **Description** filemap_fault() is invoked via the vma operations vector for a mapped memory region to read in file data during a page fault. The goto's are kind of ugly, but this streamlines the normal case of having it in the page cache, and handles the special cases reasonably without having a lot of duplicated code. vma->vm_mm->mmap_lock must be held on entry. If our return value has VM_FAULT_RETRY set, it's because the mmap_lock may be dropped before doing I/O or by lock_folio_maybe_drop_mmap(). If our return value does not have VM_FAULT_RETRY set, the mmap_lock has not been released. We never return with VM_FAULT_RETRY and a bit from VM_FAULT_ERROR set. **Return** bitwise-OR of ``VM_FAULT_`` codes.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj*èh]”hŒ Parameters”…”�”}”(hj,èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj(èubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÑ hj$èubj¤)�”}”(hhh]”j©)�”}”(hŒI``struct vm_fault *vmf`` struct vm_fault containing details of the fault ”h]”(j¯)�”}”(hŒ``struct vm_fault *vmf``”h]”jS)�”}”(hjIèh]”hŒstruct vm_fault *vmf”…”�”}”(hjKèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjGèubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÎ hjCèubjÉ)�”}”(hhh]”jM)�”}”(hŒ/struct vm_fault containing details of the fault”h]”hŒ/struct vm_fault containing details of the fault”…”�”}”(hjbèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j^èh´MÎ hj_èubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjCèubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j^èh´MÎ hj@èubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj$èubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj„èh]”hŒ Description”…”�”}”(hj†èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‚èubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÐ hj$èubjM)�”}”(hŒ}filemap_fault() is invoked via the vma operations vector for a mapped memory region to read in file data during a page fault.”h]”hŒ}filemap_fault() is invoked via the vma operations vector for a mapped memory region to read in file data during a page fault.”…”�”}”(hjšèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÏ hj$èubjM)�”}”(hŒ³The goto's are kind of ugly, but this streamlines the normal case of having it in the page cache, and handles the special cases reasonably without having a lot of duplicated code.”h]”hŒµThe goto’s are kind of ugly, but this streamlines the normal case of having it in the page cache, and handles the special cases reasonably without having a lot of duplicated code.”…”�”}”(hj©èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÒ hj$èubjM)�”}”(hŒ,vma->vm_mm->mmap_lock must be held on entry.”h]”hŒ,vma->vm_mm->mmap_lock must be held on entry.”…”�”}”(hj¸èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÖ hj$èubjM)�”}”(hŒŠIf our return value has VM_FAULT_RETRY set, it's because the mmap_lock may be dropped before doing I/O or by lock_folio_maybe_drop_mmap().”h]”hŒŒIf our return value has VM_FAULT_RETRY set, it’s because the mmap_lock may be dropped before doing I/O or by lock_folio_maybe_drop_mmap().”…”�”}”(hjÇèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MØ hj$èubjM)�”}”(hŒZIf our return value does not have VM_FAULT_RETRY set, the mmap_lock has not been released.”h]”hŒZIf our return value does not have VM_FAULT_RETRY set, the mmap_lock has not been released.”…”�”}”(hjÖèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÛ hj$èubjM)�”}”(hŒFWe never return with VM_FAULT_RETRY and a bit from VM_FAULT_ERROR set.”h]”hŒFWe never return with VM_FAULT_RETRY and a bit from VM_FAULT_ERROR set.”…”�”}”(hjåèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÞ hj$èubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mà hj$èubjM)�”}”(hŒ"bitwise-OR of ``VM_FAULT_`` codes.”h]”(hŒbitwise-OR of ”…”�”}”(hj éh²hh³Nh´NubjS)�”}”(hŒ ``VM_FAULT_``”h]”hŒ VM_FAULT_”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj éubhŒ codes.”…”�”}”(hj éh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.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”]”(héŒread_cache_folio (C function)”Œc.read_cache_folio”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒrstruct folio * read_cache_folio (struct address_space *mapping, pgoff_t index, filler_t filler, struct file *file)”h]”hù)�”}”(hŒpstruct folio *read_cache_folio(struct address_space *mapping, pgoff_t index, filler_t filler, struct file *file)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjMéh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjIéh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MJubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[éh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjIéh²hh³jZéh´MJubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjléh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjiéubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jnéŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒread_cache_folio”sbŒc.read_cache_folio”†”asbuh1hhjIéh²hh³jZéh´MJubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�éh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjIéh²hh³jZéh´MJubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj›éh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjIéh²hh³jZéh´MJubhÿ)�”}”(hŒread_cache_folio”h]”j)�”}”(hjŠéh]”hŒread_cache_folio”…”�”}”(hj¬éh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¨éubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjIéh²hh³jZéh´MJubj )�”}”(hŒR(struct address_space *mapping, pgoff_t index, filler_t filler, struct file *file)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÇéh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÃéubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔéh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÃéubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjåéh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjâéubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jçéŒmodname”NŒ classname”Njpjs)�”}”jv]”jˆéŒc.read_cache_folio”†”asbuh1hhjÃéubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÃéubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÃéubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÃéubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¿éubj )�”}”(hŒ pgoff_t index”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hj:êh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7êubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j<êŒmodname”NŒ classname”Njpjs)�”}”jv]”jˆéŒc.read_cache_folio”†”asbuh1hhj3êubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXêh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj3êubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(hjfêh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3êubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¿éubj )�”}”(hŒfiller_t filler”h]”(h)�”}”(hhh]”j)�”}”(hŒfiller_t”h]”hŒfiller_t”…”�”}”(hj‚êh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjêubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j„êŒmodname”NŒ classname”Njpjs)�”}”jv]”jˆéŒc.read_cache_folio”†”asbuh1hhj{êubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj êh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj{êubj)�”}”(hŒfiller”h]”hŒfiller”…”�”}”(hj®êh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj{êubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¿éubj )�”}”(hŒstruct file *file”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÇêh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÃêubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔêh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÃêubh)�”}”(hhh]”j)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjåêh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjâêubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jçêŒmodname”NŒ classname”Njpjs)�”}”jv]”jˆéŒc.read_cache_folio”†”asbuh1hhjÃêubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÃêubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÃêubj)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÃêubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¿éubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjIéh²hh³jZéh´MJubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjEéh²hh³jZéh´MJubah}”(h]”j@éah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jZéh´MJhjBéh²hubj4)�”}”(hhh]”jM)�”}”(hŒ(Read into page cache, fill it if needed.”h]”hŒ(Read into page cache, fill it if needed.”…”�”}”(hjHëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MJhjEëh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjBéh²hh³jZéh´MJubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj`ëjHj`ëjI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hX™**Parameters** ``struct address_space *mapping`` The address_space to read from. ``pgoff_t index`` The index to read. ``filler_t filler`` Function to perform the read, or NULL to use aops->read_folio(). ``struct file *file`` Passed to filler function, may be NULL if not required. **Description** Read one page into the page cache. If it succeeds, the folio returned will contain **index**, but it may not be the first page of the folio. If the filler function returns an error, it will be returned to the caller. **Context** May sleep. Expects mapping->invalidate_lock to be held. **Return** An uptodate folio on success, ERR_PTR() on failure.”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MNhjdëubj¤)�”}”(hhh]”(j©)�”}”(hŒB``struct address_space *mapping`` The address_space to read from. ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj‰ëh]”hŒstruct address_space *mapping”…”�”}”(hj‹ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‡ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MKhjƒëubjÉ)�”}”(hhh]”jM)�”}”(hŒThe address_space to read from.”h]”hŒThe address_space to read from.”…”�”}”(hj¢ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jžëh´MKhjŸëubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjƒëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jžëh´MKhj€ëubj©)�”}”(hŒ%``pgoff_t index`` The index to read. ”h]”(j¯)�”}”(hŒ``pgoff_t index``”h]”jS)�”}”(hjÂëh]”hŒ pgoff_t index”…”�”}”(hjÄëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÀëubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MLhj¼ëubjÉ)�”}”(hhh]”jM)�”}”(hŒThe index to read.”h]”hŒThe index to read.”…”�”}”(hjÛëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j×ëh´MLhjØëubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¼ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j×ëh´MLhj€ëubj©)�”}”(hŒU``filler_t filler`` Function to perform the read, or NULL to use aops->read_folio(). ”h]”(j¯)�”}”(hŒ``filler_t filler``”h]”jS)�”}”(hjûëh]”hŒfiller_t filler”…”�”}”(hjýëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjùëubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MMhjõëubjÉ)�”}”(hhh]”jM)�”}”(hŒ@Function to perform the read, or NULL to use aops->read_folio().”h]”hŒ@Function to perform the read, or NULL to use aops->read_folio().”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jìh´MMhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjõëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jìh´MMhj€ëubj©)�”}”(hŒN``struct file *file`` Passed to filler function, may be NULL if not required. ”h]”(j¯)�”}”(hŒ``struct file *file``”h]”jS)�”}”(hj4ìh]”hŒstruct file *file”…”�”}”(hj6ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj2ìubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MNhj.ìubjÉ)�”}”(hhh]”jM)�”}”(hŒ7Passed to filler function, may be NULL if not required.”h]”hŒ7Passed to filler function, may be NULL if not required.”…”�”}”(hjMìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jIìh´MNhjJìubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj.ìubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jIìh´MNhj€ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjdëubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MPhjdëubjM)�”}”(hŒ�Read one page into the page cache. If it succeeds, the folio returned will contain **index**, but it may not be the first page of the folio.”h]”(hŒTRead one page into the page cache. If it succeeds, the folio returned will contain ”…”�”}”(hj…ìh²hh³Nh´NubjŽ)�”}”(hŒ **index**”h]”hŒindex”…”�”}”(hj�ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj…ìubhŒ0, but it may not be the first page of the folio.”…”�”}”(hj…ìh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MOhjdëubjM)�”}”(hŒKIf the filler function returns an error, it will be returned to the caller.”h]”hŒKIf the filler function returns an error, it will be returned to the caller.”…”�”}”(hj¦ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MRhjdëubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MUhjdëubjM)�”}”(hŒ8May sleep. Expects mapping->invalidate_lock to be held.”h]”hŒ8May sleep. Expects mapping->invalidate_lock to be held.”…”�”}”(hjÍìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MVhjdëubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MXhjdëubjM)�”}”(hŒ3An uptodate folio on success, ERR_PTR() on failure.”h]”hŒ3An uptodate folio on success, ERR_PTR() on failure.”…”�”}”(hjôìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MWhjdëubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÀœh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ#mapping_read_folio_gfp (C function)”Œc.mapping_read_folio_gfp”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ_struct folio * mapping_read_folio_gfp (struct address_space *mapping, pgoff_t index, gfp_t gfp)”h]”hù)�”}”(hŒ]struct folio *mapping_read_folio_gfp(struct address_space *mapping, pgoff_t index, gfp_t gfp)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj#íh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjíh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MbubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1íh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjíh²hh³j0íh´Mbubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjBíh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj?íubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jDíŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒmapping_read_folio_gfp”sbŒc.mapping_read_folio_gfp”†”asbuh1hhjíh²hh³j0íh´MbubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcíh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjíh²hh³j0íh´MbubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjqíh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjíh²hh³j0íh´Mbubhÿ)�”}”(hŒmapping_read_folio_gfp”h]”j)�”}”(hj`íh]”hŒmapping_read_folio_gfp”…”�”}”(hj‚íh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj~íubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjíh²hh³j0íh´Mbubj )�”}”(hŒ9(struct address_space *mapping, pgoff_t index, gfp_t gfp)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj�íh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj™íubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªíh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj™íubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj»íh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¸íubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j½íŒmodname”NŒ classname”Njpjs)�”}”jv]”j^íŒc.mapping_read_folio_gfp”†”asbuh1hhj™íubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙíh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj™íubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjçíh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj™íubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjôíh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™íubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj•íubj )�”}”(hŒ pgoff_t index”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj îubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jîŒmodname”NŒ classname”Njpjs)�”}”jv]”j^íŒc.mapping_read_folio_gfp”†”asbuh1hhj îubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.îh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj îubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(hj<îh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj îubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj•íubj )�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjXîh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjUîubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jZîŒmodname”NŒ classname”Njpjs)�”}”jv]”j^íŒc.mapping_read_folio_gfp”†”asbuh1hhjQîubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvîh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjQîubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj„îh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjQîubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj•íubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjíh²hh³j0íh´Mbubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjíh²hh³j0íh´Mbubah}”(h]”jíah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j0íh´Mbhjíh²hubj4)�”}”(hhh]”jM)�”}”(hŒ7Read into page cache, using specified allocation flags.”h]”hŒ7Read into page cache, using specified allocation flags.”…”�”}”(hj®îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mbhj«îh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjíh²hh³j0íh´Mbubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÆîjHjÆîjI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hX§**Parameters** ``struct address_space *mapping`` The address_space for the folio. ``pgoff_t index`` The index that the allocated folio will contain. ``gfp_t gfp`` The page allocator flags to use if allocating. **Description** This is the same as "read_cache_folio(mapping, index, NULL, NULL)", but with any new memory allocations done using the specified allocation flags. The most likely error from this function is EIO, but ENOMEM is possible and so is EINTR. If ->read_folio returns another error, that will be returned to the caller. The function expects mapping->invalidate_lock to be already held. **Return** Uptodate folio on success, ERR_PTR() on failure.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÐîh]”hŒ Parameters”…”�”}”(hjÒîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÎîubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MfhjÊîubj¤)�”}”(hhh]”(j©)�”}”(hŒC``struct address_space *mapping`` The address_space for the folio. ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjïîh]”hŒstruct address_space *mapping”…”�”}”(hjñîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjíîubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MchjéîubjÉ)�”}”(hhh]”jM)�”}”(hŒ The address_space for the folio.”h]”hŒ The address_space for the folio.”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jïh´Mchjïubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjéîubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jïh´Mchjæîubj©)�”}”(hŒC``pgoff_t index`` The index that the allocated folio will contain. ”h]”(•j¯)�”}”(hŒ``pgoff_t index``”h]”jS)�”}”(hj(ïh]”hŒ pgoff_t index”…”�”}”(hj*ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj&ïubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mdhj"ïubjÉ)�”}”(hhh]”jM)�”}”(hŒ0The index that the allocated folio will contain.”h]”hŒ0The index that the allocated folio will contain.”…”�”}”(hjAïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j=ïh´Mdhj>ïubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj"ïubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j=ïh´Mdhjæîubj©)�”}”(hŒ=``gfp_t gfp`` The page allocator flags to use if allocating. ”h]”(j¯)�”}”(hŒ ``gfp_t gfp``”h]”jS)�”}”(hjaïh]”hŒ gfp_t gfp”…”�”}”(hjcïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj_ïubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mehj[ïubjÉ)�”}”(hhh]”jM)�”}”(hŒ.The page allocator flags to use if allocating.”h]”hŒ.The page allocator flags to use if allocating.”…”�”}”(hjzïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jvïh´Mehjwïubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj[ïubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jvïh´Mehjæîubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÊîubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjœïh]”hŒ Description”…”�”}”(hjžïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjšïubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MghjÊîubjM)�”}”(hŒ’This is the same as "read_cache_folio(mapping, index, NULL, NULL)", but with any new memory allocations done using the specified allocation flags.”h]”hŒ–This is the same as “read_cache_folio(mapping, index, NULL, NULL)â€�, but with any new memory allocations done using the specified allocation flags.”…”�”}”(hj²ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MfhjÊîubjM)�”}”(hŒ¥The most likely error from this function is EIO, but ENOMEM is possible and so is EINTR. If ->read_folio returns another error, that will be returned to the caller.”h]”hŒ¥The most likely error from this function is EIO, but ENOMEM is possible and so is EINTR. If ->read_folio returns another error, that will be returned to the caller.”…”�”}”(hjÁïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MihjÊîubjM)�”}”(hŒAThe function expects mapping->invalidate_lock to be already held.”h]”hŒAThe function expects mapping->invalidate_lock to be already held.”…”�”}”(hjÐïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MmhjÊîubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MohjÊîubjM)�”}”(hŒ0Uptodate folio on success, ERR_PTR() on failure.”h]”hŒ0Uptodate folio on success, ERR_PTR() on failure.”…”�”}”(hj÷ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MphjÊîubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÀœh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ read_cache_page_gfp (C function)”Œc.read_cache_page_gfp”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ[struct page * read_cache_page_gfp (struct address_space *mapping, pgoff_t index, gfp_t gfp)”h]”hù)�”}”(hŒYstruct page *read_cache_page_gfp(struct address_space *mapping, pgoff_t index, gfp_t gfp)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj&ðh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj"ðh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4ðh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj"ðh²hh³j3ðh´M�ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjEðh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjBðubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jGðŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒread_cache_page_gfp”sbŒc.read_cache_page_gfp”†”asbuh1hhj"ðh²hh³j3ðh´M�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfðh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj"ðh²hh³j3ðh´M�ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjtðh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj"ðh²hh³j3ðh´M�ubhÿ)�”}”(hŒread_cache_page_gfp”h]”j)�”}”(hjcðh]”hŒread_cache_page_gfp”…”�”}”(hj…ðh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ðubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj"ðh²hh³j3ðh´M�ubj )�”}”(hŒ9(struct address_space *mapping, pgoff_t index, gfp_t gfp)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj ðh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjœðubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­ðh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjœðubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj¾ðh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj»ðubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÀðŒmodname”NŒ classname”Njpjs)�”}”jv]”jaðŒc.read_cache_page_gfp”†”asbuh1hhjœðubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜðh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjœðubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjêðh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjœðubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj÷ðh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjœðubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj˜ðubj )�”}”(hŒ pgoff_t index”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jñŒmodname”NŒ classname”Njpjs)�”}”jv]”jaðŒc.read_cache_page_gfp”†”asbuh1hhj ñubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1ñh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj ñubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(hj?ñh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ñubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj˜ðubj )�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj[ñh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjXñubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j]ñŒmodname”NŒ classname”Njpjs)�”}”jv]”jaðŒc.read_cache_page_gfp”†”asbuh1hhjTñubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyñh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjTñubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj‡ñh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjTñubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj˜ðubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj"ðh²hh³j3ðh´M�ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjðh²hh³j3ðh´M�ubah}”(h]”jðah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j3ðh´M�hjðh²hubj4)�”}”(hhh]”jM)�”}”(hŒinvalidate_lock to be already held. **Return** up to date page on success, ERR_PTR() on failure.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÓñh]”hŒ Parameters”…”�”}”(hjÕñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÑñubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M‘hjÍñubj¤)�”}”(hhh]”(j©)�”}”(hŒ;``struct address_space *mapping`` the page's address_space ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjòñh]”hŒstruct address_space *mapping”…”�”}”(hjôñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjðñubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MŽhjìñubjÉ)�”}”(hhh]”jM)�”}”(hŒthe page's address_space”h]”hŒthe page’s address_space”…”�”}”(hj òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jòh´MŽhjòubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjìñubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jòh´MŽhjéñubj©)�”}”(hŒ!``pgoff_t index`` the page index ”h]”(j¯)�”}”(hŒ``pgoff_t index``”h]”jS)�”}”(hj+òh]”hŒ pgoff_t index”…”�”}”(hj-òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj)òubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M�hj%òubjÉ)�”}”(hhh]”jM)�”}”(hŒthe page index”h]”hŒthe page index”…”�”}”(hjDòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j@òh´M�hjAòubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj%òubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j@òh´M�hjéñubj©)�”}”(hŒ<``gfp_t gfp`` the page allocator flags to use if allocating ”h]”(j¯)�”}”(hŒ ``gfp_t gfp``”h]”jS)�”}”(hjdòh]”hŒ gfp_t gfp”…”�”}”(hjfòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjbòubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M�hj^òubjÉ)�”}”(hhh]”jM)�”}”(hŒ-the page allocator flags to use if allocating”h]”hŒ-the page allocator flags to use if allocating”…”�”}”(hj}òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jyòh´M�hjzòubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj^òubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jyòh´M�hjéñubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÍñubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjŸòh]”hŒ Description”…”�”}”(hj¡òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�òubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M’hjÍñubjM)�”}”(hŒ‹This is the same as "read_mapping_page(mapping, index, NULL)", but with any new page allocations done using the specified allocation flags.”h]”hŒ�This is the same as “read_mapping_page(mapping, index, NULL)â€�, but with any new page allocations done using the specified allocation flags.”…”�”}”(hjµòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M‘hjÍñubjM)�”}”(hŒ7If the page does not get brought uptodate, return -EIO.”h]”hŒ7If the page does not get brought uptodate, return -EIO.”…”�”}”(hjÄòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M”hjÍñubjM)�”}”(hŒAThe function expects mapping->invalidate_lock to be already held.”h]”hŒAThe function expects mapping->invalidate_lock to be already held.”…”�”}”(hjÓòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M–hjÍñubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M˜hjÍñubjM)�”}”(hŒ1up to date page on success, ERR_PTR() on failure.”h]”hŒ1up to date page on success, ERR_PTR() on failure.”…”�”}”(hjúòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.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”]”(héŒ&__generic_file_write_iter (C function)”Œc.__generic_file_write_iter”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒMssize_t __generic_file_write_iter (struct kiocb *iocb, struct iov_iter *from)”h]”hù)�”}”(hŒLssize_t __generic_file_write_iter(struct kiocb *iocb, struct iov_iter *from)”h]”(h)�”}”(hhh]”j)�”}”(hŒssize_t”h]”hŒssize_t”…”�”}”(hj,óh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj)óubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j.óŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒ__generic_file_write_iter”sbŒc.__generic_file_write_iter”†”asbuh1hhj%óh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MYubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNóh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj%óh²hh³jMóh´MYubhÿ)�”}”(hŒ__generic_file_write_iter”h]”j)�”}”(hjJóh]”hŒ__generic_file_write_iter”…”�”}”(hj`óh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj\óubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj%óh²hh³jMóh´MYubj )�”}”(hŒ+(struct kiocb *iocb, struct iov_iter *from)”h]”(j )�”}”(hŒstruct kiocb *iocb”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj{óh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjwóubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆóh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjwóubh)�”}”(hhh]”j)�”}”(hŒkiocb”h]”hŒkiocb”…”�”}”(hj™óh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj–óubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j›óŒmodname”NŒ classname”Njpjs)�”}”jv]”jHóŒc.__generic_file_write_iter”†”asbuh1hhjwóubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·óh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjwóubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÅóh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjwóubj)�”}”(hŒiocb”h]”hŒiocb”…”�”}”(hjÒóh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjwóubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjsóubj )�”}”(hŒstruct iov_iter *from”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjëóh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjçóubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjøóh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjçóubh)�”}”(hhh]”j)�”}”(hŒiov_iter”h]”hŒiov_iter”…”�”}”(hj ôh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjôubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j ôŒmodname”NŒ classname”Njpjs)�”}”jv]”jHóŒc.__generic_file_write_iter”†”asbuh1hhjçóubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'ôh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjçóubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj5ôh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjçóubj)�”}”(hŒfrom”h]”hŒfrom”…”�”}”(hjBôh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjçóubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjsóubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj%óh²hh³jMóh´MYubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj!óh²hh³jMóh´MYubah}”(h]”jóah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jMóh´MYhjóh²hubj4)�”}”(hhh]”jM)�”}”(hŒwrite data to a file”h]”hŒwrite data to a file”…”�”}”(hjlôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MYhjiôh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjóh²hh³jMóh´MYubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj„ôjHj„ôjI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hX@**Parameters** ``struct kiocb *iocb`` IO state structure (file, offset, etc.) ``struct iov_iter *from`` iov_iter with data to write **Description** This function does all the work needed for actually writing data to a file. It does all basic checks, removes SUID from the file, updates modification times and calls proper subroutines depending on whether we do direct IO or a standard buffered write. It expects i_rwsem to be grabbed unless we work on a block device or similar object which does not need locking at all. This function does *not* take care of syncing data in case of O_SYNC write. A caller has to handle it. This is mainly due to the fact that we want to avoid syncing under i_rwsem. **Return** * number of bytes written, even for truncated writes * negative error code if no data has been written at all”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjŽôh]”hŒ Parameters”…”�”}”(hj�ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŒôubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M]hjˆôubj¤)�”}”(hhh]”(j©)�”}”(hŒ?``struct kiocb *iocb`` IO state structure (file, offset, etc.) ”h]”(j¯)�”}”(hŒ``struct kiocb *iocb``”h]”jS)�”}”(hj­ôh]”hŒstruct kiocb *iocb”…”�”}”(hj¯ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj«ôubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MZhj§ôubjÉ)�”}”(hhh]”jM)�”}”(hŒ'IO state structure (file, offset, etc.)”h]”hŒ'IO state structure (file, offset, etc.)”…”�”}”(hjÆôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÂôh´MZhjÃôubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj§ôubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÂôh´MZhj¤ôubj©)�”}”(hŒ6``struct iov_iter *from`` iov_iter with data to write ”h]”(j¯)�”}”(hŒ``struct iov_iter *from``”h]”jS)�”}”(hjæôh]”hŒstruct iov_iter *from”…”�”}”(hjèôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjäôubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M[hjàôubjÉ)�”}”(hhh]”jM)�”}”(hŒiov_iter with data to write”h]”hŒiov_iter with data to write”…”�”}”(hjÿôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jûôh´M[hjüôubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjàôubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jûôh´M[hj¤ôubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjˆôubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj!õh]”hŒ Description”…”�”}”(hj#õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjõubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M]hjˆôubjM)�”}”(hŒüThis function does all the work needed for actually writing data to a file. It does all basic checks, removes SUID from the file, updates modification times and calls proper subroutines depending on whether we do direct IO or a standard buffered write.”h]”hŒüThis function does all the work needed for actually writing data to a file. It does all basic checks, removes SUID from the file, updates modification times and calls proper subroutines depending on whether we do direct IO or a standard buffered write.”…”�”}”(hj7õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M\hjˆôubjM)�”}”(hŒwIt expects i_rwsem to be grabbed unless we work on a block device or similar object which does not need locking at all.”h]”hŒwIt expects i_rwsem to be grabbed unless we work on a block device or similar object which does not need locking at all.”…”�”}”(hjFõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MahjˆôubjM)�”}”(hŒ²This function does *not* take care of syncing data in case of O_SYNC write. A caller has to handle it. This is mainly due to the fact that we want to avoid syncing under i_rwsem.”h]”(hŒThis function does ”…”�”}”(hjUõh²hh³Nh´NubjB)�”}”(hŒ*not*”h]”hŒnot”…”�”}”(hj]õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjUõubhŒš take care of syncing data in case of O_SYNC write. A caller has to handle it. This is mainly due to the fact that we want to avoid syncing under i_rwsem.”…”�”}”(hjUõh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MdhjˆôubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjxõh]”hŒReturn”…”�”}”(hjzõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjvõubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MhhjˆôubjaW)�”}”(hhh]”(jÕ/)�”}”(hŒ2number of bytes written, even for truncated writes”h]”jM)�”}”(hj“õh]”hŒ2number of bytes written, even for truncated writes”…”�”}”(hj•õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mihj‘õubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjŽõubjÕ/)�”}”(hŒ6negative error code if no data has been written at all”h]”jM)�”}”(hj«õh]”hŒ6negative error code if no data has been written at all”…”�”}”(hj­õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mjhj©õubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjŽõubeh}”(h]”h ]”h"]”h$]”h&]”jƒWjI uh1j`Wh³j¢õh´Mihjˆôubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÀœh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$generic_file_write_iter (C function)”Œc.generic_file_write_iter”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒKssize_t generic_file_write_iter (struct kiocb *iocb, struct iov_iter *from)”h]”hù)�”}”(hŒJssize_t generic_file_write_iter(struct kiocb *iocb, struct iov_iter *from)”h]”(h)�”}”(hhh]”j)�”}”(hŒssize_t”h]”hŒssize_t”…”�”}”(hjêõh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjçõubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jìõŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒgeneric_file_write_iter”sbŒc.generic_file_write_iter”†”asbuh1hhjãõh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj öh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjãõh²hh³j öh´M�ubhÿ)�”}”(hŒgeneric_file_write_iter”h]”j)�”}”(hjöh]”hŒgeneric_file_write_iter”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjöubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjãõh²hh³j öh´M�ubj )�”}”(hŒ+(struct kiocb *iocb, struct iov_iter *from)”h]”(j )�”}”(hŒstruct kiocb *iocb”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj9öh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj5öubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFöh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj5öubh)�”}”(hhh]”j)�”}”(hŒkiocb”h]”hŒkiocb”…”�”}”(hjWöh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjTöubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jYöŒmodname”NŒ classname”Njpjs)�”}”jv]”jöŒc.generic_file_write_iter”†”asbuh1hhj5öubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuöh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj5öubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjƒöh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj5öubj)�”}”(hŒiocb”h]”hŒiocb”…”�”}”(hj�öh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj5öubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj1öubj )�”}”(hŒstruct iov_iter *from”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj©öh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¥öubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶öh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¥öubh)�”}”(hhh]”j)�”}”(hŒiov_iter”h]”hŒiov_iter”…”�”}”(hjÇöh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÄöubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÉöŒmodname”NŒ classname”Njpjs)�”}”jv]”jöŒc.generic_file_write_iter”†”asbuh1hhj¥öubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåöh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¥öubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjóöh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¥öubj)�”}”(hŒfrom”h]”hŒfrom”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¥öubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj1öubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjãõh²hh³j öh´M�ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjßõh²hh³j öh´M�ubah}”(h]”jÚõah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j öh´M�hjÜõh²hubj4)�”}”(hhh]”jM)�”}”(hŒwrite data to a file”h]”hŒwrite data to a file”…”�”}”(hj*÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M�hj'÷h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÜõh²hh³j öh´M�ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjB÷jHjB÷jI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hXå**Parameters** ``struct kiocb *iocb`` IO state structure ``struct iov_iter *from`` iov_iter with data to write **Description** This is a wrapper around __generic_file_write_iter() to be used by most filesystems. It takes care of syncing the file in case of O_SYNC file and acquires i_rwsem as needed. **Return** * negative error code if no data has been written at all of vfs_fsync_range() failed for a synchronous write * number of bytes written, even for truncated writes”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M”hjF÷ubj¤)�”}”(hhh]”(j©)�”}”(hŒ*``struct kiocb *iocb`` IO state structure ”h]”(j¯)�”}”(hŒ``struct kiocb *iocb``”h]”jS)�”}”(hjk÷h]”hŒstruct kiocb *iocb”…”�”}”(hjm÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhji÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M‘hje÷ubjÉ)�”}”(hhh]”jM)�”}”(hŒIO state structure”h]”hŒIO state structure”…”�”}”(hj„÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j€÷h´M‘hj�÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhje÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j€÷h´M‘hjb÷ubj©)�”}”(hŒ6``struct iov_iter *from`` iov_iter with data to write ”h]”(j¯)�”}”(hŒ``struct iov_iter *from``”h]”jS)�”}”(hj¤÷h]”hŒstruct iov_iter *from”…”�”}”(hj¦÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¢÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M’hjž÷ubjÉ)�”}”(hhh]”jM)�”}”(hŒiov_iter with data to write”h]”hŒiov_iter with data to write”…”�”}”(hj½÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¹÷h´M’hjº÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjž÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¹÷h´M’hjb÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjF÷ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjß÷h]”hŒ Description”…”�”}”(hjá÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÝ÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M”hjF÷ubjM)�”}”(hŒ­This is a wrapper around __generic_file_write_iter() to be used by most filesystems. It takes care of syncing the file in case of O_SYNC file and acquires i_rwsem as needed.”h]”hŒ­This is a wrapper around __generic_file_write_iter() to be used by most filesystems. It takes care of syncing the file in case of O_SYNC file and acquires i_rwsem as needed.”…”�”}”(hjõ÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M“hjF÷ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M—hjF÷ubjaW)�”}”(hhh]”(jÕ/)�”}”(hŒjnegative error code if no data has been written at all of vfs_fsync_range() failed for a synchronous write”h]”jM)�”}”(hŒjnegative error code if no data has been written at all of vfs_fsync_range() failed for a synchronous write”h]”hŒjnegative error code if no data has been written at all of vfs_fsync_range() failed for a synchronous write”…”�”}”(hj#øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M—hjøubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjøubjÕ/)�”}”(hŒ2number of bytes written, even for truncated writes”h]”jM)�”}”(hj:øh]”hŒ2number of bytes written, even for truncated writes”…”�”}”(hj<øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M™hj8øubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjøubeh}”(h]”h ]”h"]”h$]”h&]”jƒWjI uh1j`Wh³j1øh´M—hjF÷ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÀœh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"filemap_release_folio (C function)”Œc.filemap_release_folio”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ;bool filemap_release_folio (struct folio *folio, gfp_t gfp)”h]”hù)�”}”(hŒ:bool filemap_release_folio(struct folio *folio, gfp_t gfp)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjvøh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjrøh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M¯ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„øh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjrøh²hh³jƒøh´M¯ubhÿ)�”}”(hŒfilemap_release_folio”h]”j)�”}”(hŒfilemap_release_folio”h]”hŒfilemap_release_folio”…”�”}”(hj–øh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj’øubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjrøh²hh³jƒøh´M¯ubj )�”}”(hŒ (struct folio *folio, gfp_t gfp)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj²øh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj®øubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿øh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj®øubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÐøh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÍøubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÒøŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj˜øsbŒc.filemap_release_folio”†”asbuh1hhj®øubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðøh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj®øubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjþøh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj®øubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj ùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj®øubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjªøubj )�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj'ùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj$ùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j)ùŒmodname”NŒ classname”Njpjs)�”}”jv]”jìøŒc.filemap_release_folio”†”asbuh1hhj ùubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEùh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj ùubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjSùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ùubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjªøubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjrøh²hh³jƒøh´M¯ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjnøh²hh³jƒøh´M¯ubah}”(h]”jiøah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jƒøh´M¯hjkøh²hubj4)�”}”(hhh]”jM)�”}”(hŒ(Release fs-specific metadata on a folio.”h]”hŒ(Release fs-specific metadata on a folio.”…”�”}”(hj}ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M¯hjzùh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjkøh²hh³jƒøh´M¯ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj•ùjHj•ùjI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hXl**Parameters** ``struct folio *folio`` The folio which the kernel is trying to free. ``gfp_t gfp`` Memory allocation flags (and I/O mode). **Description** The address_space is trying to release any data attached to a folio (presumably at folio->private). This will also be called if the private_2 flag is set on a page, indicating that the folio has other metadata associated with it. The **gfp** argument specifies whether I/O may be performed to release this page (__GFP_IO), and whether the call may block (__GFP_RECLAIM & __GFP_FS). **Return** ``true`` if the release was successful, otherwise ``false``.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjŸùh]”hŒ Parameters”…”�”}”(hj¡ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�ùubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M³hj™ùubj¤)�”}”(hhh]”(j©)�”}”(hŒF``struct folio *folio`` The folio which the kernel is trying to free. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj¾ùh]”hŒstruct folio *folio”…”�”}”(hjÀùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¼ùubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M°hj¸ùubjÉ)�”}”(hhh]”jM)�”}”(hŒ-The folio which the kernel is trying to free.”h]”hŒ-The folio which the kernel is trying to free.”…”�”}”(hj×ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÓùh´M°hjÔùubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¸ùubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÓùh´M°hjµùubj©)�”}”(hŒ6``gfp_t gfp`` Memory allocation flags (and I/O mode). ”h]”(j¯)�”}”(hŒ ``gfp_t gfp``”h]”jS)�”}”(hj÷ùh]”hŒ gfp_t gfp”…”�”}”(hjùùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjõùubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M±hjñùubjÉ)�”}”(hhh]”jM)�”}”(hŒ'Memory allocation flags (and I/O mode).”h]”hŒ'Memory allocation flags (and I/O mode).”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j úh´M±hj úubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjñùubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j úh´M±hjµùubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj™ùubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M³hj™ùubjM)�”}”(hŒcThe address_space is trying to release any data attached to a folio (presumably at folio->private).”h]”hŒcThe address_space is trying to release any data attached to a folio (presumably at folio->private).”…”�”}”(hjHúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M²hj™ùubjM)�”}”(hŒ�This will also be called if the private_2 flag is set on a page, indicating that the folio has other metadata associated with it.”h]”hŒ�This will also be called if the private_2 flag is set on a page, indicating that the folio has other metadata associated with it.”…”�”}”(hjWúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´Mµhj™ùubjM)�”}”(hŒ—The **gfp** argument specifies whether I/O may be performed to release this page (__GFP_IO), and whether the call may block (__GFP_RECLAIM & __GFP_FS).”h]”(hŒThe ”…”�”}”(hjfúh²hh³Nh´NubjŽ)�”}”(hŒ**gfp**”h]”hŒgfp”…”�”}”(hjnúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjfúubhŒŒ argument specifies whether I/O may be performed to release this page (__GFP_IO), and whether the call may block (__GFP_RECLAIM & __GFP_FS).”…”�”}”(hjfúh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M¸hj™ùubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M¼hj™ùubjM)�”}”(hŒ<``true`` if the release was successful, otherwise ``false``.”h]”(jS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj£úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjŸúubhŒ* if the release was successful, otherwise ”…”�”}”(hjŸúh²hh³Nh´NubjS)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjµúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjŸúubhŒ.”…”�”}”(hjŸúh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.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”]”(héŒ%filemap_invalidate_inode (C function)”Œc.filemap_invalidate_inode”hNt”auh1hÜhjÀœh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒXint filemap_invalidate_inode (struct inode *inode, bool flush, loff_t start, loff_t end)”h]”hù)�”}”(hŒWint filemap_invalidate_inode(struct inode *inode, bool flush, loff_t start, loff_t end)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjîúh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjêúh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÐubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýúh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjêúh²hh³jüúh´MÐubhÿ)�”}”(hŒfilemap_invalidate_inode”h]”j)�”}”(hŒfilemap_invalidate_inode”h]”hŒfilemap_invalidate_inode”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ûubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjêúh²hh³jüúh´MÐubj )�”}”(hŒ;(struct inode *inode, bool flush, loff_t start, loff_t end)”h]”(j )�”}”(hŒstruct inode *inode”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj+ûh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj'ûubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8ûh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj'ûubh)�”}”(hhh]”j)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjIûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjFûubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jKûŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljûsbŒc.filemap_invalidate_inode”†”asbuh1hhj'ûubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjiûh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj'ûubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjwûh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj'ûubj)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj„ûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj'ûubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj#ûubj )�”}”(hŒ bool flush”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(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™ûubj)�”}”(hŒflush”h]”hŒflush”…”�”}”(hj¸ûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™ûubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj#ûubj )�”}”(hŒ loff_t start”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjÔûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÑûubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÖûŒmodname”NŒ classname”Njpjs)�”}”jv]”jeûŒc.filemap_invalidate_inode”†”asbuh1hhjÍûubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòûh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÍûubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÍûubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj#ûubj )�”}”(hŒ loff_t end”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjüubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jüŒmodname”NŒ classname”Njpjs)�”}”jv]”jeûŒc.filemap_invalidate_inode”†”asbuh1hhjüubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:üh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjüubj)�”}”(hŒend”h]”hŒend”…”�”}”(hjHüh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjüubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj#ûubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjêúh²hh³jüúh´MÐubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjæúh²hh³jüúh´MÐubah}”(h]”jáúah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jüúh´MÐhjãúh²hubj4)�”}”(hhh]”jM)�”}”(hŒ>Invalidate/forcibly write back a range of an inode's pagecache”h]”hŒ@Invalidate/forcibly write back a range of an inode’s pagecache”…”�”}”(hjrüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÐhjoüh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjãúh²hh³jüúh´MÐubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjŠüjHjŠüjI‰jJ‰jK‰uh1híh²hhjÀœh³Nh´Nubj„)�”}”(hXþ**Parameters** ``struct inode *inode`` The inode to flush ``bool flush`` Set to write back rather than simply invalidate. ``loff_t start`` First byte to in range. ``loff_t end`` Last byte in range (inclusive), or LLONG_MAX for everything from start onwards. **Description** Invalidate all the folios on an inode that contribute to the specified range, possibly writing them back first. Whilst the operation is undertaken, the invalidate lock is held to prevent new folios from being installed.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj”üh]”hŒ Parameters”…”�”}”(hj–üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj’üubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÔhjŽüubj¤)�”}”(hhh]”(j©)�”}”(hŒ+``struct inode *inode`` The inode to flush ”h]”(j¯)�”}”(hŒ``struct inode *inode``”h]”jS)�”}”(hj³üh]”hŒstruct inode *inode”…”�”}”(hjµüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj±üubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÑhj­üubjÉ)�”}”(hhh]”jM)�”}”(hŒThe inode to flush”h]”hŒThe inode to flush”…”�”}”(hjÌüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÈüh´MÑhjÉüubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj­üubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÈüh´MÑhjªüubj©)�”}”(hŒ@``bool flush`` Set to write back rather than simply invalidate. ”h]”(j¯)�”}”(hŒ``bool flush``”h]”jS)�”}”(hjìüh]”hŒ bool flush”…”�”}”(hjîüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjêüubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÒhjæüubjÉ)�”}”(hhh]”jM)�”}”(hŒ0Set to write back rather than simply invalidate.”h]”hŒ0Set to write back rather than simply invalidate.”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jýh´MÒhjýubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjæüubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jýh´MÒhjªüubj©)�”}”(hŒ)``loff_t start`` First byte to in range. ”h]”(j¯)�”}”(hŒ``loff_t start``”h]”jS)�”}”(hj%ýh]”hŒ loff_t start”…”�”}”(hj'ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj#ýubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÓhjýubjÉ)�”}”(hhh]”jM)�”}”(hŒFirst byte to in range.”h]”hŒFirst byte to in range.”…”�”}”(hj>ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j:ýh´MÓhj;ýubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjýubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j:ýh´MÓhjªüubj©)�”}”(hŒ_``loff_t end`` Last byte in range (inclusive), or LLONG_MAX for everything from start onwards. ”h]”(j¯)�”}”(hŒ``loff_t end``”h]”jS)�”}”(hj^ýh]”hŒ loff_t end”…”�”}”(hj`ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj\ýubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÕhjXýubjÉ)�”}”(hhh]”jM)�”}”(hŒOLast byte in range (inclusive), or LLONG_MAX for everything from start onwards.”h]”hŒOLast byte in range (inclusive), or LLONG_MAX for everything from start onwards.”…”�”}”(hjwýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÔhjtýubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjXýubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jsýh´MÕhjªüubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjŽüubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjšýh]”hŒ Description”…”�”}”(hjœýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj˜ýubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´M×hjŽüubjM)�”}”(hŒÜInvalidate all the folios on an inode that contribute to the specified range, possibly writing them back first. Whilst the operation is undertaken, the invalidate lock is held to prevent new folios from being installed.”h]”hŒÜInvalidate all the folios on an inode that contribute to the specified range, possibly writing them back first. Whilst the operation is undertaken, the invalidate lock is held to prevent new folios from being installed.”…”�”}”(hj°ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./mm/filemap.c”h´MÖhjŽüubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÀœh²hh³Nh´Nubeh}”(h]”Œfilemap”ah ]”h"]”Œfilemap”ah$]”h&]”uh1hµhj¯œh²hh³hÊh´K;ubh¶)�”}”(hhh]”(h»)�”}”(hŒ Readahead”h]”hŒ Readahead”…”�”}”(hjÑýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjÎýh²hh³hÊh´KAubjM)�”}”(hXBReadahead is used to read content into the page cache before it is explicitly requested by the application. Readahead only ever attempts to read folios that are not yet in the page cache. If a folio is present but not up-to-date, readahead will not try to read it. In that case a simple ->read_folio() will be requested.”h]”hXBReadahead is used to read content into the page cache before it is explicitly requested by the application. Readahead only ever attempts to read folios that are not yet in the page cache. If a folio is present but not up-to-date, readahead will not try to read it. In that case a simple ->read_folio() will be requested.”…”�”}”(hjßýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.c”h´K hjÎýh²hubjM)�”}”(hXsReadahead is triggered when an application read request (whether a system call or a page fault) finds that the requested folio is not in the page cache, or that it is in the page cache and has the readahead flag set. This flag indicates that the folio was read as part of a previous readahead request and now that it has been accessed, it is time for the next readahead.”h]”hXsReadahead is triggered when an application read request (whether a system call or a page fault) finds that the requested folio is not in the page cache, or that it is in the page cache and has the readahead flag set. This flag indicates that the folio was read as part of a previous readahead request and now that it has been accessed, it is time for the next readahead.”…”�”}”(hjîýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.c”h´KhjÎýh²hubjM)�”}”(hXEach readahead request is partly synchronous read, and partly async readahead. This is reflected in the struct file_ra_state which contains ->size being the total number of pages, and ->async_size which is the number of pages in the async section. The readahead flag will be set on the first folio in this async section to trigger a subsequent readahead. Once a series of sequential reads has been established, there should be no need for a synchronous component and all readahead request will be fully asynchronous.”h]”hXEach readahead request is partly synchronous read, and partly async readahead. This is reflected in the struct file_ra_state which contains ->size being the total number of pages, and ->async_size which is the number of pages in the async section. The readahead flag will be set on the first folio in this async section to trigger a subsequent readahead. Once a series of sequential reads has been established, there should be no need for a synchronous component and all readahead request will be fully asynchronous.”…”�”}”(hjýýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.c”h´KhjÎýh²hubjM)�”}”(hŒ­When either of the triggers causes a readahead, three numbers need to be determined: the start of the region to read, the size of the region, and the size of the async tail.”h]”hŒ­When either of the triggers causes a readahead, three numbers need to be determined: the start of the region to read, the size of the region, and the size of the async tail.”…”�”}”(hj þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.c”h´K"hjÎýh²hubjM)�”}”(hŒÅThe start of the region is simply the first page address at or after the accessed address, which is not currently populated in the page cache. This is found with a simple search in the page cache.”h]”hŒÅThe start of the region is simply the first page address at or after the accessed address, which is not currently populated in the page cache. This is found with a simple search in the page cache.”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.c”h´K&hjÎýh²hubjM)�”}”(hXAThe size of the async tail is determined by subtracting the size that was explicitly requested from the determined request size, unless this would be less than zero - then zero is used. NOTE THIS CALCULATION IS WRONG WHEN THE START OF THE REGION IS NOT THE ACCESSED PAGE. ALSO THIS CALCULATION IS NOT USED CONSISTENTLY.”h]”hXAThe size of the async tail is determined by subtracting the size that was explicitly requested from the determined request size, unless this would be less than zero - then zero is used. NOTE THIS CALCULATION IS WRONG WHEN THE START OF THE REGION IS NOT THE ACCESSED PAGE. ALSO THIS CALCULATION IS NOT USED CONSISTENTLY.”…”�”}”(hj*þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.c”h´K*hjÎýh²hubjM)�”}”(hX„The size of the region is normally determined from the size of the previous readahead which loaded the preceding pages. This may be discovered from the struct file_ra_state for simple sequential reads, or from examining the state of the page cache when multiple sequential reads are interleaved. Specifically: where the readahead was triggered by the readahead flag, the size of the previous readahead is assumed to be the number of pages from the triggering page to the start of the new readahead. In these cases, the size of the previous readahead is scaled, often doubled, for the new readahead, though see get_next_ra_size() for details.”h]”hX„The size of the region is normally determined from the size of the previous readahead which loaded the preceding pages. This may be discovered from the struct file_ra_state for simple sequential reads, or from examining the state of the page cache when multiple sequential reads are interleaved. Specifically: where the readahead was triggered by the readahead flag, the size of the previous readahead is assumed to be the number of pages from the triggering page to the start of the new readahead. In these cases, the size of the previous readahead is scaled, often doubled, for the new readahead, though see get_next_ra_size() for details.”…”�”}”(hj9þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.c”h´K0hjÎýh²hubjM)�”}”(hXgIf the size of the previous read cannot be determined, the number of preceding pages in the page cache is used to estimate the size of a previous read. This estimate could easily be misled by random reads being coincidentally adjacent, so it is ignored unless it is larger than the current request, and it is not scaled up, unless it is at the start of file.”h]”hXgIf the size of the previous read cannot be determined, the number of preceding pages in the page cache is used to estimate the size of a previous read. This estimate could easily be misled by random reads being coincidentally adjacent, so it is ignored unless it is larger than the current request, and it is not scaled up, unless it is at the start of file.”…”�”}”(hjHþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.c”h´K;hjÎýh²hubjM)�”}”(hŒìIn general readahead is accelerated at the start of the file, as reads from there are often sequential. There are other minor adjustments to the readahead size in various special cases and these are best discovered by reading the code.”h]”hŒìIn general readahead is accelerated at the start of the file, as reads from there are often sequential. There are other minor adjustments to the readahead size in various special cases and these are best discovered by reading the code.”…”�”}”(hjWþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.c”h´KBhjÎýh²hubjM)�”}”(hŒ‘The above calculation, based on the previous readahead size, determines the size of the readahead, to which any requested read size may be added.”h]”hŒ‘The above calculation, based on the previous readahead size, determines the size of the readahead, to which any requested read size may be added.”…”�”}”(hjfþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.c”h´KGhjÎýh²hubjM)�”}”(hX·Readahead requests are sent to the filesystem using the ->readahead() address space operation, for which mpage_readahead() is a canonical implementation. ->readahead() should normally initiate reads on all folios, but may fail to read any or all folios without causing an I/O error. The page cache reading code will issue a ->read_folio() request for any folio which ->readahead() did not read, and only an error from this will be final.”h]”hX·Readahead requests are sent to the filesystem using the ->readahead() address space operation, for which mpage_readahead() is a canonical implementation. ->readahead() should normally initiate reads on all folios, but may fail to read any or all folios without causing an I/O error. The page cache reading code will issue a ->read_folio() request for any folio which ->readahead() did not read, and only an error from this will be final.”…”�”}”(hjuþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.c”h´KKhjÎýh²hubjM)�”}”(hŒ”->readahead() will generally call readahead_folio() repeatedly to get each folio from those prepared for readahead. It may fail to read a folio by:”h]”hŒ”->readahead() will generally call readahead_folio() repeatedly to get each folio from those prepared for readahead. It may fail to read a folio by:”…”�”}”(hj„þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.c”h´KShjÎýh²hubjaW)�”}”(hhh]”(jÕ/)�”}”(hŒ–not calling readahead_folio() sufficiently many times, effectively ignoring some folios, as might be appropriate if the path to storage is congested. ”h]”jM)�”}”(hŒ•not calling readahead_folio() sufficiently many times, effectively ignoring some folios, as might be appropriate if the path to storage is congested.”h]”hŒ•not calling readahead_folio() sufficiently many times, effectively ignoring some folios, as might be appropriate if the path to storage is congested.”…”�”}”(hjšþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.c”h´KWhj–þubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hj“þubjÕ/)�”}”(hŒhfailing to actually submit a read request for a given folio, possibly due to insufficient resources, or ”h]”jM)�”}”(hŒgfailing to actually submit a read request for a given folio, possibly due to insufficient resources, or”h]”hŒgfailing to actually submit a read request for a given folio, possibly due to insufficient resources, or”…”�”}”(hj³þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.c”h´K[hj¯þubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hj“þubjÕ/)�”}”(hŒreadahead() should not fail them due to congestion or temporary resource unavailability, but should wait for necessary resources (e.g. memory or indexing information) to become available. Folios in the final ``async_size`` may be considered less urgent and failure to read them is more acceptable. In this case it is best to use filemap_remove_folio() to remove the folios from the page cache as is automatically done for folios that were not fetched with readahead_folio(). This will allow a subsequent synchronous readahead request to try them again. If they are left in the page cache, then they will be read individually using ->read_folio() which may be less efficient.”h]”(hŒThose folios not in the final ”…”�”}”(hjöþh²hh³Nh´NubjS)�”}”(hŒ``async_size``”h]”hŒ async_size”…”�”}”(hjþþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjöþubhX  of the request should be considered to be important and ->readahead() should not fail them due to congestion or temporary resource unavailability, but should wait for necessary resources (e.g. memory or indexing information) to become available. Folios in the final ”…”�”}”(hjöþh²hh³Nh´NubjS)�”}”(hŒ``async_size``”h]”hŒ async_size”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjöþubhXÆ may be considered less urgent and failure to read them is more acceptable. In this case it is best to use filemap_remove_folio() to remove the folios from the page cache as is automatically done for folios that were not fetched with readahead_folio(). This will allow a subsequent synchronous readahead request to try them again. If they are left in the page cache, then they will be read individually using ->read_folio() which may be less efficient.”…”�”}”(hjöþh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:67: ./mm/readahead.c”h´KdhjÎýh²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$page_cache_ra_unbounded (C function)”Œc.page_cache_ra_unbounded”hNt”auh1hÜhjÎýh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒvvoid page_cache_ra_unbounded (struct readahead_control *ractl, unsigned long nr_to_read, unsigned long lookahead_size)”h]”hù)�”}”(hŒuvoid page_cache_ra_unbounded(struct readahead_control *ractl, unsigned long nr_to_read, unsigned long lookahead_size)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjBÿh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj>ÿh²hh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.c”h´KÐubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQÿh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj>ÿh²hh³jPÿh´KÐubhÿ)�”}”(hŒpage_cache_ra_unbounded”h]”j)�”}”(hŒpage_cache_ra_unbounded”h]”hŒpage_cache_ra_unbounded”…”�”}”(hjcÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj_ÿubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj>ÿh²hh³jPÿh´KÐubj )�”}”(hŒY(struct readahead_control *ractl, unsigned long nr_to_read, unsigned long lookahead_size)”h]”(j )�”}”(hŒstruct readahead_control *ractl”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj{ÿubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒÿh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj{ÿubh)�”}”(hhh]”j)�”}”(hŒreadahead_control”h]”hŒreadahead_control”…”�”}”(hj�ÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjšÿubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jŸÿŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljeÿsbŒc.page_cache_ra_unbounded”†”asbuh1hhj{ÿubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½ÿh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj{ÿubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjËÿh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj{ÿubj)�”}”(hŒractl”h]”hŒractl”…”�”}”(hjØÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj{ÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjwÿubj )�”}”(hŒunsigned long nr_to_read”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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íÿubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjíÿubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjíÿubj)�”}”(hŒ nr_to_read”h]”hŒ nr_to_read”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjíÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjwÿubj )�”}”(hŒunsigned long lookahead_size”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj>ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj>ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj>ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj>ubj)�”}”(hŒlookahead_size”h]”hŒlookahead_size”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjwÿubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj>ÿh²hh³jPÿh´KÐubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj:ÿh²hh³jPÿh´KÐubah}”(h]”j5ÿah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jPÿh´KÐhj7ÿh²hubj4)�”}”(hhh]”jM)�”}”(hŒStart unchecked readahead.”h]”hŒStart unchecked readahead.”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.c”h´KÐhj¡h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj7ÿh²hh³jPÿh´KÐubeh}”(h]”h ]”(jAŒfunction”e•h"]”h$]”h&]”jFjAjGj¼jHj¼jI‰jJ‰jK‰uh1híh²hhjÎýh³Nh´Nubj„)�”}”(hX²**Parameters** ``struct readahead_control *ractl`` Readahead control. ``unsigned long nr_to_read`` The number of pages to read. ``unsigned long lookahead_size`` Where to start the next readahead. **Description** This function is for filesystems to call when they want to start readahead beyond a file's stated i_size. This is almost certainly not the function you want to call. Use page_cache_async_readahead() or page_cache_sync_readahead() instead. **Context** File is referenced by caller, and ractl->mapping->invalidate_lock must be held by the caller at least in shared mode. Mutexes may be held by caller. May sleep, but will not reenter filesystem to reclaim memory.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÆh]”hŒ Parameters”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.c”h´KÔhjÀubj¤)�”}”(hhh]”(j©)�”}”(hŒ7``struct readahead_control *ractl`` Readahead control. ”h]”(j¯)�”}”(hŒ#``struct readahead_control *ractl``”h]”jS)�”}”(hjåh]”hŒstruct readahead_control *ractl”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjãubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.c”h´KÑhjßubjÉ)�”}”(hhh]”jM)�”}”(hŒReadahead control.”h]”hŒReadahead control.”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³júh´KÑhjûubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjßubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³júh´KÑhjÜubj©)�”}”(hŒ:``unsigned long nr_to_read`` The number of pages to read. ”h]”(j¯)�”}”(hŒ``unsigned long nr_to_read``”h]”jS)�”}”(hjh]”hŒunsigned long nr_to_read”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.c”h´KÒhjubjÉ)�”}”(hhh]”jM)�”}”(hŒThe number of pages to read.”h]”hŒThe number of pages to read.”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j3h´KÒhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j3h´KÒhjÜubj©)�”}”(hŒD``unsigned long lookahead_size`` Where to start the next readahead. ”h]”(j¯)�”}”(hŒ ``unsigned long lookahead_size``”h]”jS)�”}”(hjWh]”hŒunsigned long lookahead_size”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjUubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.c”h´KÓhjQubjÉ)�”}”(hhh]”jM)�”}”(hŒ"Where to start the next readahead.”h]”hŒ"Where to start the next readahead.”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jlh´KÓhjmubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjQubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jlh´KÓhjÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÀubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj’h]”hŒ Description”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.c”h´KÕhjÀubjM)�”}”(hŒðThis function is for filesystems to call when they want to start readahead beyond a file's stated i_size. This is almost certainly not the function you want to call. Use page_cache_async_readahead() or page_cache_sync_readahead() instead.”h]”hŒòThis function is for filesystems to call when they want to start readahead beyond a file’s stated i_size. This is almost certainly not the function you want to call. Use page_cache_async_readahead() or page_cache_sync_readahead() instead.”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.c”h´KÔhjÀubjM)�”}”(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&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.c”h´KÙhjÀubjM)�”}”(hŒÔFile is referenced by caller, and ractl->mapping->invalidate_lock must be held by the caller at least in shared mode. Mutexes may be held by caller. May sleep, but will not reenter filesystem to reclaim memory.”h]”hŒÔFile is referenced by caller, and ractl->mapping->invalidate_lock must be held by the caller at least in shared mode. Mutexes may be held by caller. May sleep, but will not reenter filesystem to reclaim memory.”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.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”]”(héŒreadahead_expand (C function)”Œc.readahead_expand”hNt”auh1hÜhjÎýh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒYvoid readahead_expand (struct readahead_control *ractl, loff_t new_start, size_t new_len)”h]”hù)�”}”(hŒXvoid readahead_expand(struct readahead_control *ractl, loff_t new_start, size_t new_len)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjúh²hh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjúh²hh³j h´Mubhÿ)�”}”(hŒreadahead_expand”h]”j)�”}”(hŒreadahead_expand”h]”hŒreadahead_expand”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjúh²hh³j h´Mubj )�”}”(hŒC(struct readahead_control *ractl, loff_t new_start, size_t new_len)”h]”(j )�”}”(hŒstruct readahead_control *ractl”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj7ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj7ubh)�”}”(hhh]”j)�”}”(hŒreadahead_control”h]”hŒreadahead_control”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjVubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j[Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj!sbŒc.readahead_expand”†”asbuh1hhj7ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj7ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj7ubj)�”}”(hŒractl”h]”hŒractl”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj3ubj )�”}”(hŒloff_t new_start”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj­ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j²Œmodname”NŒ classname”Njpjs)�”}”jv]”juŒc.readahead_expand”†”asbuh1hhj©ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj©ubj)�”}”(hŒ new_start”h]”hŒ new_start”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj3ubj )�”}”(hŒsize_t new_len”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjõubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”júŒmodname”NŒ classname”Njpjs)�”}”jv]”juŒc.readahead_expand”†”asbuh1hhjñubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjñubj)�”}”(hŒnew_len”h]”hŒnew_len”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj3ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjúh²hh³j h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjöh²hh³j h´Mubah}”(h]”jñah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j h´Mhjóh²hubj4)�”}”(hhh]”jM)�”}”(hŒExpand a readahead request”h]”hŒExpand a readahead request”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.c”h´MhjKh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjóh²hh³j h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjfjHjfjI‰jJ‰jK‰uh1híh²hhjÎýh³Nh´Nubj„)�”}”(hXò**Parameters** ``struct readahead_control *ractl`` The request to be expanded ``loff_t new_start`` The revised start ``size_t new_len`` The revised size of the request **Description** Attempt to expand a readahead request outwards from the current size to the specified size by inserting locked pages before and after the current window to increase the size to the new window. This may involve the insertion of THPs, in which case the window may get expanded even beyond what was requested. The algorithm will stop if it encounters a conflicting page already in the pagecache and leave a smaller expansion than requested. The caller must check for this by examining the revised **ractl** object for a different expansion than was requested.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjph]”hŒ Parameters”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjnubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.c”h´Mhjjubj¤)�”}”(hhh]”(j©)�”}”(hŒ?``struct readahead_control *ractl`` The request to be expanded ”h]”(j¯)�”}”(hŒ#``struct readahead_control *ractl``”h]”jS)�”}”(hj�h]”hŒstruct readahead_control *ractl”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.c”h´Mhj‰ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe request to be expanded”h]”hŒThe request to be expanded”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¤h´Mhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¤h´Mhj†ubj©)�”}”(hŒ'``loff_t new_start`` The revised start ”h]”(j¯)�”}”(hŒ``loff_t new_start``”h]”jS)�”}”(hjÈh]”hŒloff_t new_start”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.c”h´MhjÂubjÉ)�”}”(hhh]”jM)�”}”(hŒThe revised start”h]”hŒThe revised start”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÝh´MhjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÝh´Mhj†ubj©)�”}”(hŒ3``size_t new_len`` The revised size of the request ”h]”(j¯)�”}”(hŒ``size_t new_len``”h]”jS)�”}”(hjh]”hŒsize_t new_len”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.c”h´MhjûubjÉ)�”}”(hhh]”jM)�”}”(hŒThe revised size of the request”h]”hŒThe revised size of the request”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jh´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjûubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jh´Mhj†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjjubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj<h]”hŒ Description”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.c”h´MhjjubjM)�”}”(hX3Attempt to expand a readahead request outwards from the current size to the specified size by inserting locked pages before and after the current window to increase the size to the new window. This may involve the insertion of THPs, in which case the window may get expanded even beyond what was requested.”h]”hX3Attempt to expand a readahead request outwards from the current size to the specified size by inserting locked pages before and after the current window to increase the size to the new window. This may involve the insertion of THPs, in which case the window may get expanded even beyond what was requested.”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.c”h´MhjjubjM)�”}”(hŒ‚The algorithm will stop if it encounters a conflicting page already in the pagecache and leave a smaller expansion than requested.”h]”hŒ‚The algorithm will stop if it encounters a conflicting page already in the pagecache and leave a smaller expansion than requested.”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.c”h´M hjjubjM)�”}”(hŒvThe caller must check for this by examining the revised **ractl** object for a different expansion than was requested.”h]”(hŒ8The caller must check for this by examining the revised ”…”�”}”(hjph²hh³Nh´NubjŽ)�”}”(hŒ **ractl**”h]”hŒractl”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjpubhŒ5 object for a different expansion than was requested.”…”�”}”(hjph²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:70: ./mm/readahead.c”h´Mhjjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÎýh²hh³Nh´Nubeh}”(h]”Œ readahead”ah ]”h"]”Œ readahead”ah$]”h&]”uh1hµhj¯œh²hh³hÊh´KAubh¶)�”}”(hhh]”(h»)�”}”(hŒ Writeback”h]”hŒ Writeback”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj h²hh³hÊh´KJubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ#wb_domain_size_changed (C function)”Œc.wb_domain_size_changed”hNt”auh1hÜhj h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ3void wb_domain_size_changed (struct wb_domain *dom)”h]”hù)�”}”(hŒ2void wb_domain_size_changed(struct wb_domain *dom)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÆh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.h”h´KžubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÆh²hh³jØh´Kžubhÿ)�”}”(hŒwb_domain_size_changed”h]”j)�”}”(hŒwb_domain_size_changed”h]”hŒwb_domain_size_changed”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjçubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÆh²hh³jØh´Kžubj )�”}”(hŒ(struct wb_domain *dom)”h]”j )�”}”(hŒstruct wb_domain *dom”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubh)�”}”(hhh]”j)�”}”(hŒ wb_domain”h]”hŒ wb_domain”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj"ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j'Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljísbŒc.wb_domain_size_changed”†”asbuh1hhjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjubj)�”}”(hŒdom”h]”hŒdom”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÿubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÆh²hh³jØh´Kžubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÂh²hh³jØh´Kžubah}”(h]”j½ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jØh´Kžhj¿h²hubj4)�”}”(hhh]”jM)�”}”(hŒ+memory available to a wb_domain has changed”h]”hŒ+memory available to a wb_domain has changed”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.h”h´Kžhj‡h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¿h²hh³jØh´Kžubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¢jHj¢jI‰jJ‰jK‰uh1híh²hhj h³Nh´Nubj„)�”}”(hX**Parameters** ``struct wb_domain *dom`` wb_domain of interest **Description** This function should be called when the amount of memory available to **dom** has changed. It resets **dom**'s dirty limit parameters to prevent the past values which don't match the current configuration from skewing dirty throttling. Without this, when memory size of a wb_domain is greatly reduced, the dirty throttling logic may allow too many pages to be dirtied leading to consecutive unnecessary OOMs and may get stuck in that situation.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¬h]”hŒ Parameters”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjªubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.h”h´K¢hj¦ubj¤)�”}”(hhh]”j©)�”}”(hŒ0``struct wb_domain *dom`` wb_domain of interest ”h]”(j¯)�”}”(hŒ``struct wb_domain *dom``”h]”jS)�”}”(hjËh]”hŒstruct wb_domain *dom”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.h”h´KŸhjÅubjÉ)�”}”(hhh]”jM)�”}”(hŒwb_domain of interest”h]”hŒwb_domain of interest”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jàh´KŸhjáubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jàh´KŸhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¦ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.h”h´K¡hj¦ubjM)�”}”(hX¾This function should be called when the amount of memory available to **dom** has changed. It resets **dom**'s dirty limit parameters to prevent the past values which don't match the current configuration from skewing dirty throttling. Without this, when memory size of a wb_domain is greatly reduced, the dirty throttling logic may allow too many pages to be dirtied leading to consecutive unnecessary OOMs and may get stuck in that situation.”h]”(hŒFThis function should be called when the amount of memory available to ”…”�”}”(hjh²hh³Nh´NubjŽ)�”}”(hŒ**dom**”h]”hŒdom”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubhŒ has changed. It resets ”…”�”}”(hjh²hh³Nh´NubjŽ)�”}”(hŒ**dom**”h]”hŒdom”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubhXU’s dirty limit parameters to prevent the past values which don’t match the current configuration from skewing dirty throttling. Without this, when memory size of a wb_domain is greatly reduced, the dirty throttling logic may allow too many pages to be dirtied leading to consecutive unnecessary OOMs and may get stuck in that situation.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.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”]”(héŒinode_attach_wb (C function)”Œc.inode_attach_wb”hNt”auh1hÜhj h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ?void inode_attach_wb (struct inode *inode, struct folio *folio)”h]”hù)�”}”(hŒ>void inode_attach_wb(struct inode *inode, struct folio *folio)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjkh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.h”h´KÖubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjkh²hh³j}h´KÖubhÿ)�”}”(hŒinode_attach_wb”h]”j)�”}”(hŒinode_attach_wb”h]”hŒinode_attach_wb”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŒubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjkh²hh³j}h´KÖubj )�”}”(hŒ*(struct inode *inode, struct folio *folio)”h]”(j )�”}”(hŒstruct inode *inode”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¨ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¨ubh)�”}”(hhh]”j)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÇubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÌŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj’sbŒc.inode_attach_wb”†”asbuh1hhj¨ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¨ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¨ubj)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¨ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¤ubj )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j>Œmodname”NŒ classname”Njpjs)�”}”jv]”jæŒc.inode_attach_wb”†”asbuh1hhjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¤ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjkh²hh³j}h´KÖubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjgh²hh³j}h´KÖubah}”(h]”jbah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j}h´KÖhjdh²hubj4)�”}”(hhh]”jM)�”}”(hŒassociate an inode with its wb”h]”hŒassociate an inode with its wb”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.h”h´KÖhjœh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjdh²hh³j}h´KÖubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj·jHj·jI‰jJ‰jK‰uh1híh²hhj h³Nh´Nubj„)�”}”(hX8**Parameters** ``struct inode *inode`` inode of interest ``struct folio *folio`` folio being dirtied (may be NULL) **Description** If **inode** doesn't have its wb, associate it with the wb matching the memcg of **folio** or, if **folio** is NULL, ``current``. May be called w/ or w/o **inode->i_lock**.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÁh]”hŒ Parameters”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.h”h´KÚhj»ubj¤)�”}”(hhh]”(j©)�”}”(hŒ*``struct inode *inode`` inode of interest ”h]”(j¯)�”}”(hŒ``struct inode *inode``”h]”jS)�”}”(hjàh]”hŒstruct inode *inode”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.h”h´K×hjÚubjÉ)�”}”(hhh]”jM)�”}”(hŒinode of interest”h]”hŒinode of interest”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jõh´K×hjöubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jõh´K×hj×ubj©)�”}”(hŒ:``struct folio *folio`` folio being dirtied (may be NULL) ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjh]”hŒstruct folio *folio”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.h”h´KØhjubjÉ)�”}”(hhh]”jM)�”}”(hŒ!folio being dirtied (may be NULL)”h]”hŒ!folio being dirtied (may be NULL)”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j.h´KØhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j.h´KØhj×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj»ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjTh]”hŒ Description”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjRubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.h”h´KÚhj»ubjM)�”}”(hŒ­If **inode** doesn't have its wb, associate it with the wb matching the memcg of **folio** or, if **folio** is NULL, ``current``. May be called w/ or w/o **inode->i_lock**.”h]”(hŒIf ”…”�”}”(hjjh²hh³Nh´NubjŽ)�”}”(hŒ **inode**”h]”hŒinode”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjjubhŒG doesn’t have its wb, associate it with the wb matching the memcg of ”…”�”}”(hjjh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjjubhŒ or, if ”…”�”}”(hjjh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjjubhŒ is NULL, ”…”�”}”(hjjh²hh³Nh´NubjS)�”}”(hŒ ``current``”h]”hŒcurrent”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjjubhŒ. May be called w/ or w/o ”…”�”}”(hjjh²hh³Nh´NubjŽ)�”}”(hŒ**inode->i_lock**”h]”hŒ inode->i_lock”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjjubhŒ.”…”�”}”(hjjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.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”]”(héŒinode_detach_wb (C function)”Œc.inode_detach_wb”hNt”auh1hÜhj h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ*void inode_detach_wb (struct inode *inode)”h]”hù)�”}”(hŒ)void inode_detach_wb(struct inode *inode)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjïh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.h”h´KåubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjïh²hh³j h´Kåubhÿ)�”}”(hŒinode_detach_wb”h]”j)�”}”(hŒinode_detach_wb”h]”hŒinode_detach_wb”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjïh²hh³j h´Kåubj )�”}”(hŒ(struct inode *inode)”h]”j )�”}”(hŒstruct inode *inode”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj0 h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj, ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj= h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj, ubh)�”}”(hhh]”j)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjN h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjK ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jP Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj sbŒc.inode_detach_wb”†”asbuh1hhj, ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj, ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj, ubj)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj‰ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj, ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj( ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjïh²hh³j h´Kåubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjëh²hh³j h´Kåubah}”(h]”jæah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j h´Kåhjèh²hubj4)�”}”(hhh]”jM)�”}”(hŒ!disassociate an inode from its wb”h]”hŒ!disassociate an inode from its wb”…”�”}”(hj³ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.h”h´Kåhj° h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjèh²hh³j h´Kåubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjË jHjË jI‰jJ‰jK‰uh1híh²hhj h³Nh´Nubj„)�”}”(hŒ|**Parameters** ``struct inode *inode`` inode of interest **Description** **inode** is being freed. Detach from its wb.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÕ h]”hŒ Parameters”…”�”}”(hj× h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÓ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.h”h´KéhjÏ ubj¤)�”}”(hhh]”j©)�”}”(hŒ*``struct inode *inode`` inode of interest ”h]”(j¯)�”}”(hŒ``struct inode *inode``”h]”jS)�”}”(hjô h]”hŒstruct inode *inode”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjò ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.h”h´Kæhjî ubjÉ)�”}”(hhh]”jM)�”}”(hŒinode of interest”h]”hŒinode of interest”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j h´Kæhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjî ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j h´Kæhjë ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÏ ubjM)�”}”(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&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.h”h´KèhjÏ ubjM)�”}”(hŒ.**inode** is being freed. Detach from its wb.”h]”(jŽ)�”}”(hŒ **inode**”h]”hŒinode”…”�”}”(hjI h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjE ubhŒ% is being freed. Detach from its wb.”…”�”}”(hjE h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.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”]”(héŒwbc_init_bio (C function)”Œc.wbc_init_bio”hNt”auh1hÜhj h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒBvoid wbc_init_bio (struct writeback_control *wbc, struct bio *bio)”h]”hù)�”}”(hŒAvoid wbc_init_bio(struct writeback_control *wbc, struct bio *bio)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‚ h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj~ h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.h”h´K÷ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘ h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj~ h²hh³j� h´K÷ubhÿ)�”}”(hŒ wbc_init_bio”h]”j)�”}”(hŒ wbc_init_bio”h]”hŒ wbc_init_bio”…”�”}”(hj£ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŸ ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj~ h²hh³j� h´K÷ubj )�”}”(hŒ0(struct writeback_control *wbc, struct bio *bio)”h]”(j )�”}”(hŒstruct writeback_control *wbc”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¿ h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj» ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌ h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj» ubh)�”}”(hhh]”j)�”}”(hŒwriteback_control”h]”hŒwriteback_control”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÚ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jß Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj¥ sbŒc.wbc_init_bio”†”asbuh1hhj» ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj» ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj» ubj)�”}”(hŒwbc”h]”hŒwbc”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj» ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj· ubj )�”}”(hŒstruct bio *bio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj1 h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj- ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj> h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj- ubh)�”}”(hhh]”j)�”}”(hŒbio”h]”hŒbio”…”�”}”(hjO h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjL ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jQ Œmodname”NŒ classname”Njpjs)�”}”jv]”jù Œc.wbc_init_bio”†”asbuh1hhj- ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjm h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj- ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj- ubj)�”}”(hŒbio”h]”hŒbio”…”�”}”(hjˆ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj- ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj· ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj~ h²hh³j� h´K÷ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjz h²hh³j� h´K÷ubah}”(h]”ju ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j� h´K÷hjw h²hubj4)�”}”(hhh]”jM)�”}”(hŒ(writeback specific initialization of bio”h]”hŒ(writeback specific initialization of bio”…”�”}”(hj² h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.h”h´K÷hj¯ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjw h²hh³j� h´K÷ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÊ jHjÊ jI‰jJ‰jK‰uh1híh²hhj h³Nh´Nubj„)�”}”(hXŠ**Parameters** ``struct writeback_control *wbc`` writeback_control for the writeback in progress ``struct bio *bio`` bio to be initialized **Description** **bio** is a part of the writeback in progress controlled by **wbc**. Perform writeback specific initialization. This is used to apply the cgroup writeback context. Must be called after the bio has been associated with a device.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÔ h]”hŒ Parameters”…”�”}”(hjÖ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÒ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.h”h´KûhjÎ ubj¤)�”}”(hhh]”(j©)�”}”(hŒR``struct writeback_control *wbc`` writeback_control for the writeback in progress ”h]”(j¯)�”}”(hŒ!``struct writeback_control *wbc``”h]”jS)�”}”(hjó h]”hŒstruct writeback_control *wbc”…”�”}”(hjõ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjñ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.h”h´Køhjí ubjÉ)�”}”(hhh]”jM)�”}”(hŒ/writeback_control for the writeback in progress”h]”hŒ/writeback_control for the writeback in progress”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j h´Køhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjí ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j h´Køhjê ubj©)�”}”(hŒ*``struct bio *bio`` bio to be initialized ”h]”(j¯)�”}”(hŒ``struct bio *bio``”h]”jS)�”}”(hj, h]”hŒstruct bio *bio”…”�”}”(hj. h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj* ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.h”h´Kùhj& ubjÉ)�”}”(hhh]”jM)�”}”(hŒbio to be initialized”h]”hŒbio to be initialized”…”�”}”(hjE h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jA h´KùhjB ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj& ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jA h´Kùhjê ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÎ ubjM)�”}”(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&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.h”h´KûhjÎ ubjM)�”}”(hŒç**bio** is a part of the writeback in progress controlled by **wbc**. Perform writeback specific initialization. This is used to apply the cgroup writeback context. Must be called after the bio has been associated with a device.”h]”(jŽ)�”}”(hŒ**bio**”h]”hŒbio”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj} ubhŒ6 is a part of the writeback in progress controlled by ”…”�”}”(hj} h²hh³Nh´NubjŽ)�”}”(hŒ**wbc**”h]”hŒwbc”…”�”}”(hj“ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj} ubhŒ£. Perform writeback specific initialization. This is used to apply the cgroup writeback context. Must be called after the bio has been associated with a device.”…”�”}”(hj} h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:76: ./include/linux/writeback.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”]”(héŒ2balance_dirty_pages_ratelimited_flags (C function)”Œ'c.balance_dirty_pages_ratelimited_flags”hNt”auh1hÜhj h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ]int balance_dirty_pages_ratelimited_flags (struct address_space *mapping, unsigned int flags)”h]”hù)�”}”(hŒ\int balance_dirty_pages_ratelimited_flags(struct address_space *mapping, unsigned int flags)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjÌ h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÈ h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´MÞubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛ h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÈ h²hh³jÚ h´MÞubhÿ)�”}”(hŒ%balance_dirty_pages_ratelimited_flags”h]”j)�”}”(hŒ%balance_dirty_pages_ratelimited_flags”h]”hŒ%balance_dirty_pages_ratelimited_flags”…”�”}”(hjí h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjé ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÈ h²hh³jÚ h´MÞubj )�”}”(hŒ3(struct address_space *mapping, unsigned int flags)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj' h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj$ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j) Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljï sbŒ'c.balance_dirty_pages_ratelimited_flags”†”asbuh1hhj ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjG h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjU h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjb h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj ubj )�”}”(hŒunsigned int flags”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjw ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰ h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjw ubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj— h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjw ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥ h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjw ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj³ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjw ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÈ h²hh³jÚ h´MÞubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÄ h²hh³jÚ h´MÞubah}”(h]”j¿ ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÚ h´MÞhjÁ h²hubj4)�”}”(hhh]”jM)�”}”(hŒBalance dirty memory state.”h]”hŒBalance dirty memory state.”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´MÞhjÚ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÁ h²hh³jÚ h´MÞubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjõ jHjõ jI‰jJ‰jK‰uh1híh²hhj h³Nh´Nubj„)�”}”(hXÇ**Parameters** ``struct address_space *mapping`` address_space which was dirtied. ``unsigned int flags`` BDP flags. **Description** Processes which are dirtying memory should call in here once for each page which was newly dirtied. The function will periodically check the system's dirty state and will initiate writeback if needed. See balance_dirty_pages_ratelimited() for details. **Return** If **flags** contains BDP_ASYNC, it may return -EAGAIN to indicate that memory is out of balance and the caller must wait for I/O to complete. Otherwise, it will return 0 to indicate that either memory was already in balance, or it was able to sleep until the amount of dirty memory returned to balance.”h]”(jM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´Mâhjù ubj¤)�”}”(hhh]”(j©)�”}”(hŒC``struct address_space *mapping`` address_space which was dirtied. ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjh]”hŒstruct address_space *mapping”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´MßhjubjÉ)�”}”(hhh]”jM)�”}”(hŒ address_space which was dirtied.”h]”hŒ address_space which was dirtied.”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j3h´Mßhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j3h´Mßhjubj©)�”}”(hŒ"``unsigned int flags`` BDP flags. ”h]”(j¯)�”}”(hŒ``unsigned int flags``”h]”jS)�”}”(hjWh]”hŒunsigned int flags”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjUubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´MàhjQubjÉ)�”}”(hhh]”jM)�”}”(hŒ BDP flags.”h]”hŒ BDP flags.”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jlh´Màhjmubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjQubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jlh´Màhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjù ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj’h]”hŒ Description”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´Mâhjù ubjM)�”}”(hŒÉProcesses which are dirtying memory should call in here once for each page which was newly dirtied. The function will periodically check the system's dirty state and will initiate writeback if needed.”h]”hŒËProcesses which are dirtying memory should call in here once for each page which was newly dirtied. The function will periodically check the system’s dirty state and will initiate writeback if needed.”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´Máhjù ubjM)�”}”(hŒ2See balance_dirty_pages_ratelimited() for details.”h]”hŒ2See balance_dirty_pages_ratelimited() for details.”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´Måhjù ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´Mçhjù ubjM)�”}”(hX0If **flags** contains BDP_ASYNC, it may return -EAGAIN to indicate that memory is out of balance and the caller must wait for I/O to complete. Otherwise, it will return 0 to indicate that either memory was already in balance, or it was able to sleep until the amount of dirty memory returned to balance.”h]”(hŒIf ”…”�”}”(hjÞh²hh³Nh´NubjŽ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÞubhX$ contains BDP_ASYNC, it may return -EAGAIN to indicate that memory is out of balance and the caller must wait for I/O to complete. Otherwise, it will return 0 to indicate that either memory was already in balance, or it was able to sleep until the amount of dirty memory returned to balance.”…”�”}”(hjÞh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.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”]”(héŒ,balance_dirty_pages_ratelimited (C function)”Œ!c.balance_dirty_pages_ratelimited”hNt”auh1hÜhj h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒDvoid balance_dirty_pages_ratelimited (struct address_space *mapping)”h]”hù)�”}”(hŒCvoid balance_dirty_pages_ratelimited(struct address_space *mapping)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M)ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjh²hh³j-h´M)ubhÿ)�”}”(hŒbalance_dirty_pages_ratelimited”h]”j)�”}”(hŒbalance_dirty_pages_ratelimited”h]”hŒbalance_dirty_pages_ratelimited”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj<ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjh²hh³j-h´M)ubj )�”}”(hŒ(struct address_space *mapping)”h]”j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjXubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjXubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjwubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j|Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljBsbŒ!c.balance_dirty_pages_ratelimited”†”asbuh1hhjXubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjXubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjXubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjXubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjTubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjh²hh³j-h´M)ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjh²hh³j-h´M)ubah}”(h]”jah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j-h´M)hjh²hubj4)�”}”(hhh]”jM)�”}”(hŒbalance dirty memory state.”h]”hŒbalance dirty memory state.”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M)hjÜh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjh²hh³j-h´M)ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj÷jHj÷jI‰jJ‰jK‰uh1híh²hhj h³Nh´Nubj„)�”}”(hXÖ**Parameters** ``struct address_space *mapping`` address_space which was dirtied. **Description** Processes which are dirtying memory should call in here once for each page which was newly dirtied. The function will periodically check the system's dirty state and will initiate writeback if needed. Once we're over the dirty memory limit we decrease the ratelimiting by a lot, to prevent individual processes from overshooting the limit by (ratelimit_pages) each.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M-hjûubj¤)�”}”(hhh]”j©)�”}”(hŒC``struct address_space *mapping`` address_space which was dirtied. ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj h]”hŒstruct address_space *mapping”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M*hjubjÉ)�”}”(hhh]”jM)�”}”(hŒ address_space which was dirtied.”h]”hŒ address_space which was dirtied.”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j5h´M*hj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j5h´M*hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjûubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj[h]”hŒ Description”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjYubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M,hjûubjM)�”}”(hŒÉProcesses which are dirtying memory should call in here once for each page which was newly dirtied. The function will periodically check the system's dirty state and will initiate writeback if needed.”h]”hŒËProcesses which are dirtying memory should call in here once for each page which was newly dirtied. The function will periodically check the system’s dirty state and will initiate writeback if needed.”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M+hjûubjM)�”}”(hŒ¤Once we're over the dirty memory limit we decrease the ratelimiting by a lot, to prevent individual processes from overshooting the limit by (ratelimit_pages) each.”h]”hŒ¦Once we’re over the dirty memory limit we decrease the ratelimiting by a lot, to prevent individual processes from overshooting the limit by (ratelimit_pages) each.”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.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”]”(héŒ$tag_pages_for_writeback (C function)”Œc.tag_pages_for_writeback”hNt”auh1hÜhj h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒXvoid tag_pages_for_writeback (struct address_space *mapping, pgoff_t start, pgoff_t end)”h]”hù)�”}”(hŒWvoid tag_pages_for_writeback(struct address_space *mapping, pgoff_t start, pgoff_t end)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj«h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj«h²hh³j½h´M ubhÿ)�”}”(hŒtag_pages_for_writeback”h]”j)�”}”(hŒtag_pages_for_writeback”h]”hŒtag_pages_for_writeback”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÌubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj«h²hh³j½h´M ubj )�”}”(hŒ;(struct address_space *mapping, pgoff_t start, pgoff_t end)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjèubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjèubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÒsbŒc.tag_pages_for_writeback”†”asbuh1hhjèubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjèubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjèubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjèubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjäubj )�”}”(hŒ pgoff_t start”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj^ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jcŒmodname”NŒ classname”Njpjs)�”}”jv]”j&Œc.tag_pages_for_writeback”†”asbuh1hhjZubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjZubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjäubj )�”}”(hŒ pgoff_t end”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j«Œmodname”NŒ classname”Njpjs)�”}”jv]”j&Œc.tag_pages_for_writeback”†”asbuh1hhj¢ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¢ubj)�”}”(hŒend”h]”hŒend”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¢ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjäubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj«h²hh³j½h´M ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj§h²hh³j½h´M ubah}”(h]”j¢ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j½h´M hj¤h²hubj4)�”}”(hhh]”jM)�”}”(hŒ$tag pages to be written by writeback”h]”hŒ$tag pages to be written by writeback”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M hjüh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¤h²hh³j½h´M ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjjHjjI‰jJ‰jK‰uh1híh²hhj h³Nh´Nubj„)�”}”(hX•**Parameters** ``struct address_space *mapping`` address space structure to write ``pgoff_t start`` starting page index ``pgoff_t end`` ending page index (inclusive) **Description** This function scans the page range from **start** to **end** (inclusive) and tags all pages that have DIRTY tag set with a special TOWRITE tag. The caller can then use the TOWRITE tag to identify pages eligible for writeback. This mechanism is used to avoid livelocking of writeback by a process steadily creating new dirty pages in the file (thus it is important for this function to be quick so that it can tag pages faster than a dirtying process can create them).”h]”(jM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M hjubj¤)�”}”(hhh]”(j©)�”}”(hŒC``struct address_space *mapping`` address space structure to write ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj@h]”hŒstruct address_space *mapping”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M hj:ubjÉ)�”}”(hhh]”jM)�”}”(hŒ address space structure to write”h]”hŒ address space structure to write”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jUh´M hjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jUh´M hj7ubj©)�”}”(hŒ&``pgoff_t start`` starting page index ”h]”(j¯)�”}”(hŒ``pgoff_t start``”h]”jS)�”}”(hjyh]”hŒ pgoff_t start”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M hjsubjÉ)�”}”(hhh]”jM)�”}”(hŒstarting page index”h]”hŒstarting page index”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jŽh´M hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjsubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŽh´M hj7ubj©)�”}”(hŒ.``pgoff_t end`` ending page index (inclusive) ”h]”(j¯)�”}”(hŒ``pgoff_t end``”h]”jS)�”}”(hj²h]”hŒ pgoff_t end”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M hj¬ubjÉ)�”}”(hhh]”jM)�”}”(hŒending page index (inclusive)”h]”hŒending page index (inclusive)”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÇh´M hjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÇh´M hj7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjíh]”hŒ Description”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjëubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M! hjubjM)�”}”(hXÔThis function scans the page range from **start** to **end** (inclusive) and tags all pages that have DIRTY tag set with a special TOWRITE tag. The caller can then use the TOWRITE tag to identify pages eligible for writeback. This mechanism is used to avoid livelocking of writeback by a process steadily creating new dirty pages in the file (thus it is important for this function to be quick so that it can tag pages faster than a dirtying process can create them).”h]”(hŒ(This function scans the page range from ”…”�”}”(hjh²hh³Nh´NubjŽ)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubhŒ to ”…”�”}”(hjh²hh³Nh´NubjŽ)�”}”(hŒ**end**”h]”hŒend”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubhX˜ (inclusive) and tags all pages that have DIRTY tag set with a special TOWRITE tag. The caller can then use the TOWRITE tag to identify pages eligible for writeback. This mechanism is used to avoid livelocking of writeback by a process steadily creating new dirty pages in the file (thus it is important for this function to be quick so that it can tag pages faster than a dirtying process can create them).”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒwriteback_iter (C function)”Œc.writeback_iter”hNt”auh1hÜhj h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ}struct folio * writeback_iter (struct address_space *mapping, struct writeback_control *wbc, struct folio *folio, int *error)”h]”hù)�”}”(hŒ{struct folio *writeback_iter(struct address_space *mapping, struct writeback_control *wbc, struct folio *folio, int *error)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjRh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´Mƒ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjRh²hh³jch´Mƒ ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjrubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jwŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒwriteback_iter”sbŒc.writeback_iter”†”asbuh1hhjRh²hh³jch´Mƒ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjRh²hh³jch´Mƒ ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjRh²hh³jch´Mƒ ubhÿ)�”}”(hŒwriteback_iter”h]”j)�”}”(hj“h]”hŒwriteback_iter”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj±ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjRh²hh³jch´Mƒ ubj )�”}”(hŒ_(struct address_space *mapping, struct writeback_control *wbc, struct folio *folio, int *error)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÌubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÌubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjëubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jðŒmodname”NŒ classname”Njpjs)�”}”jv]”j‘Œc.writeback_iter”†”asbuh1hhjÌubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÌubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÌubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÌubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÈubj )�”}”(hŒstruct writeback_control *wbc”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj<ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj<ubh)�”}”(hhh]”j)�”}”(hŒwriteback_control”h]”hŒwriteback_control”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj[ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j`Œmodname”NŒ classname”Njpjs)�”}”jv]”j‘Œc.writeback_iter”†”asbuh1hhj<ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj<ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj<ubj)�”}”(hŒwbc”h]”hŒwbc”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÈubj )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¬ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¬ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjËubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÐŒmodname”NŒ classname”Njpjs)�”}”jv]”j‘Œc.writeback_iter”†”asbuh1hhj¬ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¬ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¬ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¬ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÈubj )�”}”(hŒ int *error”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubjF )�”}”(hjI h]”hŒ*”…”�”}”(h•j<h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjubj)�”}”(hŒerror”h]”hŒerror”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÈubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjRh²hh³jch´Mƒ ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjNh²hh³jch´Mƒ ubah}”(h]”jIah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jch´Mƒ hjKh²hubj4)�”}”(hhh]”jM)�”}”(hŒ(iterate folio of a mapping for writeback”h]”hŒ(iterate folio of a mapping for writeback”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´Mƒ hjph²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjKh²hh³jch´Mƒ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj‹jHj‹jI‰jJ‰jK‰uh1híh²hhj h³Nh´Nubj„)�”}”(hXu**Parameters** ``struct address_space *mapping`` address space structure to write ``struct writeback_control *wbc`` writeback context ``struct folio *folio`` previously iterated folio (``NULL`` to start) ``int *error`` in-out pointer for writeback errors (see below) **Description** This function returns the next folio for the writeback operation described by **wbc** on **mapping** and should be called in a while loop in the ->writepages implementation. To start the writeback operation, ``NULL`` is passed in the **folio** argument, and for every subsequent iteration the folio returned previously should be passed back in. If there was an error in the per-folio writeback inside the writeback_iter() loop, **error** should be set to the error value. Once the writeback described in **wbc** has finished, this function will return ``NULL`` and if there was an error in any iteration restore it to **error**. **Note** callers should not manually break out of the loop using break or goto but must keep calling writeback_iter() until it returns ``NULL``. **Return** the folio to write or ``NULL`` if the loop is done.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj•h]”hŒ Parameters”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M‡ hj�ubj¤)�”}”(hhh]”(j©)�”}”(hŒC``struct address_space *mapping`` address space structure to write ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj´h]”hŒstruct address_space *mapping”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M„ hj®ubjÉ)�”}”(hhh]”jM)�”}”(hŒ address space structure to write”h]”hŒ address space structure to write”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÉh´M„ hjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÉh´M„ hj«ubj©)�”}”(hŒ4``struct writeback_control *wbc`` writeback context ”h]”(j¯)�”}”(hŒ!``struct writeback_control *wbc``”h]”jS)�”}”(hjíh]”hŒstruct writeback_control *wbc”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjëubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M… hjçubjÉ)�”}”(hhh]”jM)�”}”(hŒwriteback context”h]”hŒwriteback context”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jh´M… hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjçubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jh´M… hj«ubj©)�”}”(hŒF``struct folio *folio`` previously iterated folio (``NULL`` to start) ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj&h]”hŒstruct folio *folio”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M† hj ubjÉ)�”}”(hhh]”jM)�”}”(hŒ-previously iterated folio (``NULL`` to start)”h]”(hŒpreviously iterated folio (”…”�”}”(hj?h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj?ubhŒ to start)”…”�”}”(hj?h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j;h´M† hj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j;h´M† hj«ubj©)�”}”(hŒ?``int *error`` in-out pointer for writeback errors (see below) ”h]”(j¯)�”}”(hŒ``int *error``”h]”jS)�”}”(hjqh]”hŒ int *error”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjoubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M‡ hjkubjÉ)�”}”(hhh]”jM)�”}”(hŒ/in-out pointer for writeback errors (see below)”h]”hŒ/in-out pointer for writeback errors (see below)”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j†h´M‡ hj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjkubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j†h´M‡ hj«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj�ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj¬h]”hŒ Description”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjªubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M‰ hj�ubjM)�”}”(hŒ®This function returns the next folio for the writeback operation described by **wbc** on **mapping** and should be called in a while loop in the ->writepages implementation.”h]”(hŒNThis function returns the next folio for the writeback operation described by ”…”�”}”(hjÂh²hh³Nh´NubjŽ)�”}”(hŒ**wbc**”h]”hŒwbc”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÂubhŒ on ”…”�”}”(hjÂh²hh³Nh´NubjŽ)�”}”(hŒ **mapping**”h]”hŒmapping”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÂubhŒJ and should be called in a while loop in the ->writepages implementation.”…”�”}”(hjÂh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´Mˆ hj�ubjM)�”}”(hŒªTo start the writeback operation, ``NULL`` is passed in the **folio** argument, and for every subsequent iteration the folio returned previously should be passed back in.”h]”(hŒ"To start the writeback operation, ”…”�”}”(hjõh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjõubhŒ is passed in the ”…”�”}”(hjõh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjõubhŒe argument, and for every subsequent iteration the folio returned previously should be passed back in.”…”�”}”(hjõh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´MŒ hj�ubjM)�”}”(hŒ~If there was an error in the per-folio writeback inside the writeback_iter() loop, **error** should be set to the error value.”h]”(hŒSIf there was an error in the per-folio writeback inside the writeback_iter() loop, ”…”�”}”(hj(h²hh³Nh´NubjŽ)�”}”(hŒ **error**”h]”hŒerror”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj(ubhŒ" should be set to the error value.”…”�”}”(hj(h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M� hj�ubjM)�”}”(hŒœOnce the writeback described in **wbc** has finished, this function will return ``NULL`` and if there was an error in any iteration restore it to **error**.”h]”(hŒ Once the writeback described in ”…”�”}”(hjIh²hh³Nh´NubjŽ)�”}”(hŒ**wbc**”h]”hŒwbc”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjIubhŒ) has finished, this function will return ”…”�”}”(hjIh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjIubhŒ: and if there was an error in any iteration restore it to ”…”�”}”(hjIh²hh³Nh´NubjŽ)�”}”(hŒ **error**”h]”hŒerror”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjIubhŒ.”…”�”}”(hjIh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M“ hj�ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M– hj�ubjM)�”}”(hŒ‡callers should not manually break out of the loop using break or goto but must keep calling writeback_iter() until it returns ``NULL``.”h]”(hŒ~callers should not manually break out of the loop using break or goto but must keep calling writeback_iter() until it returns ”…”�”}”(hj¦h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¦ubhŒ.”…”�”}”(hj¦h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M— hj�ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´Mš hj�ubjM)�”}”(hŒ3the folio to write or ``NULL`` if the loop is done.”h]”(hŒthe folio to write or ”…”�”}”(hjßh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjßubhŒ if the loop is done.”…”�”}”(hjßh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.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”]”(héŒ filemap_dirty_folio (C function)”Œc.filemap_dirty_folio”hNt”auh1hÜhj h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒMbool filemap_dirty_folio (struct address_space *mapping, struct folio *folio)”h]”hù)�”}”(hŒLbool filemap_dirty_folio(struct address_space *mapping, struct folio *folio)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M} ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjh²hh³j-h´M} ubhÿ)�”}”(hŒfilemap_dirty_folio”h]”j)�”}”(hŒfilemap_dirty_folio”h]”hŒfilemap_dirty_folio”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj<ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjh²hh³j-h´M} ubj )�”}”(hŒ4(struct address_space *mapping, struct folio *folio)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjXubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjXubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjwubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j|Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljBsbŒc.filemap_dirty_folio”†”asbuh1hhjXubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjXubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjXubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjXubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjTubj )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÊubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÊubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjéubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jîŒmodname”NŒ classname”Njpjs)�”}”jv]”j–Œc.filemap_dirty_folio”†”asbuh1hhjÊubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÊubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÊubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÊubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjTubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjh²hh³j-h´M} ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjh²hh³j-h´M} ubah}”(h]”jah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j-h´M} hjh²hubj4)�”}”(hhh]”jM)�”}”(hŒAMark a folio dirty for filesystems which do not use buffer_heads.”h]”hŒAMark a folio dirty for filesystems which do not use buffer_heads.”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M} hjLh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjh²hh³j-h´M} ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjgjHjgjI‰jJ‰jK‰uh1híh²hhj h³Nh´Nubj„)�”}”(hX~**Parameters** ``struct address_space *mapping`` Address space this folio belongs to. ``struct folio *folio`` Folio to be marked as dirty. **Description** Filesystems which do not use buffer heads should call this function from their dirty_folio address space operation. It ignores the contents of folio_get_private(), so if the filesystem marks individual blocks as dirty, the filesystem should handle that itself. This is also sometimes used by filesystems which use buffer_heads when a single buffer is being dirtied: we want to set the folio dirty in that case, but not all the buffers. This is a "bottom-up" dirtying, whereas block_dirty_folio() is a "top-down" dirtying. The caller must ensure this doesn't race with truncation. Most will simply hold the folio lock, but e.g. zap_pte_range() calls with the folio mapped and the pte lock held, which also locks out truncation.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjqh]”hŒ Parameters”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjoubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M� hjkubj¤)�”}”(hhh]”(j©)�”}”(hŒG``struct address_space *mapping`` Address space this folio belongs to. ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj�h]”hŒstruct address_space *mapping”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M~ hjŠubjÉ)�”}”(hhh]”jM)�”}”(hŒ$Address space this folio belongs to.”h]”hŒ$Address space this folio belongs to.”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¥h´M~ hj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¥h´M~ hj‡ubj©)�”}”(hŒ5``struct folio *folio`` Folio to be marked as dirty. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjÉh]”hŒstruct folio *folio”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M hjÃubjÉ)�”}”(hhh]”jM)�”}”(hŒFolio to be marked as dirty.”h]”hŒFolio to be marked as dirty.”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÞh´M hjßubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÃubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÞh´M hj‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjkubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M� hjkubjM)�”}”(hXFilesystems which do not use buffer heads should call this function from their dirty_folio address space operation. It ignores the contents of folio_get_private(), so if the filesystem marks individual blocks as dirty, the filesystem should handle that itself.”h]”hXFilesystems which do not use buffer heads should call this function from their dirty_folio address space operation. It ignores the contents of folio_get_private(), so if the filesystem marks individual blocks as dirty, the filesystem should handle that itself.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M€ hjkubjM)�”}”(hXThis is also sometimes used by filesystems which use buffer_heads when a single buffer is being dirtied: we want to set the folio dirty in that case, but not all the buffers. This is a "bottom-up" dirtying, whereas block_dirty_folio() is a "top-down" dirtying.”h]”hX This is also sometimes used by filesystems which use buffer_heads when a single buffer is being dirtied: we want to set the folio dirty in that case, but not all the buffers. This is a “bottom-upâ€� dirtying, whereas block_dirty_folio() is a “top-downâ€� dirtying.”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M… hjkubjM)�”}”(hŒÍThe caller must ensure this doesn't race with truncation. Most will simply hold the folio lock, but e.g. zap_pte_range() calls with the folio mapped and the pte lock held, which also locks out truncation.”h]”hŒÏThe caller must ensure this doesn’t race with truncation. Most will simply hold the folio lock, but e.g. zap_pte_range() calls with the folio mapped and the pte lock held, which also locks out truncation.”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´MŠ hjkubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ(folio_redirty_for_writepage (C function)”Œc.folio_redirty_for_writepage”hNt”auh1hÜhj h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒUbool folio_redirty_for_writepage (struct writeback_control *wbc, struct folio *folio)”h]”hù)�”}”(hŒTbool folio_redirty_for_writepage(struct writeback_control *wbc, struct folio *folio)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjch²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´MŸ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjch²hh³jth´MŸ ubhÿ)�”}”(hŒfolio_redirty_for_writepage”h]”j)�”}”(hŒfolio_redirty_for_writepage”h]”hŒfolio_redirty_for_writepage”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjƒubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjch²hh³jth´MŸ ubj )�”}”(hŒ4(struct writeback_control *wbc, struct folio *folio)”h]”(j )�”}”(hŒstruct writeback_control *wbc”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjŸubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŸubh)�”}”(hhh]”j)�”}”(hŒwriteback_control”h]”hŒwriteback_control”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÃŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj‰sbŒc.folio_redirty_for_writepage”†”asbuh1hhjŸubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŸubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjŸubj)�”}”(hŒwbc”h]”hŒwbc”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŸubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj›ubj )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j5Œmodname”NŒ classname”Njpjs)�”}”jv]”jÝŒc.folio_redirty_for_writepage”†”asbuh1hhjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj›ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjch²hh³jth´MŸ ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj_h²hh³jth´MŸ ubah}”(h]”jZah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jth´MŸ hj\h²hubj4)�”}”(hhh]”jM)�”}”(hŒDecline to write a dirty folio.”h]”hŒDecline to write a dirty folio.”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´MŸ hj“h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj\h²hh³jth´MŸ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj®jHj®jI‰jJ‰jK‰uh1híh²hhj h³Nh´Nubj„)�”}”(hXv**Parameters** ``struct writeback_control *wbc`` The writeback control. ``struct folio *folio`` The folio. **Description** When a writepage implementation decides that it doesn't want to write **folio** for some reason, it should call this function, unlock **folio** and return 0. **Return** True if we redirtied the folio. False if someone else dirtied it first.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¸h]”hŒ Parameters”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M£ hj²ubj¤)�”}”(hhh]”(j©)�”}”(hŒ9``struct writeback_control *wbc`` The writeback control. ”h]”(j¯)�”}”(hŒ!``struct writeback_control *wbc``”h]”jS)�”}”(hj×h]”hŒstruct writeback_control *wbc”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M  hjÑubjÉ)�”}”(hhh]”jM)�”}”(hŒThe writeback control.”h]”hŒThe writeback control.”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jìh´M  hjíubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jìh´M  hjÎubj©)�”}”(hŒ#``struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjh]”hŒstruct folio *folio”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M¡ hj ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j%h´M¡ hj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j%h´M¡ hjÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj²ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjKh]”hŒ Description”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjIubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M£ hj²ubjM)�”}”(hŒ�When a writepage implementation decides that it doesn't want to write **folio** for some reason, it should call this function, unlock **folio** and return 0.”h]”(hŒHWhen a writepage implementation decides that it doesn’t want to write ”…”�”}”(hjah²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjaubhŒ7 for some reason, it should call this function, unlock ”…”�”}”(hjah²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjaubhŒ and return 0.”…”�”}”(hjah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M¢ hj²ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M¦ hj²ubjM)�”}”(hŒHTrue if we redirtied the folio. False if someone else dirtied it first.”h]”hŒHTrue if we redirtied the folio. False if someone else dirtied it first.”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.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”]”(héŒfolio_mark_dirty (C function)”Œc.folio_mark_dirty”hNt”auh1hÜhj h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ+bool folio_mark_dirty (struct folio *folio)”h]”hù)�”}”(hŒ*bool folio_mark_dirty(struct folio *folio)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj×h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´Mà ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj×h²hh³jèh´Mà ubhÿ)�”}”(hŒfolio_mark_dirty”h]”j)�”}”(hŒfolio_mark_dirty”h]”hŒfolio_mark_dirty”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj÷ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj×h²hh³jèh´Mà ubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j7Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljýsbŒc.folio_mark_dirty”†”asbuh1hhjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj×h²hh³jèh´Mà ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÓh²hh³jèh´Mà ubah}”(h]”jÎah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jèh´Mà hjÐh²hubj4)�”}”(hhh]”jM)�”}”(hŒMark a folio as being modified.”h]”hŒMark a folio as being modified.”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´Mà hj—h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÐh²hh³jèh´Mà ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj²jHj²jI‰jJ‰jK‰uh1híh²hhj h³Nh´Nubj„)�”}”(hXù**Parameters** ``struct folio *folio`` The folio. **Description** The folio may not be truncated while this function is running. Holding the folio lock is sufficient to prevent truncation, but some callers cannot acquire a sleeping lock. These callers instead hold the page table lock for a page table which contains at least one page in this folio. Truncation will block on the page table lock as it unmaps pages before removing the folio from its mapping. .. DANGER:: Do not use this on a folio obtained from a function like get_user_pages_fast() without holding appropriate locks; you might want to use set_page_dirty_lock() or folio_mark_dirty_lock() instead. **Return** True if the folio was newly dirtied, false if it was already dirty.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¼h]”hŒ Parameters”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjºubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´MÇ hj¶ubj¤)�”}”(hhh]”j©)�”}”(hŒ#``struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjÛh]”hŒstruct folio *folio”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´MÄ hjÕubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jðh´MÄ hjñubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jðh´MÄ hjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¶ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´MÆ hj¶ubjM)�”}”(hX‰The folio may not be truncated while this function is running. Holding the folio lock is sufficient to prevent truncation, but some callers cannot acquire a sleeping lock. These callers instead hold the page table lock for a page table which contains at least one page in this folio. Truncation will block on the page table lock as it unmaps pages before removing the folio from its mapping.”h]”hX‰The folio may not be truncated while this function is running. Holding the folio lock is sufficient to prevent truncation, but some callers cannot acquire a sleeping lock. These callers instead hold the page table lock for a page table which contains at least one page in this folio. Truncation will block on the page table lock as it unmaps pages before removing the folio from its mapping.”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´MÅ hj¶ubhŒdanger”“”)�”}”(hŒÁDo not use this on a folio obtained from a function like get_user_pages_fast() without holding appropriate locks; you might want to use set_page_dirty_lock() or folio_mark_dirty_lock() instead.”h]”jM)�”}”(hŒÁDo not use this on a folio obtained from a function like get_user_pages_fast() without holding appropriate locks; you might want to use set_page_dirty_lock() or folio_mark_dirty_lock() instead.”h]”hŒÁDo not use this on a folio obtained from a function like get_user_pages_fast() without holding appropriate locks; you might want to use set_page_dirty_lock() or folio_mark_dirty_lock() instead.”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´MÍ hj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j;hj¶ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjXh]”hŒReturn”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´MÑ hj¶ubjM)�”}”(hŒCTrue if the folio was newly dirtied, false if it was already dirty.”h]”hŒCTrue if the folio was newly dirtied, false if it was already dirty.”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.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”]”(héŒ!folio_wait_writeback (C function)”Œc.folio_wait_writeback”hNt”auh1hÜhj h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ/void folio_wait_writeback (struct folio *folio)”h]”hù)�”}”(hŒ.void folio_wait_writeback(struct folio *folio)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj™h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´Mç ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj™h²hh³j«h´Mç ubhÿ)�”}”(hŒfolio_wait_writeback”h]”j)�”}”(hŒfolio_wait_writeback”h]”hŒfolio_wait_writeback”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjºubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj™h²hh³j«h´Mç ubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÖubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÖubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjõubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”júŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÀsbŒc.folio_wait_writeback”†”asbuh1hhjÖubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÖubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÖubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÖubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÒubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj™h²hh³j«h´Mç ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj•h²hh³j«h´Mç ubah}”(h]”j�ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j«h´Mç hj’h²hubj4)�”}”(hhh]”jM)�”}”(hŒ%Wait for a folio to finish writeback.”h]”hŒ%Wait for a folio to finish writeback.”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´Mç hjZh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj’h²hh³j«h´Mç ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjujHjujI‰jJ‰jK‰uh1híh²hhj h³Nh´Nubj„)�”}”(hX€**Parameters** ``struct folio *folio`` The folio to wait for. **Description** If the folio is currently being written back to storage, wait for the I/O to complete. **Context** Sleeps. Must be called in process context and with no spinlocks held. Caller should hold a reference on the folio. If the folio is not locked, writeback may start again after writeback has finished.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjh]”hŒ Parameters”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´Më hjyubj¤)�”}”(hhh]”j©)�”}”(hŒ/``struct folio *folio`` The folio to wait for. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjžh]”hŒstruct folio *folio”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjœubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´Mè hj˜ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to wait for.”h]”hŒThe folio to wait for.”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j³h´Mè hj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j³h´Mè hj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjyubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÙh]”hŒ Description”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´Mê hjyubjM)�”}”(hŒVIf the folio is currently being written back to storage, wait for the I/O to complete.”h]”hŒVIf the folio is currently being written back to storage, wait for the I/O to complete.”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´Mé hjyubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´Mì hjyubjM)�”}”(hŒÈSleeps. Must be called in process context and with no spinlocks held. Caller should hold a reference on the folio. If the folio is not locked, writeback may start again after writeback has finished.”h]”hŒÈSleeps. Must be called in process context and with no spinlocks held. Caller should hold a reference on the folio. If the folio is not locked, writeback may start again after writeback has finished.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´Mí hjyubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ*folio_wait_writeback_killable (C function)”Œc.folio_wait_writeback_killable”hNt”auh1hÜhj h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ7int folio_wait_writeback_killable (struct folio *folio)”h]”hù)�”}”(hŒ6int folio_wait_writeback_killable(struct folio *folio)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjE h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjA h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´Mü ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjT h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjA h²hh³jS h´Mü ubhÿ)�”}”(hŒfolio_wait_writeback_killable”h]”j)�”}”(hŒfolio_wait_writeback_killable”h]”hŒfolio_wait_writeback_killable”…”�”}”(hjf h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjb ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjA h²hh³jS h´Mü ubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj‚ h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj~ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj~ ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj  h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj� ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¢ Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljh sbŒc.folio_wait_writeback_killable”†”asbuh1hhj~ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀ h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj~ ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj~ ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÛ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj~ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjz ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjA h²hh³jS h´Mü ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj= h²hh³jS h´Mü ubah}”(h]”j8 ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jS h´Mü hj: h²hubj4)�”}”(hhh]”jM)�”}”(hŒ%Wait for a folio to finish writeback.”h]”hŒ%Wait for a folio to finish writeback.”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´Mü hj!h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj: h²hh³jS h´Mü ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj!jHj!jI‰jJ‰jK‰uh1híh²hhj h³Nh´Nubj„)�”}”(hXæ**Parameters** ``struct folio *folio`` The folio to wait for. **Description** If the folio is currently being written back to storage, wait for the I/O to complete or a fatal signal to arrive. **Context** Sleeps. Must be called in process context and with no spinlocks held. Caller should hold a reference on the folio. If the folio is not locked, writeback may start again after writeback has finished. **Return** 0 on success, -EINTR if we get a fatal signal while waiting.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj'!h]”hŒ Parameters”…”�”}”(hj)!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj%!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M hj!!ubj¤)�”}”(hhh]”j©)�”}”(hŒ/``struct folio *folio`` The folio to wait for. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjF!h]”hŒstruct folio *folio”…”�”}”(hjH!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjD!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´Mý hj@!ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to wait for.”h]”hŒThe folio to wait for.”…”�”}”(hj_!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j[!h´Mý hj\!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj@!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j[!h´Mý hj=!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj!!ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj�!h]”hŒ Description”…”�”}”(hjƒ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´Mÿ hj!!ubjM)�”}”(hŒrIf the folio is currently being written back to storage, wait for the I/O to complete or a fatal signal to arrive.”h]”hŒrIf the folio is currently being written back to storage, wait for the I/O to complete or a fatal signal to arrive.”…”�”}”(hj—!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´Mþ hj!!ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M hj!!ubjM)�”}”(hŒÈSleeps. Must be called in process context and with no spinlocks held. Caller should hold a reference on the folio. If the folio is not locked, writeback may start again after writeback has finished.”h]”hŒÈSleeps. Must be called in process context and with no spinlocks held. Caller should hold a reference on the folio. If the folio is not locked, writeback may start again after writeback has finished.”…”�”}”(hj¾!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M hj!!ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M hj!!ubjM)�”}”(hŒ<0 on success, -EINTR if we get a fatal signal while waiting.”h]”hŒ<0 on success, -EINTR if we get a fatal signal while waiting.”…”�”}”(hjå!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.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”]”(héŒfolio_wait_stable (C function)”Œc.folio_wait_stable”hNt”auh1hÜhj h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ,void folio_wait_stable (struct folio *folio)”h]”hù)�”}”(hŒ+void folio_wait_stable(struct folio *folio)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj"h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#"h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj"h²hh³j""h´M ubhÿ)�”}”(hŒfolio_wait_stable”h]”j)�”}”(hŒfolio_wait_stable”h]”hŒfolio_wait_stable”…”�”}”(hj5"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj1"ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj"h²hh³j""h´M ubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjQ"h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjM"ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^"h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjM"ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjo"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjl"ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jq"Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj7"sbŒc.folio_wait_stable”†”asbuh1hhjM"ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�"h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjM"ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj�"h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjM"ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjª"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjM"ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjI"ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj"h²hh³j""h´M ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj "h²hh³j""h´M ubah}”(h]”j"ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j""h´M hj "h²hubj4)�”}”(hhh]”jM)�”}”(hŒ+wait for writeback to finish, if necessary.”h]”hŒ+wait for writeback to finish, if necessary.”…”�”}”(hjÔ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M hjÑ"h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj "h²hh³j""h´M ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjì"jHjì"jI‰jJ‰jK‰uh1híh²hhj h³Nh´Nubj„)�”}”(hXô**Parameters** ``struct folio *folio`` The folio to wait on. **Description** This function determines if the given folio is related to a backing device that requires folio contents to be held stable during writeback. If so, then it will wait for any pending writeback to complete. **Context** Sleeps. Must be called in process context and with no spinlocks held. Caller should hold a reference on the folio. If the folio is not locked, writeback may start again after writeback has finished.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjö"h]”hŒ Parameters”…”�”}”(hjø"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjô"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M hjð"ubj¤)�”}”(hhh]”j©)�”}”(hŒ.``struct folio *folio`` The folio to wait on. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj#h]”hŒstruct folio *folio”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M hj#ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to wait on.”h]”hŒThe folio to wait on.”…”�”}”(hj.#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j*#h´M hj+#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j*#h´M hj #ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjð"ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M hjð"ubjM)�”}”(hŒËThis function determines if the given folio is related to a backing device that requires folio contents to be held stable during writeback. If so, then it will wait for any pending writeback to complete.”h]”hŒËThis function determines if the given folio is related to a backing device that requires folio contents to be held stable during writeback. If so, then it will wait for any pending writeback to complete.”…”�”}”(hjf#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M hjð"ubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjw#h]”hŒContext”…”�”}”(hjy#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hju#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M hjð"ubjM)�”}”(hŒÈSleeps. Must be called in process context and with no spinlocks held. Caller should hold a reference on the folio. If the folio is not locked, writeback may start again after writeback has finished.”h]”hŒÈSleeps. Must be called in process context and with no spinlocks held. Caller should hold a reference on the folio. If the folio is not locked, writeback may start again after writeback has finished.”…”�”}”(hj�#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:77: ./mm/page-writeback.c”h´M hjð"ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj h²hh³Nh´Nubeh}”(h]”Œ writeback”ah ]”h"]”Œ writeback”ah$]”h&]”uh1hµhj¯œh²hh³hÊh´KJubh¶)�”}”(hhh]”(h»)�”}”(hŒTruncate”h]”hŒTruncate”…”�”}”(hj®#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj«#h²hh³hÊh´KQubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_invalidate (C function)”Œc.folio_invalidate”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒIvoid folio_invalidate (struct folio *folio, size_t offset, size_t length)”h]”hù)�”}”(hŒHvoid folio_invalidate(struct folio *folio, size_t offset, size_t length)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÕ#h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÑ#h²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´KyubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjä#h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÑ#h²hh³jã#h´Kyubhÿ)�”}”(hŒfolio_invalidate”h]”j)�”}”(hŒfolio_invalidate”h]”hŒfolio_invalidate”…”�”}”(hjö#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjò#ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÑ#h²hh³jã#h´Kyubj )�”}”(hŒ3(struct folio *folio, size_t offset, size_t length)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj$ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj$ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj0$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj-$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j2$Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljø#sbŒc.folio_invalidate”†”asbuh1hhj$ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjP$h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj$ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj^$h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj$ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjk$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj $ubj )�”}”(hŒ size_t offset”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj‡$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj„$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j‰$Œmodname”NŒ classname”Njpjs)�”}”jv]”jL$Œc.folio_invalidate”†”asbuh1hhj€$ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥$h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj€$ubj)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hj³$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj€$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj $ubj )�”}”(hŒ size_t length”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÏ$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÌ$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÑ$Œmodname”NŒ classname”Njpjs)�”}”jv]”jL$Œc.folio_invalidate”†”asbuh1hhjÈ$ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí$h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÈ$ubj)�”}”(hŒlength”h]”hŒlength”…”�”}”(hjû$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÈ$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj $ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÑ#h²hh³jã#h´Kyubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÍ#h²hh³jã#h´Kyubah}”(h]”jÈ#ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jã#h´KyhjÊ#h²hubj4)�”}”(hhh]”jM)�”}”(hŒ"Invalidate part or all of a folio.”h]”hŒ"Invalidate part or all of a folio.”…”�”}”(hj%%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´Kyhj"%h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÊ#h²hh³jã#h´Kyubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj=%jHj=%jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hX[**Parameters** ``struct folio *folio`` The folio which is affected. ``size_t offset`` start of the range to invalidate ``size_t length`` length of the range to invalidate **Description** folio_invalidate() is called when all or part of the folio has become invalidated by a truncate operation. folio_invalidate() does not have to release all buffers, but it must ensure that no dirty buffer is left outside **offset** and that no I/O is underway against any of the blocks which are outside the truncation point. Because the caller is about to free (and possibly reuse) those blocks on-disk.”h]”(jM)�”}”(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&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´K}hjA%ubj¤)�”}”(hhh]”(j©)�”}”(hŒ5``struct folio *folio`` The folio which is affected. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjf%h]”hŒstruct folio *folio”…”�”}”(hjh%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjd%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´Kzhj`%ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio which is affected.”h]”hŒThe folio which is affected.”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j{%h´Kzhj|%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj`%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j{%h´Kzhj]%ubj©)�”}”(hŒ3``size_t offset`` start of the range to invalidate ”h]”(j¯)�”}”(hŒ``size_t offset``”h]”jS)�”}”(hjŸ%h]”hŒ size_t offset”…”�”}”(hj¡%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´K{hj™%ubjÉ)�”}”(hhh]”jM)�”}”(hŒ start of the range to invalidate”h]”hŒ start of the range to invalidate”…”�”}”(hj¸%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j´%h´K{hjµ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj™%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j´%h´K{hj]%ubj©)�”}”(hŒ4``size_t length`` length of the range to invalidate ”h]”(j¯)�”}”(hŒ``size_t length``”h]”jS)�”}”(hjØ%h]”hŒ size_t length”…”�”}”(hjÚ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÖ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´K|hjÒ%ubjÉ)�”}”(hhh]”jM)�”}”(hŒ!length of the range to invalidate”h]”hŒ!length of the range to invalidate”…”�”}”(hjñ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jí%h´K|hjî%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÒ%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jí%h´K|hj]%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjA%ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj&h]”hŒ Description”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´K~hjA%ubjM)�”}”(hŒjfolio_invalidate() is called when all or part of the folio has become invalidated by a truncate operation.”h]”hŒjfolio_invalidate() is called when all or part of the folio has become invalidated by a truncate operation.”…”�”}”(hj)&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´K}hjA%ubjM)�”}”(hX)folio_invalidate() does not have to release all buffers, but it must ensure that no dirty buffer is left outside **offset** and that no I/O is underway against any of the blocks which are outside the truncation point. Because the caller is about to free (and possibly reuse) those blocks on-disk.”h]”(hŒqfolio_invalidate() does not have to release all buffers, but it must ensure that no dirty buffer is left outside ”…”�”}”(hj8&h²hh³Nh´NubjŽ)�”}”(hŒ **offset**”h]”hŒoffset”…”�”}”(hj@&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj8&ubhŒ® and that no I/O is underway against any of the blocks which are outside the truncation point. Because the caller is about to free (and possibly reuse) those blocks on-disk.”…”�”}”(hj8&h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´K€hjA%ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ'truncate_inode_pages_range (C function)”Œc.truncate_inode_pages_range”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ[void truncate_inode_pages_range (struct address_space *mapping, loff_t lstart, uoff_t lend)”h]”hù)�”}”(hŒZvoid truncate_inode_pages_range(struct address_space *mapping, loff_t lstart, uoff_t lend)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjy&h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hju&h²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MWubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ&h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhju&h²hh³j‡&h´MWubhÿ)�”}”(hŒtruncate_inode_pages_range”h]”j)�”}”(hŒtruncate_inode_pages_range”h]”hŒtruncate_inode_pages_range”…”�”}”(hjš&h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj–&ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhju&h²hh³j‡&h´MWubj )�”}”(hŒ;(struct address_space *mapping, loff_t lstart, uoff_t lend)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¶&h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj²&ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃ&h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj²&ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjÔ&h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÑ&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÖ&Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljœ&sbŒc.truncate_inode_pages_range”†”asbuh1hhj²&ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjô&h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj²&ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj²&ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj²&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj®&ubj )�”}”(hŒ loff_t lstart”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj+'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj('ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j-'Œmodname”NŒ classname”Njpjs)�”}”jv]”jð&Œc.truncate_inode_pages_range”†”asbuh1hhj$'ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjI'h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj$'ubj)�”}”(hŒlstart”h]”hŒlstart”…”�”}”(hjW'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj$'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj®&ubj )�”}”(hŒ uoff_t lend”h]”(h)�”}”(hhh]”j)�”}”(hŒuoff_t”h]”hŒuoff_t”…”�”}”(hjs'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjp'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”ju'Œmodname”NŒ classname”Njpjs)�”}”jv]”jð&Œc.truncate_inode_pages_range”†”asbuh1hhjl'ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘'h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjl'ubj)�”}”(hŒlend”h]”hŒlend”…”�”}”(hjŸ'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjl'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj®&ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hju&h²hh³j‡&h´MWubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjq&h²hh³j‡&h´MWubah}”(h]”jl&ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j‡&h´MWhjn&h²hubj4)�”}”(hhh]”jM)�”}”(hŒ=truncate range of pages specified by start & end byte offsets”h]”hŒ=truncate range of pages specified by start & end byte offsets”…”�”}”(hjÉ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MWhjÆ'h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjn&h²hh³j‡&h´MWubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjá'jHjá'jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hX**Parameters** ``struct address_space *mapping`` mapping to truncate ``loff_t lstart`` offset from which to truncate ``uoff_t lend`` offset to which to truncate (inclusive) **Description** Truncate the page cache, removing the pages that are between specified offsets (and zeroing out partial pages if lstart or lend + 1 is not page aligned). Truncate takes two passes - the first pass is nonblocking. It will not block on page locks and it will not block on writeback. The second pass will wait. This is to prevent as much IO as possible in the affected region. The first pass will remove most pages, so the search cost of the second pass is low. We pass down the cache-hot hint to the page freeing code. Even if the mapping is large, it is probably the case that the final pages are the most recently touched, and freeing happens in ascending file offset order. Note that since ->invalidate_folio() accepts range to invalidate truncate_inode_pages_range is able to handle cases where lend + 1 is not page aligned properly.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjë'h]”hŒ Parameters”…”�”}”(hjí'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjé'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M[hjå'ubj¤)�”}”(hhh]”(j©)�”}”(hŒ6``struct address_space *mapping`` mapping to truncate ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj (h]”hŒstruct address_space *mapping”…”�”}”(hj (h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MXhj(ubjÉ)�”}”(hhh]”jM)�”}”(hŒmapping to truncate”h]”hŒmapping to truncate”…”�”}”(hj#(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j(h´MXhj (ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j(h´MXhj(ubj©)�”}”(hŒ0``loff_t lstart`` offset from which to truncate ”h]”(j¯)�”}”(hŒ``loff_t lstart``”h]”jS)�”}”(hjC(h]”hŒ loff_t lstart”…”�”}”(hjE(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjA(ubah}”(•h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MYhj=(ubjÉ)�”}”(hhh]”jM)�”}”(hŒoffset from which to truncate”h]”hŒoffset from which to truncate”…”�”}”(hj\(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jX(h´MYhjY(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj=(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jX(h´MYhj(ubj©)�”}”(hŒ8``uoff_t lend`` offset to which to truncate (inclusive) ”h]”(j¯)�”}”(hŒ``uoff_t lend``”h]”jS)�”}”(hj|(h]”hŒ uoff_t lend”…”�”}”(hj~(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjz(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MZhjv(ubjÉ)�”}”(hhh]”jM)�”}”(hŒ'offset to which to truncate (inclusive)”h]”hŒ'offset to which to truncate (inclusive)”…”�”}”(hj•(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‘(h´MZhj’(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjv(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‘(h´MZhj(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjå'ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj·(h]”hŒ Description”…”�”}”(hj¹(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjµ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M\hjå'ubjM)�”}”(hŒ™Truncate the page cache, removing the pages that are between specified offsets (and zeroing out partial pages if lstart or lend + 1 is not page aligned).”h]”hŒ™Truncate the page cache, removing the pages that are between specified offsets (and zeroing out partial pages if lstart or lend + 1 is not page aligned).”…”�”}”(hjÍ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M[hjå'ubjM)�”}”(hX3Truncate takes two passes - the first pass is nonblocking. It will not block on page locks and it will not block on writeback. The second pass will wait. This is to prevent as much IO as possible in the affected region. The first pass will remove most pages, so the search cost of the second pass is low.”h]”hX3Truncate takes two passes - the first pass is nonblocking. It will not block on page locks and it will not block on writeback. The second pass will wait. This is to prevent as much IO as possible in the affected region. The first pass will remove most pages, so the search cost of the second pass is low.”…”�”}”(hjÜ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M_hjå'ubjM)�”}”(hŒØWe pass down the cache-hot hint to the page freeing code. Even if the mapping is large, it is probably the case that the final pages are the most recently touched, and freeing happens in ascending file offset order.”h]”hŒØWe pass down the cache-hot hint to the page freeing code. Even if the mapping is large, it is probably the case that the final pages are the most recently touched, and freeing happens in ascending file offset order.”…”�”}”(hjë(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´Mehjå'ubjM)�”}”(hŒ Note that since ->invalidate_folio() accepts range to invalidate truncate_inode_pages_range is able to handle cases where lend + 1 is not page aligned properly.”h]”hŒ Note that since ->invalidate_folio() accepts range to invalidate truncate_inode_pages_range is able to handle cases where lend + 1 is not page aligned properly.”…”�”}”(hjú(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´Mihjå'ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!truncate_inode_pages (C function)”Œc.truncate_inode_pages”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒHvoid truncate_inode_pages (struct address_space *mapping, loff_t lstart)”h]”hù)�”}”(hŒGvoid truncate_inode_pages(struct address_space *mapping, loff_t lstart)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj))h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj%)h²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M×ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8)h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj%)h²hh³j7)h´M×ubhÿ)�”}”(hŒtruncate_inode_pages”h]”j)�”}”(hŒtruncate_inode_pages”h]”hŒtruncate_inode_pages”…”�”}”(hjJ)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjF)ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj%)h²hh³j7)h´M×ubj )�”}”(hŒ.(struct address_space *mapping, loff_t lstart)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjf)h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjb)ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs)h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjb)ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj„)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�)ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j†)Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljL)sbŒc.truncate_inode_pages”†”asbuh1hhjb)ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤)h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjb)ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj²)h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjb)ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj¿)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjb)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj^)ubj )�”}”(hŒ loff_t lstart”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjÛ)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjØ)ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÝ)Œmodname”NŒ classname”Njpjs)�”}”jv]”j )Œc.truncate_inode_pages”†”asbuh1hhjÔ)ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjù)h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÔ)ubj)�”}”(hŒlstart”h]”hŒlstart”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÔ)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj^)ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj%)h²hh³j7)h´M×ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj!)h²hh³j7)h´M×ubah}”(h]”j)ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j7)h´M×hj)h²hubj4)�”}”(hhh]”jM)�”}”(hŒ'truncate *all* the pages from an offset”h]”(hŒ truncate ”…”�”}”(hj1*h²hh³Nh´NubjB)�”}”(hŒ*all*”h]”hŒall”…”�”}”(hj9*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj1*ubhŒ the pages from an offset”…”�”}”(hj1*h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M×hj.*h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj)h²hh³j7)h´M×ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj[*jHj[*jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hXØ**Parameters** ``struct address_space *mapping`` mapping to truncate ``loff_t lstart`` offset from which to truncate **Description** Called under (and serialised by) inode->i_rwsem and mapping->invalidate_lock. **Note** When this function returns, there can be a page in the process of deletion (inside __filemap_remove_folio()) in the specified range. Thus mapping->nrpages can be non-zero when this function returns even after truncation of the whole mapping.”h]”(jM)�”}”(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&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MÛhj_*ubj¤)�”}”(hhh]”(j©)�”}”(hŒ6``struct address_space *mapping`` mapping to truncate ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj„*h]”hŒstruct address_space *mapping”…”�”}”(hj†*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‚*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MØhj~*ubjÉ)�”}”(hhh]”jM)�”}”(hŒmapping to truncate”h]”hŒmapping to truncate”…”�”}”(hj�*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j™*h´MØhjš*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj~*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j™*h´MØhj{*ubj©)�”}”(hŒ0``loff_t lstart`` offset from which to truncate ”h]”(j¯)�”}”(hŒ``loff_t lstart``”h]”jS)�”}”(hj½*h]”hŒ loff_t lstart”…”�”}”(hj¿*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj»*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MÙhj·*ubjÉ)�”}”(hhh]”jM)�”}”(hŒoffset from which to truncate”h]”hŒoffset from which to truncate”…”�”}”(hjÖ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÒ*h´MÙhjÓ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj·*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÒ*h´MÙhj{*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj_*ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjø*h]”hŒ Description”…”�”}”(hjú*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjö*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MÛhj_*ubjM)�”}”(hŒMCalled under (and serialised by) inode->i_rwsem and mapping->invalidate_lock.”h]”hŒMCalled under (and serialised by) inode->i_rwsem and mapping->invalidate_lock.”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MÚhj_*ubjM)�”}”(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&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MÝhj_*ubjM)�”}”(hŒòWhen this function returns, there can be a page in the process of deletion (inside __filemap_remove_folio()) in the specified range. Thus mapping->nrpages can be non-zero when this function returns even after truncation of the whole mapping.”h]”hŒòWhen this function returns, there can be a page in the process of deletion (inside __filemap_remove_folio()) in the specified range. Thus mapping->nrpages can be non-zero when this function returns even after truncation of the whole mapping.”…”�”}”(hj5+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.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”]”(héŒ'truncate_inode_pages_final (C function)”Œc.truncate_inode_pages_final”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ?void truncate_inode_pages_final (struct address_space *mapping)”h]”hù)�”}”(hŒ>void truncate_inode_pages_final(struct address_space *mapping)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjd+h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj`+h²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MêubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs+h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj`+h²hh³jr+h´Mêubhÿ)�”}”(hŒtruncate_inode_pages_final”h]”j)�”}”(hŒtruncate_inode_pages_final”h]”hŒtruncate_inode_pages_final”…”�”}”(hj…+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�+ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj`+h²hh³jr+h´Mêubj )�”}”(hŒ(struct address_space *mapping)”h]”j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¡+h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj�+ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®+h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�+ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj¿+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¼+ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÁ+Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj‡+sbŒc.truncate_inode_pages_final”†”asbuh1hhj�+ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß+h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�+ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjí+h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj�+ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjú+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj™+ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj`+h²hh³jr+h´Mêubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj\+h²hh³jr+h´Mêubah}”(h]”jW+ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jr+h´MêhjY+h²hubj4)�”}”(hhh]”jM)�”}”(hŒ&truncate *all* pages before inode dies”h]”(hŒ truncate ”…”�”}”(hj$,h²hh³Nh´NubjB)�”}”(hŒ*all*”h]”hŒall”…”�”}”(hj,,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj$,ubhŒ pages before inode dies”…”�”}”(hj$,h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´Mêhj!,h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjY+h²hh³jr+h´Mêubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjN,jHjN,jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hX**Parameters** ``struct address_space *mapping`` mapping to truncate **Description** Called under (and serialized by) inode->i_rwsem. Filesystems have to use this in the .evict_inode path to inform the VM that this is the final truncate and the inode is going away.”h]”(jM)�”}”(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&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MîhjR,ubj¤)�”}”(hhh]”j©)�”}”(hŒ6``struct address_space *mapping`` mapping to truncate ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjw,h]”hŒstruct address_space *mapping”…”�”}”(hjy,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhju,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´Mëhjq,ubjÉ)�”}”(hhh]”jM)�”}”(hŒmapping to truncate”h]”hŒmapping to truncate”…”�”}”(hj�,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jŒ,h´Mëhj�,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjq,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŒ,h´Mëhjn,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjR,ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj²,h]”hŒ Description”…”�”}”(hj´,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj°,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MíhjR,ubjM)�”}”(hŒ0Called under (and serialized by) inode->i_rwsem.”h]”hŒ0Called under (and serialized by) inode->i_rwsem.”…”�”}”(hjÈ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MìhjR,ubjM)�”}”(hŒƒFilesystems have to use this in the .evict_inode path to inform the VM that this is the final truncate and the inode is going away.”h]”hŒƒFilesystems have to use this in the .evict_inode path to inform the VM that this is the final truncate and the inode is going away.”…”�”}”(hj×,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MîhjR,ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%invalidate_mapping_pages (C function)”Œc.invalidate_mapping_pages”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒbunsigned long invalidate_mapping_pages (struct address_space *mapping, pgoff_t start, pgoff_t end)”h]”hù)�”}”(hŒaunsigned long invalidate_mapping_pages(struct address_space *mapping, pgoff_t start, pgoff_t end)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj-h²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MJubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj-h²hh³j-h´MJubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj#-h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj-h²hh³j-h´MJubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1-h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj-h²hh³j-h´MJubhÿ)�”}”(hŒinvalidate_mapping_pages”h]”j)�”}”(hŒinvalidate_mapping_pages”h]”hŒinvalidate_mapping_pages”…”�”}”(hjC-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj?-ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj-h²hh³j-h´MJubj )�”}”(hŒ;(struct address_space *mapping, pgoff_t start, pgoff_t end)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj_-h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj[-ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl-h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj[-ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj}-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjz-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j-Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljE-sbŒc.invalidate_mapping_pages”†”asbuh1hhj[-ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�-h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj[-ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj«-h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj[-ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj¸-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj[-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjW-ubj )�”}”(hŒ pgoff_t start”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjÔ-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÑ-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÖ-Œmodname”NŒ classname”Njpjs)�”}”jv]”j™-Œc.invalidate_mapping_pages”†”asbuh1hhjÍ-ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjò-h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÍ-ubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÍ-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjW-ubj )�”}”(hŒ pgoff_t end”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj.ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j.Œmodname”NŒ classname”Njpjs)�”}”jv]”j™-Œc.invalidate_mapping_pages”†”asbuh1hhj.ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:.h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj.ubj)�”}”(hŒend”h]”hŒend”…”�”}”(hjH.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjW-ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj-h²hh³j-h´MJubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjþ,h²hh³j-h´MJubah}”(h]”jù,ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j-h´MJhjû,h²hubj4)�”}”(hhh]”jM)�”}”(hŒ1Invalidate all clean, unlocked cache of one inode”h]”hŒ1Invalidate all clean, unlocked cache of one inode”…”�”}”(hjr.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MJhjo.h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjû,h²hh³j-h´MJubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjŠ.jHjŠ.jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hX<**Parameters** ``struct address_space *mapping`` the address_space which holds the cache to invalidate ``pgoff_t start`` the offset 'from' which to invalidate ``pgoff_t end`` the offset 'to' which to invalidate (inclusive) **Description** This function removes pages that are clean, unmapped and unlocked, as well as shadow entries. It will not block on IO activity. If you want to remove all the pages of one inode, regardless of their use and writeback state, use truncate_inode_pages(). **Return** The number of indices that had their contents invalidated”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj”.h]”hŒ Parameters”…”�”}”(hj–.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj’.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MNhjŽ.ubj¤)�”}”(hhh]”(j©)�”}”(hŒX``struct address_space *mapping`` the address_space which holds the cache to invalidate ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj³.h]”hŒstruct address_space *mapping”…”�”}”(hjµ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj±.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MKhj­.ubjÉ)�”}”(hhh]”jM)�”}”(hŒ5the address_space which holds the cache to invalidate”h]”hŒ5the address_space which holds the cache to invalidate”…”�”}”(hjÌ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÈ.h´MKhjÉ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj­.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÈ.h´MKhjª.ubj©)�”}”(hŒ8``pgoff_t start`` the offset 'from' which to invalidate ”h]”(j¯)�”}”(hŒ``pgoff_t start``”h]”jS)�”}”(hjì.h]”hŒ pgoff_t start”…”�”}”(hjî.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjê.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MLhjæ.ubjÉ)�”}”(hhh]”jM)�”}”(hŒ%the offset 'from' which to invalidate”h]”hŒ)the offset ‘from’ which to invalidate”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j/h´MLhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjæ.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j/h´MLhjª.ubj©)�”}”(hŒ@``pgoff_t end`` the offset 'to' which to invalidate (inclusive) ”h]”(j¯)�”}”(hŒ``pgoff_t end``”h]”jS)�”}”(hj%/h]”hŒ pgoff_t end”…”�”}”(hj'/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj#/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MMhj/ubjÉ)�”}”(hhh]”jM)�”}”(hŒ/the offset 'to' which to invalidate (inclusive)”h]”hŒ3the offset ‘to’ which to invalidate (inclusive)”…”�”}”(hj>/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j:/h´MMhj;/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j:/h´MMhjª.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjŽ.ubjM)�”}”(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&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MOhjŽ.ubjM)�”}”(hŒThis function removes pages that are clean, unmapped and unlocked, as well as shadow entries. It will not block on IO activity.”h]”hŒThis function removes pages that are clean, unmapped and unlocked, as well as shadow entries. It will not block on IO activity.”…”�”}”(hjv/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MNhjŽ.ubjM)�”}”(hŒzIf you want to remove all the pages of one inode, regardless of their use and writeback state, use truncate_inode_pages().”h]”hŒzIf you want to remove all the pages of one inode, regardless of their use and writeback state, use truncate_inode_pages().”…”�”}”(hj…/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MQhjŽ.ubjM)�”}”(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&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MThjŽ.ubjM)�”}”(hŒ9The number of indices that had their contents invalidated”h]”hŒ9The number of indices that had their contents invalidated”…”�”}”(hj¬/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MUhjŽ.ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ*invalidate_inode_pages2_range (C function)”Œc.invalidate_inode_pages2_range”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ]int invalidate_inode_pages2_range (struct address_space *mapping, pgoff_t start, pgoff_t end)”h]”hù)�”}”(hŒ\int invalidate_inode_pages2_range(struct address_space *mapping, pgoff_t start, pgoff_t end)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjÛ/h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj×/h²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MšubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjê/h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj×/h²hh³jé/h´Mšubhÿ)�”}”(hŒinvalidate_inode_pages2_range”h]”j)�”}”(hŒinvalidate_inode_pages2_range”h]”hŒinvalidate_inode_pages2_range”…”�”}”(hjü/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjø/ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj×/h²hh³jé/h´Mšubj )�”}”(hŒ;(struct address_space *mapping, pgoff_t start, pgoff_t end)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj0ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%0h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj0ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj60h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj30ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j80Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljþ/sbŒc.invalidate_inode_pages2_range”†”asbuh1hhj0ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjV0h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj0ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjd0h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj0ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjq0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj0ubj )�”}”(hŒ pgoff_t start”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hj�0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŠ0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j�0Œmodname”NŒ classname”Njpjs)�”}”jv]”jR0Œc.invalidate_inode_pages2_range”†”asbuh1hhj†0ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«0h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj†0ubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj¹0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj†0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj0ubj )�”}”(hŒ pgoff_t end”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjÕ0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÒ0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j×0Œmodname”NŒ classname”Njpjs)�”}”jv]”jR0Œc.invalidate_inode_pages2_range”†”asbuh1hhjÎ0ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjó0h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÎ0ubj)�”}”(hŒend”h]”hŒend”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÎ0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj0ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj×/h²hh³jé/h´Mšubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÓ/h²hh³jé/h´Mšubah}”(h]”jÎ/ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jé/h´MšhjÐ/h²hubj4)�”}”(hhh]”jM)�”}”(hŒ+remove range of pages from an address_space”h]”hŒ+remove range of pages from an address_space”…”�”}”(hj+1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´Mšhj(1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÐ/h²hh³jé/h´Mšubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjC1jHjC1jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hXu**Parameters** ``struct address_space *mapping`` the address_space ``pgoff_t start`` the page offset 'from' which to invalidate ``pgoff_t end`` the page offset 'to' which to invalidate (inclusive) **Description** Any pages which are found to be mapped into pagetables are unmapped prior to invalidation. **Return** -EBUSY if any pages could not be invalidated.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjM1h]”hŒ Parameters”…”�”}”(hjO1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjK1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MžhjG1ubj¤)�”}”(hhh]”(j©)�”}”(hŒ4``struct address_space *mapping`` the address_space ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjl1h]”hŒstruct address_space *mapping”…”�”}”(hjn1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M›hjf1ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe address_space”h]”hŒthe address_space”…”�”}”(hj…1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�1h´M›hj‚1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjf1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�1h´M›hjc1ubj©)�”}”(hŒ=``pgoff_t start`` the page offset 'from' which to invalidate ”h]”(j¯)�”}”(hŒ``pgoff_t start``”h]”jS)�”}”(hj¥1h]”hŒ pgoff_t start”…”�”}”(hj§1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj£1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MœhjŸ1ubjÉ)�”}”(hhh]”jM)�”}”(hŒ*the page offset 'from' which to invalidate”h]”hŒ.the page offset ‘from’ which to invalidate”…”�”}”(hj¾1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jº1h´Mœhj»1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjŸ1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jº1h´Mœhjc1ubj©)�”}”(hŒE``pgoff_t end`` the page offset 'to' which to invalidate (inclusive) ”h]”(j¯)�”}”(hŒ``pgoff_t end``”h]”jS)�”}”(hjÞ1h]”hŒ pgoff_t end”…”�”}”(hjà1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÜ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M�hjØ1ubjÉ)�”}”(hhh]”jM)�”}”(hŒ4the page offset 'to' which to invalidate (inclusive)”h]”hŒ8the page offset ‘to’ which to invalidate (inclusive)”…”�”}”(hj÷1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jó1h´M�hjô1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjØ1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jó1h´M�hjc1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjG1ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj2h]”hŒ Description”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MŸhjG1ubjM)�”}”(hŒZAny pages which are found to be mapped into pagetables are unmapped prior to invalidation.”h]”hŒZAny pages which are found to be mapped into pagetables are unmapped prior to invalidation.”…”�”}”(hj/2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MžhjG1ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj@2h]”hŒReturn”…”�”}”(hjB2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj>2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M¡hjG1ubjM)�”}”(hŒ--EBUSY if any pages could not be invalidated.”h]”hŒ--EBUSY if any pages could not be invalidated.”…”�”}”(hjV2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M¢hjG1ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$invalidate_inode_pages2 (C function)”Œc.invalidate_inode_pages2”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ;int invalidate_inode_pages2 (struct address_space *mapping)”h]”hù)�”}”(hŒ:int invalidate_inode_pages2(struct address_space *mapping)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj…2h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj�2h²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MòubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”2h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�2h²hh³j“2h´Mòubhÿ)�”}”(hŒinvalidate_inode_pages2”h]”j)�”}”(hŒinvalidate_inode_pages2”h]”hŒinvalidate_inode_pages2”…”�”}”(hj¦2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¢2ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj�2h²hh³j“2h´Mòubj )�”}”(hŒ(struct address_space *mapping)”h]”j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÂ2h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¾2ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏ2h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¾2ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjà2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÝ2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jâ2Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj¨2sbŒc.invalidate_inode_pages2”†”asbuh1hhj¾2ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¾2ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¾2ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjº2ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj�2h²hh³j“2h´Mòubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj}2h²hh³j“2h´Mòubah}”(h]”jx2ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j“2h´Mòhjz2h²hubj4)�”}”(hhh]”jM)�”}”(hŒ&remove all pages from an address_space”h]”hŒ&remove all pages from an address_space”…”�”}”(hjE3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MòhjB3h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjz2h²hh³j“2h´Mòubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj]3jHj]3jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hŒí**Parameters** ``struct address_space *mapping`` the address_space **Description** Any pages which are found to be mapped into pagetables are unmapped prior to invalidation. **Return** -EBUSY if any pages could not be invalidated.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjg3h]”hŒ Parameters”…”�”}”(hji3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hje3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´Möhja3ubj¤)�”}”(hhh]”j©)�”}”(hŒ4``struct address_space *mapping`` the address_space ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj†3h]”hŒstruct address_space *mapping”…”�”}”(hjˆ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj„3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´Móhj€3ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe address_space”h]”hŒthe address_space”…”�”}”(hjŸ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j›3h´Móhjœ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj€3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j›3h´Móhj}3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hja3ubjM)�”}”(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&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´Mõhja3ubjM)�”}”(hŒZAny pages which are found to be mapped into pagetables are unmapped prior to invalidation.”h]”hŒZAny pages which are found to be mapped into pagetables are unmapped prior to invalidation.”…”�”}”(hj×3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´Môhja3ubjM)�”}”(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&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M÷hja3ubjM)�”}”(hŒ--EBUSY if any pages could not be invalidated.”h]”hŒ--EBUSY if any pages could not be invalidated.”…”�”}”(hjþ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´Møhja3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒtruncate_pagecache (C function)”Œc.truncate_pagecache”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ=void truncate_pagecache (struct inode *inode, loff_t newsize)”h]”hù)�”}”(hŒ6h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj:6h²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M$ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjM6h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj:6h²hh³jL6h´M$ubhÿ)�”}”(hŒtruncate_setsize”h]”j)�”}”(hŒtruncate_setsize”h]”hŒtruncate_setsize”…”�”}”(hj_6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj[6ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj:6h²hh³jL6h´M$ubj )�”}”(hŒ%(struct inode *inode, loff_t newsize)”h]”(j )�”}”(hŒstruct inode *inode”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj{6h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjw6ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ6h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjw6ubh)�”}”(hhh]”j)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj™6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj–6ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j›6Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlja6sbŒc.truncate_setsize”†”asbuh1hhjw6ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹6h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjw6ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÇ6h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjw6ubj)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjÔ6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjw6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjs6ubj )�”}”(hŒloff_t newsize”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjð6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjí6ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jò6Œmodname”NŒ classname”Njpjs)�”}”jv]”jµ6Œc.truncate_setsize”†”asbuh1hhjé6ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjé6ubj)�”}”(hŒnewsize”h]”hŒnewsize”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjé6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjs6ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj:6h²hh³jL6h´M$ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj66h²hh³jL6h´M$ubah}”(h]”j16ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jL6h´M$hj36h²hubj4)�”}”(hhh]”jM)�”}”(hŒ.update inode and pagecache for a new file size”h]”hŒ.update inode and pagecache for a new file size”…”�”}”(hjF7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M$hjC7h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj36h²hh³jL6h´M$ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj^7jHj^7jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hXå**Parameters** ``struct inode *inode`` inode ``loff_t newsize`` new file size **Description** truncate_setsize updates i_size and performs pagecache truncation (if necessary) to **newsize**. It will be typically be called from the filesystem's setattr function when ATTR_SIZE is passed in. Must be called with a lock serializing truncates and writes (generally i_rwsem but e.g. xfs uses a different lock) and before all filesystem specific block truncation has been performed.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjh7h]”hŒ Parameters”…”�”}”(hjj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjf7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M(hjb7ubj¤)�”}”(hhh]”(j©)�”}”(hŒ``struct inode *inode`` inode ”h]”(j¯)�”}”(hŒ``struct inode *inode``”h]”jS)�”}”(hj‡7h]”hŒstruct inode *inode”…”�”}”(hj‰7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj…7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M%hj�7ubjÉ)�”}”(hhh]”jM)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj 7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jœ7h´M%hj�7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jœ7h´M%hj~7ubj©)�”}”(hŒ!``loff_t newsize`` new file size ”h]”(j¯)�”}”(hŒ``loff_t newsize``”h]”jS)�”}”(hjÀ7h]”hŒloff_t newsize”…”�”}”(hjÂ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¾7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M&hjº7ubjÉ)�”}”(hhh]”jM)�”}”(hŒ new file size”h]”hŒ new file size”…”�”}”(hjÙ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÕ7h´M&hjÖ7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjº7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÕ7h´M&hj~7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjb7ubjM)�”}”(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&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M(hjb7ubjM)�”}”(hŒÃtruncate_setsize updates i_size and performs pagecache truncation (if necessary) to **newsize**. It will be typically be called from the filesystem's setattr function when ATTR_SIZE is passed in.”h]”(hŒTtruncate_setsize updates i_size and performs pagecache truncation (if necessary) to ”…”�”}”(hj8h²hh³Nh´NubjŽ)�”}”(hŒ **newsize**”h]”hŒnewsize”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj8ubhŒf. It will be typically be called from the filesystem’s setattr function when ATTR_SIZE is passed in.”…”�”}”(hj8h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M'hjb7ubjM)�”}”(hŒºMust be called with a lock serializing truncates and writes (generally i_rwsem but e.g. xfs uses a different lock) and before all filesystem specific block truncation has been performed.”h]”hŒºMust be called with a lock serializing truncates and writes (generally i_rwsem but e.g. xfs uses a different lock) and before all filesystem specific block truncation has been performed.”…”�”}”(hj28h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M+hjb7ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%pagecache_isize_extended (C function)”Œc.pagecache_isize_extended”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒKvoid pagecache_isize_extended (struct inode *inode, loff_t from, loff_t to)”h]”hù)�”}”(hŒJvoid pagecache_isize_extended(struct inode *inode, loff_t from, loff_t to)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hja8h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj]8h²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M<ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjp8h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj]8h²hh³jo8h´M<ubhÿ)�”}”(hŒpagecache_isize_extended”h]”j)�”}”(hŒpagecache_isize_extended”h]”hŒpagecache_isize_extended”…”�”}”(hj‚8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj~8ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj]8h²hh³jo8h´M<ubj )�”}”(hŒ-(struct inode *inode, loff_t from, loff_t to)”h]”(j )�”}”(hŒstruct inode *inode”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjž8h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjš8ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«8h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjš8ubh)�”}”(hhh]”j)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj¼8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¹8ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¾8Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj„8sbŒc.pagecache_isize_extended”†”asbuh1hhjš8ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜ8h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjš8ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjê8h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjš8ubj)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj÷8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjš8ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj–8ubj )�”}”(hŒ loff_t from”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j9Œmodname”NŒ classname”Njpjs)�”}”jv]”jØ8Œc.pagecache_isize_extended”†”asbuh1hhj 9ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj19h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj 9ubj)�”}”(hŒfrom”h]”hŒfrom”…”�”}”(hj?9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj 9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj–8ubj )�”}”(hŒ loff_t to”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj[9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjX9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j]9Œmodname”NŒ classname”Njpjs)�”}”jv]”jØ8Œc.pagecache_isize_extended”†”asbuh1hhjT9ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjy9h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjT9ubj)�”}”(hŒto”h]”hŒto”…”�”}”(hj‡9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjT9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj–8ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj]8h²hh³jo8h´M<ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjY8h²hh³jo8h´M<ubah}”(h]”jT8ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jo8h´M<hjV8h²hubj4)�”}”(hhh]”jM)�”}”(hŒ*update pagecache after extension of i_size”h]”hŒ*update pagecache after extension of i_size”…”�”}”(hj±9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M<hj®9h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjV8h²hh³jo8h´M<ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÉ9jHjÉ9jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hXq**Parameters** ``struct inode *inode`` inode for which i_size was extended ``loff_t from`` original inode size ``loff_t to`` new inode size **Description** Handle extension of inode size either caused by extending truncate or by write starting after current i_size. We mark the page straddling current i_size RO so that page_mkwrite() is called on the first write access to the page. The filesystem will update its per-block information before user writes to the page via mmap after the i_size has been changed. The function must be called after i_size is updated so that page fault coming after we unlock the folio will already see the new i_size. The function must be called while we still hold i_rwsem - this not only makes sure i_size is stable but also that userspace cannot observe new i_size value before we are prepared to store mmap writes at new inode size.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÓ9h]”hŒ Parameters”…”�”}”(hjÕ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÑ9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M@hjÍ9ubj¤)�”}”(hhh]”(j©)�”}”(hŒ<``struct inode *inode`` inode for which i_size was extended ”h]”(j¯)�”}”(hŒ``struct inode *inode``”h]”jS)�”}”(hjò9h]”hŒstruct inode *inode”…”�”}”(hjô9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjð9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M=hjì9ubjÉ)�”}”(hhh]”jM)�”}”(hŒ#inode for which i_size was extended”h]”hŒ#inode for which i_size was extended”…”�”}”(hj :h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j:h´M=hj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjì9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j:h´M=hjé9ubj©)�”}”(hŒ$``loff_t from`` original inode size ”h]”(j¯)�”}”(hŒ``loff_t from``”h]”jS)�”}”(hj+:h]”hŒ loff_t from”…”�”}”(hj-:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj):ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M>hj%:ubjÉ)�”}”(hhh]”jM)�”}”(hŒoriginal inode size”h]”hŒoriginal inode size”…”�”}”(hjD:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j@:h´M>hjA:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj%:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j@:h´M>hjé9ubj©)�”}”(hŒ``loff_t to`` new inode size ”h]”(j¯)�”}”(hŒ ``loff_t to``”h]”jS)�”}”(hjd:h]”hŒ loff_t to”…”�”}”(hjf:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjb:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M?hj^:ubjÉ)�”}”(hhh]”jM)�”}”(hŒnew inode size”h]”hŒnew inode size”…”�”}”(hj}:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jy:h´M?hjz:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj^:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jy:h´M?hjé9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÍ9ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjŸ:h]”hŒ Description”…”�”}”(hj¡:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MAhjÍ9ubjM)�”}”(hXeHandle extension of inode size either caused by extending truncate or by write starting after current i_size. We mark the page straddling current i_size RO so that page_mkwrite() is called on the first write access to the page. The filesystem will update its per-block information before user writes to the page via mmap after the i_size has been changed.”h]”hXeHandle extension of inode size either caused by extending truncate or by write starting after current i_size. We mark the page straddling current i_size RO so that page_mkwrite() is called on the first write access to the page. The filesystem will update its per-block information before user writes to the page via mmap after the i_size has been changed.”…”�”}”(hjµ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M@hjÍ9ubjM)�”}”(hXcThe function must be called after i_size is updated so that page fault coming after we unlock the folio will already see the new i_size. The function must be called while we still hold i_rwsem - this not only makes sure i_size is stable but also that userspace cannot observe new i_size value before we are prepared to store mmap writes at new inode size.”h]”hXcThe function must be called after i_size is updated so that page fault coming after we unlock the folio will already see the new i_size. The function must be called while we still hold i_rwsem - this not only makes sure i_size is stable but also that userspace cannot observe new i_size value before we are prepared to store mmap writes at new inode size.”…”�”}”(hjÄ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´MGhjÍ9ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%truncate_pagecache_range (C function)”Œc.truncate_pagecache_range”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒOvoid truncate_pagecache_range (struct inode *inode, loff_t lstart, loff_t lend)”h]”hù)�”}”(hŒNvoid truncate_pagecache_range(struct inode *inode, loff_t lstart, loff_t lend)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjó:h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjï:h²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M|ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjï:h²hh³j;h´M|ubhÿ)�”}”(hŒtruncate_pagecache_range”h]”j)�”}”(hŒtruncate_pagecache_range”h]”hŒtruncate_pagecache_range”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj;ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjï:h²hh³j;h´M|ubj )�”}”(hŒ1(struct inode *inode, loff_t lstart, loff_t lend)”h]”(j )�”}”(hŒstruct inode *inode”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj0;h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj,;ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=;h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj,;ubh)�”}”(hhh]”j)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjN;h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjK;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jP;Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj;sbŒc.truncate_pagecache_range”†”asbuh1hhj,;ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjn;h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj,;ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj|;h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj,;ubj)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj‰;h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj,;ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj(;ubj )�”}”(hŒ loff_t lstart”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj¥;h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¢;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j§;Œmodname”NŒ classname”Njpjs)�”}”jv]”jj;Œc.truncate_pagecache_range”†”asbuh1hhjž;ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃ;h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjž;ubj)�”}”(hŒlstart”h]”hŒlstart”…”�”}”(hjÑ;h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjž;ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj(;ubj )�”}”(hŒ loff_t lend”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjí;h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjê;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jï;Œmodname”NŒ classname”Njpjs)�”}”jv]”jj;Œc.truncate_pagecache_range”†”asbuh1hhjæ;ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj <h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjæ;ubj)�”}”(hŒlend”h]”hŒlend”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjæ;ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj(;ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjï:h²hh³j;h´M|ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjë:h²hh³j;h´M|ubah}”(h]”jæ:ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j;h´M|hjè:h²hubj4)�”}”(hhh]”jM)�”}”(hŒ/unmap and remove pagecache that is hole-punched”h]”hŒ/unmap and remove pagecache that is hole-punched”…”�”}”(hjC<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M|hj@<h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjè:h²hh³j;h´M|ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj[<jHj[<jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hX**Parameters** ``struct inode *inode`` inode ``loff_t lstart`` offset of beginning of hole ``loff_t lend`` offset of last byte of hole **Description** This function should typically be called before the filesystem releases resources associated with the freed range (eg. deallocates blocks). This way, pagecache will always stay logically coherent with on-disk format, and the filesystem would not have to deal with situations such as writepage being called for a page that has already had its underlying blocks deallocated.”h]”(jM)�”}”(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&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”•šh´M€hj_<ubj¤)�”}”(hhh]”(j©)�”}”(hŒ``struct inode *inode`` inode ”h]”(j¯)�”}”(hŒ``struct inode *inode``”h]”jS)�”}”(hj„<h]”hŒstruct inode *inode”…”�”}”(hj†<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‚<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M}hj~<ubjÉ)�”}”(hhh]”jM)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj�<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j™<h´M}hjš<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj~<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j™<h´M}hj{<ubj©)�”}”(hŒ.``loff_t lstart`` offset of beginning of hole ”h]”(j¯)�”}”(hŒ``loff_t lstart``”h]”jS)�”}”(hj½<h]”hŒ loff_t lstart”…”�”}”(hj¿<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj»<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M~hj·<ubjÉ)�”}”(hhh]”jM)�”}”(hŒoffset of beginning of hole”h]”hŒoffset of beginning of hole”…”�”}”(hjÖ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÒ<h´M~hjÓ<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj·<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÒ<h´M~hj{<ubj©)�”}”(hŒ,``loff_t lend`` offset of last byte of hole ”h]”(j¯)�”}”(hŒ``loff_t lend``”h]”jS)�”}”(hjö<h]”hŒ loff_t lend”…”�”}”(hjø<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjô<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´Mhjð<ubjÉ)�”}”(hhh]”jM)�”}”(hŒoffset of last byte of hole”h]”hŒoffset of last byte of hole”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j =h´Mhj =ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjð<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j =h´Mhj{<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj_<ubjM)�”}”(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&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.c”h´M�hj_<ubjM)�”}”(hXtThis function should typically be called before the filesystem releases resources associated with the freed range (eg. deallocates blocks). This way, pagecache will always stay logically coherent with on-disk format, and the filesystem would not have to deal with situations such as writepage being called for a page that has already had its underlying blocks deallocated.”h]”hXtThis function should typically be called before the filesystem releases resources associated with the freed range (eg. deallocates blocks). This way, pagecache will always stay logically coherent with on-disk format, and the filesystem would not have to deal with situations such as writepage being called for a page that has already had its underlying blocks deallocated.”…”�”}”(hjG=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:83: ./mm/truncate.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”]”(héŒfilemap_set_wb_err (C function)”Œc.filemap_set_wb_err”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ@void filemap_set_wb_err (struct address_space *mapping, int err)”h]”hù)�”}”(hŒ?void filemap_set_wb_err(struct address_space *mapping, int err)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjv=h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjr=h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´KEubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…=h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjr=h²hh³j„=h´KEubhÿ)�”}”(hŒfilemap_set_wb_err”h]”j)�”}”(hŒfilemap_set_wb_err”h]”hŒfilemap_set_wb_err”…”�”}”(hj—=h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj“=ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjr=h²hh³j„=h´KEubj )�”}”(hŒ((struct address_space *mapping, int err)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj³=h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¯=ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀ=h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¯=ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjÑ=h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÎ=ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÓ=Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj™=sbŒc.filemap_set_wb_err”†”asbuh1hhj¯=ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñ=h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¯=ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÿ=h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¯=ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj >h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¯=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj«=ubj )�”}”(hŒint err”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj%>h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj!>ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3>h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj!>ubj)�”}”(hŒerr”h]”hŒerr”…”�”}”(hjA>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj!>ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj«=ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjr=h²hh³j„=h´KEubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjn=h²hh³j„=h´KEubah}”(h]”ji=ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j„=h´KEhjk=h²hubj4)�”}”(hhh]”jM)�”}”(hŒ)set a writeback error on an address_space”h]”hŒ)set a writeback error on an address_space”…”�”}”(hjk>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´KEhjh>h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjk=h²hh³j„=h´KEubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjƒ>jHjƒ>jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hX‚**Parameters** ``struct address_space *mapping`` mapping in which to set writeback error ``int err`` error to be set in mapping **Description** When writeback fails in some way, we must record that error so that userspace can be informed when fsync and the like are called. We endeavor to report errors on any file that was open at the time of the error. Some internal callers also need to know when writeback errors have occurred. When a writeback error occurs, most filesystems will want to call filemap_set_wb_err to record the error in the mapping so that it will be automatically reported whenever fsync is called on the file.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj�>h]”hŒ Parameters”…”�”}”(hj�>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‹>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´KIhj‡>ubj¤)�”}”(hhh]”(j©)�”}”(hŒJ``struct address_space *mapping`` mapping in which to set writeback error ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj¬>h]”hŒstruct address_space *mapping”…”�”}”(hj®>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjª>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´KFhj¦>ubjÉ)�”}”(hhh]”jM)�”}”(hŒ'mapping in which to set writeback error”h]”hŒ'mapping in which to set writeback error”…”�”}”(hjÅ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÁ>h´KFhjÂ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¦>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÁ>h´KFhj£>ubj©)�”}”(hŒ'``int err`` error to be set in mapping ”h]”(j¯)�”}”(hŒ ``int err``”h]”jS)�”}”(hjå>h]”hŒint err”…”�”}”(hjç>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjã>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´KGhjß>ubjÉ)�”}”(hhh]”jM)�”}”(hŒerror to be set in mapping”h]”hŒerror to be set in mapping”…”�”}”(hjþ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jú>h´KGhjû>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjß>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jú>h´KGhj£>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj‡>ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj ?h]”hŒ Description”…”�”}”(hj"?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´KIhj‡>ubjM)�”}”(hX!When writeback fails in some way, we must record that error so that userspace can be informed when fsync and the like are called. We endeavor to report errors on any file that was open at the time of the error. Some internal callers also need to know when writeback errors have occurred.”h]”hX!When writeback fails in some way, we must record that error so that userspace can be informed when fsync and the like are called. We endeavor to report errors on any file that was open at the time of the error. Some internal callers also need to know when writeback errors have occurred.”…”�”}”(hj6?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´KHhj‡>ubjM)�”}”(hŒÇWhen a writeback error occurs, most filesystems will want to call filemap_set_wb_err to record the error in the mapping so that it will be automatically reported whenever fsync is called on the file.”h]”hŒÇWhen a writeback error occurs, most filesystems will want to call filemap_set_wb_err to record the error in the mapping so that it will be automatically reported whenever fsync is called on the file.”…”�”}”(hjE?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´KMhj‡>ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!filemap_check_wb_err (C function)”Œc.filemap_check_wb_err”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒHint filemap_check_wb_err (struct address_space *mapping, errseq_t since)”h]”hù)�”}”(hŒGint filemap_check_wb_err(struct address_space *mapping, errseq_t since)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjt?h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjp?h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´KZubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒ?h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjp?h²hh³j‚?h´KZubhÿ)�”}”(hŒfilemap_check_wb_err”h]”j)�”}”(hŒfilemap_check_wb_err”h]”hŒfilemap_check_wb_err”…”�”}”(hj•?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‘?ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjp?h²hh³j‚?h´KZubj )�”}”(hŒ/(struct address_space *mapping, errseq_t since)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj±?h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj­?ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾?h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj­?ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjÏ?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÌ?ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÑ?Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj—?sbŒc.filemap_check_wb_err”†”asbuh1hhj­?ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjï?h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj­?ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjý?h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj­?ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj @h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj­?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj©?ubj )�”}”(hŒerrseq_t since”h]”(h)�”}”(hhh]”j)�”}”(hŒerrseq_t”h]”hŒerrseq_t”…”�”}”(hj&@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj#@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j(@Œmodname”NŒ classname”Njpjs)�”}”jv]”jë?Œc.filemap_check_wb_err”†”asbuh1hhj@ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD@h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj@ubj)�”}”(hŒsince”h]”hŒsince”…”�”}”(hjR@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj©?ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjp?h²hh³j‚?h´KZubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjl?h²hh³j‚?h´KZubah}”(h]”jg?ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j‚?h´KZhji?h²hubj4)�”}”(hhh]”jM)�”}”(hŒ1has an error occurred since the mark was sampled?”h]”hŒ1has an error occurred since the mark was sampled?”…”�”}”(hj|@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´KZhjy@h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hji?h²hh³j‚?h´KZubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj”@jHj”@jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hXG**Parameters** ``struct address_space *mapping`` mapping to check for writeback errors ``errseq_t since`` previously-sampled errseq_t **Description** Grab the errseq_t value from the mapping, and see if it has changed "since" the given value was sampled. If it has then report the latest error set, otherwise return 0.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjž@h]”hŒ Parameters”…”�”}”(hj @h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjœ@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´K^hj˜@ubj¤)�”}”(hhh]”(j©)�”}”(hŒH``struct address_space *mapping`` mapping to check for writeback errors ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj½@h]”hŒstruct address_space *mapping”…”�”}”(hj¿@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj»@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´K[hj·@ubjÉ)�”}”(hhh]”jM)�”}”(hŒ%mapping to check for writeback errors”h]”hŒ%mapping to check for writeback errors”…”�”}”(hjÖ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÒ@h´K[hjÓ@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj·@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÒ@h´K[hj´@ubj©)�”}”(hŒ/``errseq_t since`` previously-sampled errseq_t ”h]”(j¯)�”}”(hŒ``errseq_t since``”h]”jS)�”}”(hjö@h]”hŒerrseq_t since”…”�”}”(hjø@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjô@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´K\hjð@ubjÉ)�”}”(hhh]”jM)�”}”(hŒpreviously-sampled errseq_t”h]”hŒpreviously-sampled errseq_t”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j Ah´K\hj Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjð@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j Ah´K\hj´@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj˜@ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj1Ah]”hŒ Description”…”�”}”(hj3Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj/Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´K^hj˜@ubjM)�”}”(hŒhGrab the errseq_t value from the mapping, and see if it has changed "since" the given value was sampled.”h]”hŒlGrab the errseq_t value from the mapping, and see if it has changed “sinceâ€� the given value was sampled.”…”�”}”(hjGAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´K]hj˜@ubjM)�”}”(hŒ?If it has then report the latest error set, otherwise return 0.”h]”hŒ?If it has then report the latest error set, otherwise return 0.”…”�”}”(hjVAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.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”]”(héŒ"filemap_sample_wb_err (C function)”Œc.filemap_sample_wb_err”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ>errseq_t filemap_sample_wb_err (struct address_space *mapping)”h]”hù)�”}”(hŒ=errseq_t filemap_sample_wb_err(struct address_space *mapping)”h]”(h)�”}”(hhh]”j)�”}”(hŒerrseq_t”h]”hŒerrseq_t”…”�”}”(hjˆAh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj…Aubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jŠAŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒfilemap_sample_wb_err”sbŒc.filemap_sample_wb_err”†”asbuh1hhj�Ah²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´KjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªAh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�Ah²hh³j©Ah´Kjubhÿ)�”}”(hŒfilemap_sample_wb_err”h]”j)�”}”(hj¦Ah]”hŒfilemap_sample_wb_err”…”�”}”(hj¼Ah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¸Aubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj�Ah²hh³j©Ah´Kjubj )�”}”(hŒ(struct address_space *mapping)”h]”j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj×Ah²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÓAubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäAh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÓAubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjõAh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjòAubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j÷AŒmodname”NŒ classname”Njpjs)�”}”jv]”j¤AŒc.filemap_sample_wb_err”†”asbuh1hhjÓAubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÓAubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj!Bh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÓAubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj.Bh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÓAubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÏAubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj�Ah²hh³j©Ah´Kjubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj}Ah²hh³j©Ah´Kjubah}”(h]”jxAah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j©Ah´KjhjzAh²hubj4)�”}”(hhh]”jM)�”}”(hŒ4sample the current errseq_t to test for later errors”h]”hŒ4sample the current errseq_t to test for later errors”…”�”}”(hjXBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´KjhjUBh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjzAh²hh³j©Ah´Kjubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjpBjHjpBjI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hŒß**Parameters** ``struct address_space *mapping`` mapping to be sampled **Description** Writeback errors are always reported relative to a particular sample point in the past. This function provides those sample points.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjzBh]”hŒ Parameters”…”�”}”(hj|Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjxBubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´KnhjtBubj¤)�”}”(hhh]”j©)�”}”(hŒ8``struct address_space *mapping`` mapping to be sampled ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj™Bh]”hŒstruct address_space *mapping”…”�”}”(hj›Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj—Bubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Kkhj“BubjÉ)�”}”(hhh]”jM)�”}”(hŒmapping to be sampled”h]”hŒmapping to be sampled”…”�”}”(hj²Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j®Bh´Kkhj¯Bubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj“Bubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j®Bh´Kkhj�Bubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjtBubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´KmhjtBubjM)�”}”(hŒƒWriteback errors are always reported relative to a particular sample point in the past. This function provides those sample points.”h]”hŒƒWriteback errors are always reported relative to a particular sample point in the past. This function provides those sample points.”…”�”}”(hjêBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´KlhjtBubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfile_sample_sb_err (C function)”Œc.file_sample_sb_err”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ/errseq_t file_sample_sb_err (struct file *file)”h]”hù)�”}”(hŒ.errseq_t file_sample_sb_err(struct file *file)”h]”(h)�”}”(hhh]”j)�”}”(hŒerrseq_t”h]”hŒerrseq_t”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjCubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jCŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒfile_sample_sb_err”sbŒc.file_sample_sb_err”†”asbuh1hhjCh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´KvubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>Ch²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjCh²hh³j=Ch´Kvubhÿ)�”}”(hŒfile_sample_sb_err”h]”j)�”}”(hj:Ch]”hŒfile_sample_sb_err”…”�”}”(hjPCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjLCubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjCh²hh³j=Ch´Kvubj )�”}”(hŒ(struct file *file)”h]”j )�”}”(hŒstruct file *file”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjkCh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjgCubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxCh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjgCubh)�”}”(hhh]”j)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj‰Ch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj†Cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j‹CŒmodname”NŒ classname”Njpjs)�”}”jv]”j8CŒc.file_sample_sb_err”†”asbuh1hhjgCubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§Ch²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjgCubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjµCh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjgCubj)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjÂCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjgCubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjcCubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjCh²hh³j=Ch´Kvubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjCh²hh³j=Ch´Kvubah}”(h]”j Cah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j=Ch´KvhjCh²hubj4)�”}”(hhh]”jM)�”}”(hŒ4sample the current errseq_t to test for later errors”h]”hŒ4sample the current errseq_t to test for later errors”…”�”}”(hjìCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´KvhjéCh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjCh²hh³j=Ch´Kvubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjDjHjDjI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hŒ¥**Parameters** ``struct file *file`` file pointer to be sampled **Description** Grab the most current superblock-level errseq_t value for the given struct file.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjDh]”hŒ Parameters”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj Dubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´KzhjDubj¤)�”}”(hhh]”j©)�”}”(hŒ1``struct file *file`` file pointer to be sampled ”h]”(j¯)�”}”(hŒ``struct file *file``”h]”jS)�”}”(hj-Dh]”hŒstruct file *file”…”�”}”(hj/Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj+Dubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Kwhj'DubjÉ)�”}”(hhh]”jM)�”}”(hŒfile pointer to be sampled”h]”hŒfile pointer to be sampled”…”�”}”(hjFDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jBDh´KwhjCDubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj'Dubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jBDh´Kwhj$Dubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjDubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjhDh]”hŒ Description”…”�”}”(hjjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjfDubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´KyhjDubjM)�”}”(hŒPGrab the most current superblock-level errseq_t value for the given struct file.”h]”hŒPGrab the most current superblock-level errseq_t value for the given struct file.”…”�”}”(hj~Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´KxhjDubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmapping_set_error (C function)”Œc.mapping_set_error”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒAvoid mapping_set_error (struct address_space *mapping, int error)”h]”hù)�”}”(hŒ@void mapping_set_error(struct address_space *mapping, int error)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj­Dh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj©Dh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´KáubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼Dh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj©Dh²hh³j»Dh´Káubhÿ)�”}”(hŒmapping_set_error”h]”j)�”}”(hŒmapping_set_error”h]”hŒmapping_set_error”…”�”}”(hjÎDh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÊDubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj©Dh²hh³j»Dh´Káubj )�”}”(hŒ*(struct address_space *mapping, int error)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjêDh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjæDubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷Dh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjæDubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjEubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j EŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÐDsbŒc.mapping_set_error”†”asbuh1hhjæDubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(Eh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjæDubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj6Eh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjæDubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjCEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjæDubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjâDubj )�”}”(hŒ int error”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj\Eh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjXEubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjEh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjXEubj)�”}”(hŒerror”h]”hŒerror”…”�”}”(hjxEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjXEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjâDubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj©Dh²hh³j»Dh´Káubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¥Dh²hh³j»Dh´Káubah}”(h]”j Dah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j»Dh´Káhj¢Dh²hubj4)�”}”(hhh]”jM)�”}”(hŒ-record a writeback error in the address_space”h]”hŒ-record a writeback error in the address_space”…”�”}”(hj¢Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´KáhjŸEh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¢Dh²hh³j»Dh´Káubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjºEjHjºEjI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hX|**Parameters** ``struct address_space *mapping`` the mapping in which an error should be set ``int error`` the error to set in the mapping **Description** When writeback fails in some way, we must record that error so that userspace can be informed when fsync and the like are called. We endeavor to report errors on any file that was open at the time of the error. Some internal callers also need to know when writeback errors have occurred. When a writeback error occurs, most filesystems will want to call mapping_set_error to record the error in the mapping so that it can be reported when the application calls fsync(2).”h]”(jM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Kåhj¾Eubj¤)�”}”(hhh]”(j©)�”}”(hŒN``struct address_space *mapping`` the mapping in which an error should be set ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjãEh]”hŒstruct address_space *mapping”…”�”}”(hjåEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjáEubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´KâhjÝEubjÉ)�”}”(hhh]”jM)�”}”(hŒ+the mapping in which an error should be set”h]”hŒ+the mapping in which an error should be set”…”�”}”(hjüEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jøEh´KâhjùEubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÝEubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jøEh´KâhjÚEubj©)�”}”(hŒ.``int error`` the error to set in the mapping ”h]”(j¯)�”}”(hŒ ``int error``”h]”jS)�”}”(hjFh]”hŒ int error”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjFubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´KãhjFubjÉ)�”}”(hhh]”jM)�”}”(hŒthe error to set in the mapping”h]”hŒthe error to set in the mapping”…”�”}”(hj5Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j1Fh´Kãhj2Fubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjFubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j1Fh´KãhjÚEubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¾EubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjWFh]”hŒ Description”…”�”}”(hjYFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjUFubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Kåhj¾EubjM)�”}”(hX!When writeback fails in some way, we must record that error so that userspace can be informed when fsync and the like are called. We endeavor to report errors on any file that was open at the time of the error. Some internal callers also need to know when writeback errors have occurred.”h]”hX!When writeback fails in some way, we must record that error so that userspace can be informed when fsync and the like are called. We endeavor to report errors on any file that was open at the time of the error. Some internal callers also need to know when writeback errors have occurred.”…”�”}”(hjmFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Kähj¾EubjM)�”}”(hŒ¶When a writeback error occurs, most filesystems will want to call mapping_set_error to record the error in the mapping so that it can be reported when the application calls fsync(2).”h]”hŒ¶When a writeback error occurs, most filesystems will want to call mapping_set_error to record the error in the mapping so that it can be reported when the application calls fsync(2).”…”�”}”(hj|Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.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”]”(héŒ%mapping_set_large_folios (C function)”Œc.mapping_set_large_folios”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ=void mapping_set_large_folios (struct address_space *mapping)”h]”hù)�”}”(hŒJh]”hŒ Description”…”�”}”(hj@Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjstruct address_space *folio_flush_mapping(struct folio *folio)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjELh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjALh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M(ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSLh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjALh²hh³jRLh´M(ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjdLh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjaLubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jfLŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒfolio_flush_mapping”sbŒc.folio_flush_mapping”†”asbuh1hhjALh²hh³jRLh´M(ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…Lh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjALh²hh³jRLh´M(ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj“Lh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjALh²hh³jRLh´M(ubhÿ)�”}”(hŒfolio_flush_mapping”h]”j)�”}”(hj‚Lh]”hŒfolio_flush_mapping”…”�”}”(hj¤Lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Lubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjALh²hh³jRLh´M(ubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¿Lh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj»LubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌLh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj»Lubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÝLh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÚLubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jßLŒmodname”NŒ classname”Njpjs)�”}”jv]”j€LŒc.folio_flush_mapping”†”asbuh1hhj»LubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûLh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj»LubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj Mh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj»Lubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj»Lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj·Lubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjALh²hh³jRLh´M(ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj=Lh²hh³jRLh´M(ubah}”(h]”j8Lah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jRLh´M(hj:Lh²hubj4)�”}”(hhh]”jM)�”}”(hŒ,Find the file mapping this folio belongs to.”h]”hŒ,Find the file mapping this folio belongs to.”…”�”}”(hj@Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M(hj=Mh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj:Lh²hh³jRLh´M(ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjXMjHjXMjI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hX£**Parameters** ``struct folio *folio`` The folio. **Description** For folios which are in the page cache, return the mapping that this page belongs to. Anonymous folios return NULL, even if they're in the swap cache. Other kinds of folio also return NULL. This is ONLY used by architecture cache flushing code. If you aren't writing cache flushing code, you want either folio_mapping() or folio_file_mapping().”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjbMh]”hŒ Parameters”…”�”}”(hjdMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj`Mubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M,hj\Mubj¤)�”}”(hhh]”j©)�”}”(hŒ#``struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj�Mh]”hŒstruct folio *folio”…”�”}”(hjƒMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M)hj{MubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hjšMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j–Mh´M)hj—Mubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj{Mubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j–Mh´M)hjxMubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj\MubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M+hj\MubjM)�”}”(hŒ¿For folios which are in the page cache, return the mapping that this page belongs to. Anonymous folios return NULL, even if they're in the swap cache. Other kinds of folio also return NULL.”h]”hŒÁFor folios which are in the page cache, return the mapping that this page belongs to. Anonymous folios return NULL, even if they’re in the swap cache. Other kinds of folio also return NULL.”…”�”}”(hjÒMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M*hj\MubjM)�”}”(hŒ›This is ONLY used by architecture cache flushing code. If you aren't writing cache flushing code, you want either folio_mapping() or folio_file_mapping().”h]”hŒ�This is ONLY used by architecture cache flushing code. If you aren’t writing cache flushing code, you want either folio_mapping() or folio_file_mapping().”…”�”}”(hjáMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M.hj\Mubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_inode (C function)”Œ c.folio_inode”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ0struct inode * folio_inode (struct folio *folio)”h]”hù)�”}”(hŒ.struct inode *folio_inode(struct folio *folio)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj Nh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M<ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj Nh²hh³jNh´M<ubh)�”}”(hhh]”j)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj/Nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj,Nubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j1NŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒ folio_inode”sbŒ c.folio_inode”†”asbuh1hhj Nh²hh³jNh´M<ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPNh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj Nh²hh³jNh´M<ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj^Nh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj Nh²hh³jNh´M<ubhÿ)�”}”(hŒ folio_inode”h]”j)�”}”(hjMNh]”hŒ folio_inode”…”�”}”(hjoNh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjkNubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj Nh²hh³jNh´M<ubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjŠNh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj†NubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—Nh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj†Nubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj¨Nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¥Nubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jªNŒmodname”NŒ classname”Njpjs)�”}”jv]”jKNŒ c.folio_inode”†”asbuh1hhj†NubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆNh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj†NubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÔNh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj†Nubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjáNh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj†Nubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‚Nubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj Nh²hh³jNh´M<ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjNh²hh³jNh´M<ubah}”(h]”jNah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jNh´M<hjNh²hubj4)�”}”(hhh]”jM)�”}”(hŒ"Get the host inode for this folio.”h]”hŒ"Get the host inode for this folio.”…”�”}”(hj Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M<hjOh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjNh²hh³jNh´M<ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj#OjHj#OjI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hŒØ**Parameters** ``struct folio *folio`` The folio. **Description** For folios which are in the page cache, return the inode that this folio belongs to. Do not call this for folios which aren't in the page cache.”h]”(jM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M@hj'Oubj¤)�”}”(hhh]”j©)�”}”(hŒ#``struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjLOh]”hŒstruct folio *folio”…”�”}”(hjNOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjJOubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M=hjFOubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hjeOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jaOh´M=hjbOubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjFOubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jaOh´M=hjCOubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj'OubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M?hj'OubjM)�”}”(hŒTFor folios which are in the page cache, return the inode that this folio belongs to.”h]”hŒTFor folios which are in the page cache, return the inode that this folio belongs to.”…”�”}”(hj�Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M>hj'OubjM)�”}”(hŒ;Do not call this for folios which aren't in the page cache.”h]”hŒ=Do not call this for folios which aren’t in the page cache.”…”�”}”(hj¬Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MAhj'Oubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!folio_attach_private (C function)”Œc.folio_attach_private”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ;void folio_attach_private (struct folio *folio, void *data)”h]”hù)�”}”(hŒ:void folio_attach_private(struct folio *folio, void *data)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÛOh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj×Oh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MJubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêOh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj×Oh²hh³jéOh´MJubhÿ)�”}”(hŒfolio_attach_private”h]”j)�”}”(hŒfolio_attach_private”h]”hŒfolio_attach_private”…”�”}”(hjüOh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjøOubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj×Oh²hh³jéOh´MJubj )�”}”(hŒ!(struct folio *folio, void *data)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjPubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%Ph²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjPubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj6Ph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3Pubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j8PŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljþOsbŒc.folio_attach_private”†”asbuh1hhjPubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjVPh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjPubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjdPh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjPubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjqPh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjPubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjPubj )�”}”(hŒ void *data”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjŠPh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj†PubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜Ph²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj†PubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¦Ph²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj†Pubj)�”}”(hŒdata”h]”hŒdata”…”�”}”(hj³Ph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj†Pubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjPubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj×Oh²hh³jéOh´MJubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÓOh²hh³jéOh´MJubah}”(h]”jÎOah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jéOh´MJhjÐOh²hubj4)�”}”(hhh]”jM)�”}”(hŒAttach private data to a folio.”h]”hŒAttach private data to a folio.”…”�”}”(hjÝPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MJhjÚPh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÐOh²hh³jéOh´MJubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjõPjHjõPjI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hX**Parameters** ``struct folio *folio`` Folio to attach data to. ``void *data`` Data to attach to folio. **Description** Attaching private data to a folio increments the page's reference count. The data must be detached before the folio will be freed.”•h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÿPh]”hŒ Parameters”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjýPubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MNhjùPubj¤)�”}”(hhh]”(j©)�”}”(hŒ1``struct folio *folio`` Folio to attach data to. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjQh]”hŒstruct folio *folio”…”�”}”(hj Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MKhjQubjÉ)�”}”(hhh]”jM)�”}”(hŒFolio to attach data to.”h]”hŒFolio to attach data to.”…”�”}”(hj7Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j3Qh´MKhj4Qubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjQubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j3Qh´MKhjQubj©)�”}”(hŒ(``void *data`` Data to attach to folio. ”h]”(j¯)�”}”(hŒ``void *data``”h]”jS)�”}”(hjWQh]”hŒ void *data”…”�”}”(hjYQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjUQubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MLhjQQubjÉ)�”}”(hhh]”jM)�”}”(hŒData to attach to folio.”h]”hŒData to attach to folio.”…”�”}”(hjpQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jlQh´MLhjmQubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjQQubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jlQh´MLhjQubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjùPubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MNhjùPubjM)�”}”(hŒ‚Attaching private data to a folio increments the page's reference count. The data must be detached before the folio will be freed.”h]”hŒ„Attaching private data to a folio increments the page’s reference count. The data must be detached before the folio will be freed.”…”�”}”(hj¨Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MMhjùPubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!folio_change_private (C function)”Œc.folio_change_private”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ=void * folio_change_private (struct folio *folio, void *data)”h]”hù)�”}”(hŒ;void *folio_change_private(struct folio *folio, void *data)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj×Qh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÓQh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MYubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæQh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÓQh²hh³jåQh´MYubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjôQh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÓQh²hh³jåQh´MYubhÿ)�”}”(hŒfolio_change_private”h]”j)�”}”(hŒfolio_change_private”h]”hŒfolio_change_private”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjRubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÓQh²hh³jåQh´MYubj )�”}”(hŒ!(struct folio *folio, void *data)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj!Rh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjRubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.Rh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjRubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj?Rh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj``struct address_space *mapping`` The address space to search ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj³ch]”hŒstruct address_space *mapping”…”�”}”(hjµch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj±cubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M<hj­cubjÉ)�”}”(hhh]”jM)�”}”(hŒThe address space to search”h]”hŒThe address space to search”…”�”}”(hjÌch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÈch´M<hjÉcubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj­cubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÈch´M<hjªcubj©)�”}”(hŒ!``pgoff_t index`` The page index ”h]”(j¯)�”}”(hŒ``pgoff_t index``”h]”jS)�”}”(hjìch]”hŒ pgoff_t index”…”�”}”(hjîch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjêcubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M=hjæcubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page index”h]”hŒThe page index”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jdh´M=hjdubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjæcubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jdh´M=hjªcubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjŽcubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M?hjŽcubjM)�”}”(hŒžLooks up the page cache entry at **mapping** & **index**. If no folio is found, a new folio is created. The folio is locked, marked as accessed, and returned.”h]”(hŒ!Looks up the page cache entry at ”…”�”}”(hj=dh²hh³Nh´NubjŽ)�”}”(hŒ **mapping**”h]”hŒmapping”…”�”}”(hjEdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj=dubhŒ & ”…”�”}”(hj=dh²hh³Nh´NubjŽ)�”}”(hŒ **index**”h]”hŒindex”…”�”}”(hjWdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj=dubhŒf. If no folio is found, a new folio is created. The folio is locked, marked as accessed, and returned.”…”�”}”(hj=dh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M>hjŽcubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjrdh]”hŒReturn”…”�”}”(hjtdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjpdubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MBhjŽcubjM)�”}”(hŒ]A found or created folio. ERR_PTR(-ENOMEM) if no folio is found and failed to create a folio.”h]”hŒ]A found or created folio. ERR_PTR(-ENOMEM) if no folio is found and failed to create a folio.”…”�”}”(hjˆdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MChjŽcubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfind_get_page (C function)”Œc.find_get_page”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒKstruct page * find_get_page (struct address_space *mapping, pgoff_t offset)”h]”hù)�”}”(hŒIstruct page *find_get_page(struct address_space *mapping, pgoff_t offset)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj·dh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj³dh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MOubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅdh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj³dh²hh³jÄdh´MOubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÖdh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÓdubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jØdŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒ find_get_page”sbŒc.find_get_page”†”asbuh1hhj³dh²hh³jÄdh´MOubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷dh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj³dh²hh³jÄdh´MOubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj³dh²hh³jÄdh´MOubhÿ)�”}”(hŒ find_get_page”h]”j)�”}”(hjôdh]”hŒ find_get_page”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjeubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj³dh²hh³jÄdh´MOubj )�”}”(hŒ/(struct address_space *mapping, pgoff_t offset)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj1eh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj-eubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>eh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj-eubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjOeh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjLeubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jQeŒmodname”NŒ classname”Njpjs)�”}”jv]”jòdŒc.find_get_page”†”asbuh1hhj-eubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmeh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj-eubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj{eh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj-eubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjˆeh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj-eubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj)eubj )�”}”(hŒpgoff_t offset”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hj¤eh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¡eubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¦eŒmodname”NŒ classname”Njpjs)�”}”jv]”jòdŒc.find_get_page”†”asbuh1hhj�eubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂeh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�eubj)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hjÐeh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�eubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj)eubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj³dh²hh³jÄdh´MOubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¯dh²hh³jÄdh´MOubah}”(h]”jªdah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÄdh´MOhj¬dh²hubj4)�”}”(hhh]”jM)�”}”(hŒfind and get a page reference”h]”hŒfind and get a page reference”…”�”}”(hjúeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MOhj÷eh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¬dh²hh³jÄdh´MOubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjfjHjfjI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hX-**Parameters** ``struct address_space *mapping`` the address_space to search ``pgoff_t offset`` the page index **Description** Looks up the page cache slot at **mapping** & **offset**. If there is a page cache page, it is returned with an increased refcount. Otherwise, ``NULL`` is returned.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjfh]”hŒ Parameters”…”�”}”(hjf•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjfubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MShjfubj¤)�”}”(hhh]”(j©)�”}”(hŒ>``struct address_space *mapping`` the address_space to search ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj;fh]”hŒstruct address_space *mapping”…”�”}”(hj=fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj9fubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MPhj5fubjÉ)�”}”(hhh]”jM)�”}”(hŒthe address_space to search”h]”hŒthe address_space to search”…”�”}”(hjTfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jPfh´MPhjQfubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj5fubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jPfh´MPhj2fubj©)�”}”(hŒ"``pgoff_t offset`` the page index ”h]”(j¯)�”}”(hŒ``pgoff_t offset``”h]”jS)�”}”(hjtfh]”hŒpgoff_t offset”…”�”}”(hjvfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjrfubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MQhjnfubjÉ)�”}”(hhh]”jM)�”}”(hŒthe page index”h]”hŒthe page index”…”�”}”(hj�fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‰fh´MQhjŠfubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjnfubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‰fh´MQhj2fubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjfubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MShjfubjM)�”}”(hŒ„Looks up the page cache slot at **mapping** & **offset**. If there is a page cache page, it is returned with an increased refcount.”h]”(hŒ Looks up the page cache slot at ”…”�”}”(hjÅfh²hh³Nh´NubjŽ)�”}”(hŒ **mapping**”h]”hŒmapping”…”�”}”(hjÍfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÅfubhŒ & ”…”�”}”(hjÅfh²hh³Nh´NubjŽ)�”}”(hŒ **offset**”h]”hŒoffset”…”�”}”(hjßfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÅfubhŒL. If there is a page cache page, it is returned with an increased refcount.”…”�”}”(hjÅfh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MRhjfubjM)�”}”(hŒ Otherwise, ``NULL`` is returned.”h]”(hŒ Otherwise, ”…”�”}”(hjøfh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjøfubhŒ is returned.”…”�”}”(hjøfh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MUhjfubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfind_lock_page (C function)”Œc.find_lock_page”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒKstruct page * find_lock_page (struct address_space *mapping, pgoff_t index)”h]”hù)�”}”(hŒIstruct page *find_lock_page(struct address_space *mapping, pgoff_t index)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj9gh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj5gh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MeubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGgh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj5gh²hh³jFgh´Meubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjXgh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjUgubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jZgŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒfind_lock_page”sbŒc.find_lock_page”†”asbuh1hhj5gh²hh³jFgh´MeubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjygh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj5gh²hh³jFgh´MeubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj‡gh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj5gh²hh³jFgh´Meubhÿ)�”}”(hŒfind_lock_page”h]”j)�”}”(hjvgh]”hŒfind_lock_page”…”�”}”(hj˜gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj”gubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj5gh²hh³jFgh´Meubj )�”}”(hŒ.(struct address_space *mapping, pgoff_t index)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj³gh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¯gubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀgh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¯gubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjÑgh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÎgubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÓgŒmodname”NŒ classname”Njpjs)�”}”jv]”jtgŒc.find_lock_page”†”asbuh1hhj¯gubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïgh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¯gubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjýgh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¯gubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj hh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¯gubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj«gubj )�”}”(hŒ pgoff_t index”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hj&hh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj#hubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j(hŒmodname”NŒ classname”Njpjs)�”}”jv]”jtgŒc.find_lock_page”†”asbuh1hhjhubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDhh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjhubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(hjRhh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjhubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj«gubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj5gh²hh³jFgh´Meubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj1gh²hh³jFgh´Meubah}”(h]”j,gah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jFgh´Mehj.gh²hubj4)�”}”(hhh]”jM)�”}”(hŒ%locate, pin and lock a pagecache page”h]”hŒ%locate, pin and lock a pagecache page”…”�”}”(hj|hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mehjyhh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj.gh²hh³jFgh´Meubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj”hjHj”hjI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hX†**Parameters** ``struct address_space *mapping`` the address_space to search ``pgoff_t index`` the page index **Description** Looks up the page cache entry at **mapping** & **index**. If there is a page cache page, it is returned locked and with an increased refcount. **Context** May sleep. **Return** A struct page or ``NULL`` if there is no page in the cache for this index.”h]”(jM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mihj˜hubj¤)�”}”(hhh]”(j©)�”}”(hŒ>``struct address_space *mapping`` the address_space to search ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj½hh]”hŒstruct address_space *mapping”…”�”}”(hj¿hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj»hubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mfhj·hubjÉ)�”}”(hhh]”jM)�”}”(hŒthe address_space to search”h]”hŒthe address_space to search”…”�”}”(hjÖhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÒhh´MfhjÓhubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj·hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÒhh´Mfhj´hubj©)�”}”(hŒ!``pgoff_t index`` the page index ”h]”(j¯)�”}”(hŒ``pgoff_t index``”h]”jS)�”}”(hjöhh]”hŒ pgoff_t index”…”�”}”(hjøhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjôhubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MghjðhubjÉ)�”}”(hhh]”jM)�”}”(hŒthe page index”h]”hŒthe page index”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j ih´Mghj iubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjðhubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j ih´Mghj´hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj˜hubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj1ih]”hŒ Description”…”�”}”(hj3ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj/iubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mihj˜hubjM)�”}”(hŒ�Looks up the page cache entry at **mapping** & **index**. If there is a page cache page, it is returned locked and with an increased refcount.”h]”(hŒ!Looks up the page cache entry at ”…”�”}”(hjGih²hh³Nh´NubjŽ)�”}”(hŒ **mapping**”h]”hŒmapping”…”�”}”(hjOih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjGiubhŒ & ”…”�”}”(hjGih²hh³Nh´NubjŽ)�”}”(hŒ **index**”h]”hŒindex”…”�”}”(hjaih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjGiubhŒW. If there is a page cache page, it is returned locked and with an increased refcount.”…”�”}”(hjGih²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mhhj˜hubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hj|ih]”hŒContext”…”�”}”(hj~ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjziubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mlhj˜hubjM)�”}”(hŒ May sleep.”h]”hŒ May sleep.”…”�”}”(hj’ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mmhj˜hubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mohj˜hubjM)�”}”(hŒJA struct page or ``NULL`` if there is no page in the cache for this index.”h]”(hŒA struct page or ”…”�”}”(hj¹ih²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjÁih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¹iubhŒ1 if there is no page in the cache for this index.”…”�”}”(hj¹ih²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mnhj˜hubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ find_or_create_page (C function)”Œc.find_or_create_page”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ`struct page * find_or_create_page (struct address_space *mapping, pgoff_t index, gfp_t gfp_mask)”h]”hù)�”}”(hŒ^struct page *find_or_create_page(struct address_space *mapping, pgoff_t index, gfp_t gfp_mask)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjúih²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjöih²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MxubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjöih²hh³jjh´Mxubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jjŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒfind_or_create_page”sbŒc.find_or_create_page”†”asbuh1hhjöih²hh³jjh´MxubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:jh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjöih²hh³jjh´MxubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjHjh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjöih²hh³jjh´Mxubhÿ)�”}”(hŒfind_or_create_page”h]”j)�”}”(hj7jh]”hŒfind_or_create_page”…”�”}”(hjYjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjUjubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjöih²hh³jjh´Mxubj )�”}”(hŒ>(struct address_space *mapping, pgoff_t index, gfp_t gfp_mask)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjtjh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjpjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�jh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjpjubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj’jh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�jubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j”jŒmodname”NŒ classname”Njpjs)�”}”jv]”j5jŒc.find_or_create_page”†”asbuh1hhjpjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°jh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjpjubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¾jh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjpjubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjËjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjpjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjljubj )�”}”(hŒ pgoff_t index”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjçjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjäjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jéjŒmodname”NŒ classname”Njpjs)�”}”jv]”j5jŒc.find_or_create_page”†”asbuh1hhjàjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjàjubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjàjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjljubj )�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj/kh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj,kubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j1kŒmodname”NŒ classname”Njpjs)�”}”jv]”j5jŒc.find_or_create_page”†”asbuh1hhj(kubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMkh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj(kubj)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hj[kh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj(kubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjljubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjöih²hh³jjh´Mxubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjòih²hh³jjh´Mxubah}”(h]”jíiah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jjh´Mxhjïih²hubj4)�”}”(hhh]”jM)�”}”(hŒlocate or add a pagecache page”h]”hŒlocate or add a pagecache page”…”�”}”(hj…kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mxhj‚kh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjïih²hh³jjh´Mxubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj�kjHj�kjI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hX�**Parameters** ``struct address_space *mapping`` the page's address_space ``pgoff_t index`` the page's index into the mapping ``gfp_t gfp_mask`` page allocation mode **Description** Looks up the page cache slot at **mapping** & **offset**. If there is a page cache page, it is returned locked and with an increased refcount. If the page is not present, a new page is allocated using **gfp_mask** and added to the page cache and the VM's LRU list. The page is returned locked and with an increased refcount. On memory exhaustion, ``NULL`` is returned. find_or_create_page() may sleep, even if **gfp_flags** specifies an atomic allocation!”h]”(jM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M|hj¡kubj¤)�”}”(hhh]”(j©)�”}”(hŒ;``struct address_space *mapping`` the page's address_space ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjÆkh]”hŒstruct address_space *mapping”…”�”}”(hjÈkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÄkubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MyhjÀkubjÉ)�”}”(hhh]”jM)�”}”(hŒthe page's address_space”h]”hŒthe page’s address_space”…”�”}”(hjßkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÛkh´MyhjÜkubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÀkubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÛkh´Myhj½kubj©)�”}”(hŒ4``pgoff_t index`` the page's index into the mapping ”h]”(j¯)�”}”(hŒ``pgoff_t index``”h]”jS)�”}”(hjÿkh]”hŒ pgoff_t index”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjýkubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MzhjùkubjÉ)�”}”(hhh]”jM)�”}”(hŒ!the page's index into the mapping”h]”hŒ#the page’s index into the mapping”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jlh´Mzhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjùkubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jlh´Mzhj½kubj©)�”}”(hŒ(``gfp_t gfp_mask`` page allocation mode ”h]”(j¯)�”}”(hŒ``gfp_t gfp_mask``”h]”jS)�”}”(hj8lh]”hŒgfp_t gfp_mask”…”�”}”(hj:lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj6lubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M{hj2lubjÉ)�”}”(hhh]”jM)�”}”(hŒpage allocation mode”h]”hŒpage allocation mode”…”�”}”(hjQlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jMlh´M{hjNlubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj2lubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jMlh´M{hj½kubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¡kubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjslh]”hŒ Description”…”�”}”(hjulh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjqlubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M}hj¡kubjM)�”}”(hŒ�Looks up the page cache slot at **mapping** & **offset**. If there is a page cache page, it is returned locked and with an increased refcount.”h]”(hŒ Looks up the page cache slot at ”…”�”}”(hj‰lh²hh³Nh´NubjŽ)�”}”(hŒ **mapping**”h]”hŒmapping”…”�”}”(hj‘lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‰lubhŒ & ”…”�”}”(hj‰lh²hh³Nh´NubjŽ)�”}”(hŒ **offset**”h]”hŒoffset”…”�”}”(hj£lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‰lubhŒW. If there is a page cache page, it is returned locked and with an increased refcount.”…”�”}”(hj‰lh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M|hj¡kubjM)�”}”(hŒ¶If the page is not present, a new page is allocated using **gfp_mask** and added to the page cache and the VM's LRU list. The page is returned locked and with an increased refcount.”h]”(hŒ:If the page is not present, a new page is allocated using ”…”�”}”(hj¼lh²hh³Nh´NubjŽ)�”}”(hŒ **gfp_mask**”h]”hŒgfp_mask”…”�”}”(hjÄlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¼lubhŒr and added to the page cache and the VM’s LRU list. The page is returned locked and with an increased refcount.”…”�”}”(hj¼lh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M€hj¡kubjM)�”}”(hŒ+On memory exhaustion, ``NULL`` is returned.”h]”(hŒOn memory exhaustion, ”…”�”}”(hjÝlh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjålh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÝlubhŒ is returned.”…”�”}”(hjÝlh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M„hj¡kubjM)�”}”(hŒVfind_or_create_page() may sleep, even if **gfp_flags** specifies an atomic allocation!”h]”(hŒ)find_or_create_page() may sleep, even if ”…”�”}”(hjþlh²hh³Nh´NubjŽ)�”}”(hŒ **gfp_flags**”h]”hŒ gfp_flags”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjþlubhŒ specifies an atomic allocation!”…”�”}”(hjþlh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M†hj¡kubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ#grab_cache_page_nowait (C function)”Œc.grab_cache_page_nowait”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒSstruct page * grab_cache_page_nowait (struct address_space *mapping, pgoff_t index)”h]”hù)�”}”(hŒQstruct page *grab_cache_page_nowait(struct address_space *mapping, pgoff_t index)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj?mh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj;mh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M“ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMmh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj;mh²hh³jLmh´M“ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj^mh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj[mubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j`mŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒgrab_cache_page_nowait”sbŒc.grab_cache_page_nowait”†”asbuh1hhj;mh²hh³jLmh´M“ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj;mh²hh³jLmh´M“ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj�mh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj;mh²hh³jLmh´M“ubhÿ)�”}”(hŒgrab_cache_page_nowait”h]”j)�”}”(hj|mh]”hŒgrab_cache_page_nowait”…”�”}”(hjžmh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjšmubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj;mh²hh³jLmh´M“ubj )�”}”(hŒ.(struct address_space *mapping, pgoff_t index)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¹mh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjµmubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆmh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjµmubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj×mh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÔmubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÙmŒmodname”NŒ classname”Njpjs)�”}”jv]”jzmŒc.grab_cache_page_nowait”†”asbuh1hhjµmubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõmh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjµmubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjµmubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjµmubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj±mubj )�”}”(hŒ pgoff_t index”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hj,nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj)nubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j.nŒmodname”NŒ classname”Njpjs)�”}”jv]”jzmŒc.grab_cache_page_nowait”†”asbuh1hhj%nubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJnh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj%nubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(hjXnh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj%nubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj±mubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj;mh²hh³jLmh´M“ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj7mh²hh³jLmh´M“ubah}”(h]”j2mah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jLmh´M“hj4mh²hubj4)�”}”(hhh]”jM)�”}”(hŒ1returns locked page at given index in given cache”h]”hŒ1returns locked page at given index in given cache”…”�”}”(hj‚nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M“hjnh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj4mh²hh³jLmh´M“ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjšnjHjšnjI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hX>**Parameters** ``struct address_space *mapping`` target address_space ``pgoff_t index`` the page index **Description** Returns locked page at given index in given cache, creating it if needed, but do not wait if the page is locked or to reclaim memory. This is intended for speculative data generators, where the data can be regenerated if the page couldn't be grabbed. This routine should be safe to call while holding the lock for another page. Clear __GFP_FS when allocating the page to avoid recursion into the fs and deadlock against the caller's locked page.”h]”(jM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M—hjžnubj¤)�”}”(hhh]”(j©)�”}”(hŒ7``struct address_space *mapping`` target address_space ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjÃnh]”hŒstruct address_space *mapping”…”�”}”(hjÅnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÁnubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M”hj½nubjÉ)�”}”(hhh]”jM)�”}”(hŒtarget address_space”h]”hŒtarget address_space”…”�”}”(hjÜnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jØnh´M”hjÙnubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj½nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jØnh´M”hjºnubj©)�”}”(hŒ!``pgoff_t index`` the page index ”h]”(j¯)�”}”(hŒ``pgoff_t index``”h]”jS)�”}”(hjünh]”hŒ pgoff_t index”…”�”}”(hjþnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjúnubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M•hjönubjÉ)�”}”(hhh]”jM)�”}”(hŒthe page index”h]”hŒthe page index”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³joh´M•hjoubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjönubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³joh´M•hjºnubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjžnubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj7oh]”hŒ Description”…”�”}”(hj9oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj5oubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M—hjžnubjM)�”}”(hXHReturns locked page at given index in given cache, creating it if needed, but do not wait if the page is locked or to reclaim memory. This is intended for speculative data generators, where the data can be regenerated if the page couldn't be grabbed. This routine should be safe to call while holding the lock for another page.”h]”hXJReturns locked page at given index in given cache, creating it if needed, but do not wait if the page is locked or to reclaim memory. This is intended for speculative data generators, where the data can be regenerated if the page couldn’t be grabbed. This routine should be safe to call while holding the lock for another page.”…”�”}”(hjMoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M–hjžnubjM)�”}”(hŒuClear __GFP_FS when allocating the page to avoid recursion into the fs and deadlock against the caller's locked page.”h]”hŒwClear __GFP_FS when allocating the page to avoid recursion into the fs and deadlock against the caller’s locked page.”…”�”}”(hj\oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.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”]”(héŒfolio_next_index (C function)”Œc.folio_next_index”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ4pgoff_t folio_next_index (const struct folio *folio)”h]”hù)�”}”(hŒ3pgoff_t folio_next_index(const struct folio *folio)”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjŽoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‹oubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j�oŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒfolio_next_index”sbŒc.folio_next_index”†”asbuh1hhj‡oh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M©ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°oh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj‡oh²hh³j¯oh´M©ubhÿ)�”}”(hŒfolio_next_index”h]”j)�”}”(hj¬oh]”hŒfolio_next_index”…”�”}”(hjÂoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾oubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj‡oh²hh³j¯oh´M©ubj )�”}”(hŒ(const struct folio *folio)”h]”j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjÝoh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÙoubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêoh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÙoubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjøoh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÙoubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÙoubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjpubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jpŒmodname”NŒ classname”Njpjs)�”}”jv]”jªoŒc.folio_next_index”†”asbuh1hhjÙoubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4ph²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÙoubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjBph²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÙoubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjOph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙoubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÕoubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj‡oh²hh³j¯oh´M©ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjƒoh²hh³j¯oh´M©ubah}”(h]”j~oah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¯oh´M©hj€oh²hubj4)�”}”(hhh]”jM)�”}”(hŒ Get the index of the next folio.”h]”hŒ Get the index of the next folio.”…”�”}”(hjyph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M©hjvph²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj€oh²hh³j¯oh´M©ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj‘pjHj‘pjI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hŒŒ**Parameters** ``const struct folio *folio`` The current folio. **Return** The index of the folio which follows this folio in the file.”h]”(jM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M­hj•pubj¤)�”}”(hhh]”j©)�”}”(hŒ1``const struct folio *folio`` The current folio. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjºph]”hŒconst struct folio *folio”…”�”}”(hj¼ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¸pubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mªhj´pubjÉ)�”}”(hhh]”jM)�”}”(hŒThe current folio.”h]”hŒThe current folio.”…”�”}”(hjÓph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÏph´MªhjÐpubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj´pubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÏph´Mªhj±pubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj•pubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjõph]”hŒReturn”…”�”}”(hj÷ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjópubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M¬hj•pubjM)�”}”(hŒbool folio_contains (const struct folio *folio, pgoff_t index)”h]”hù)�”}”(hŒ=bool folio_contains(const struct folio *folio, pgoff_t index)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjMuh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjIuh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MÎubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[uh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjIuh²hh³jZuh´MÎubhÿ)�”}”(hŒfolio_contains”h]”j)�”}”(hŒfolio_contains”h]”hŒfolio_contains”…”�”}”(hjmuh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjiuubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjIuh²hh³jZuh´MÎubj )�”}”(hŒ*(const struct folio *folio, pgoff_t index)”h]”(j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj‰uh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj…uubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–uh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj…uubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¤uh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj…uubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±uh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj…uubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÂuh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¿uubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÄuŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljousbŒc.folio_contains”†”asbuh1hhj…uubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâuh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj…uubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjðuh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj…uubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjýuh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj…uubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj�uubj )�”}”(hŒ pgoff_t index”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjvubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jvŒmodname”NŒ classname”Njpjs)�”}”jv]”jÞuŒc.folio_contains”†”asbuh1hhjvubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7vh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjvubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(hjEvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjvubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj�uubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjIuh²hh³jZuh´MÎubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjEuh²hh³jZuh´MÎubah}”(h]”j@uah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jZuh´MÎhjBuh²hubj4)�”}”(hhh]”jM)�”}”(hŒ#Does this folio contain this index?”h]”hŒ#Does this folio contain this index?”…”�”}”(hjovh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MÎhjlvh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjBuh²hh³jZuh´MÎubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj‡vjHj‡vjI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hX**Parameters** ``const struct folio *folio`` The folio. ``pgoff_t index`` The page index within the file. **Context** The caller should have the folio locked and ensure e.g., shmem did not move this folio to the swap cache. **Return** true or false.”h]”(jM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MÒhj‹vubj¤)�”}”(hhh]”(j©)�”}”(hŒ)``const struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hj°vh]”hŒconst struct folio *folio”…”�”}”(hj²vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj®vubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MÏhjªvubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hjÉvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÅvh´MÏhjÆvubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjªvubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÅvh´MÏhj§vubj©)�”}”(hŒ2``pgoff_t index`` The page index within the file. ”h]”(j¯)�”}”(hŒ``pgoff_t index``”h]”jS)�”}”(hjévh]”hŒ pgoff_t index”…”�”}”(hjëvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjçvubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MÐhjãvubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page index within the file.”h]”hŒThe page index within the file.”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jþvh´MÐhjÿvubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjãvubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jþvh´MÐhj§vubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj‹vubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hj$wh]”hŒContext”…”�”}”(hj&wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj"wubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MÒhj‹vubjM)�”}”(hŒiThe caller should have the folio locked and ensure e.g., shmem did not move this folio to the swap cache.”h]”hŒiThe caller should have the folio locked and ensure e.g., shmem did not move this folio to the swap cache.”…”�”}”(hj:wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MÒhj‹vubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjKwh]”hŒReturn”…”�”}”(hjMwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjIwubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MÕhj‹vubjM)�”}”(hŒtrue or false.”h]”hŒtrue or false.”…”�”}”(hjawh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.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”]”(héŒpage_pgoff (C function)”Œ c.page_pgoff”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒGpgoff_t page_pgoff (const struct folio *folio, const struct page *page)”h]”hù)�”}”(hŒFpgoff_t page_pgoff(const struct folio *folio, const struct page *page)”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hj“wh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�wubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j•wŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒ page_pgoff”sbŒ c.page_pgoff”†”asbuh1hhjŒwh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MûubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµwh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŒwh²hh³j´wh´Mûubhÿ)�”}”(hŒ page_pgoff”h]”j)�”}”(hj±wh]”hŒ page_pgoff”…”�”}”(hjÇwh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÃwubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjŒwh²hh³j´wh´Mûubj )�”}”(hŒ4(const struct folio *folio, const struct page *page)”h]”(j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjâwh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÞwubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïwh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÞwubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjýwh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÞwubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj xh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÞwubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjxubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jxŒmodname”NŒ classname”Njpjs)�”}”jv]”j¯wŒ c.page_pgoff”†”asbuh1hhjÞwubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9xh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÞwubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjGxh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÞwubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjTxh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÞwubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÚwubj )�”}”(hŒconst struct page *page”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjmxh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjixubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzxh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjixubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjˆxh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjixubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•xh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjixubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj¦xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj£xubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¨xŒmodname”NŒ classname”Njpjs)�”}”jv]”j¯wŒ c.page_pgoff”†”asbuh1hhjixubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄxh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjixubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÒxh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjixubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjßxh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjixubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÚwubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjŒwh²hh³j´wh´Mûubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjˆwh²hh³j´wh´Mûubah}”(h]”jƒwah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j´wh´Mûhj…wh²hubj4)�”}”(hhh]”jM)�”}”(hŒ/Calculate the logical page offset of this page.”h]”hŒ/Calculate the logical page offset of this page.”…”�”}”(hj yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mûhjyh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj…wh²hh³j´wh´Mûubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj!yjHj!yjI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hX&**Parameters** ``const struct folio *folio`` The folio containing this page. ``const struct page *page`` The page which we need the offset of. **Description** For file pages, this is the offset from the beginning of the file in units of PAGE_SIZE. For anonymous pages, this is the offset from the beginning of the anon_vma in units of PAGE_SIZE. This will return nonsense for KSM pages. **Context** Caller must have a reference on the folio or otherwise prevent it from being split or freed. **Return** The offset in units of PAGE_SIZE.”h]”(jM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mÿhj%yubj¤)�”}”(hhh]”(j©)�”}”(hŒ>``const struct folio *folio`` The folio containing this page. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjJyh]”hŒconst struct folio *folio”…”�”}”(hjLyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjHyubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MühjDyubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio containing this page.”h]”hŒThe folio containing this page.”…”�”}”(hjcyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j_yh´Mühj`yubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjDyubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j_yh´MühjAyubj©)�”}”(hŒB``const struct page *page`` The page which we need the offset of. ”h]”(j¯)�”}”(hŒ``const struct page *page``”h]”jS)�”}”(hjƒyh]”hŒconst struct page *page”…”�”}”(hj…yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�yubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mýhj}yubjÉ)�”}”(hhh]”jM)�”}”(hŒ%The page which we need the offset of.”h]”hŒ%The page which we need the offset of.”…”�”}”(hjœyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j˜yh´Mýhj™yubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj}yubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j˜yh´MýhjAyubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj%yubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mÿhj%yubjM)�”}”(hŒåFor file pages, this is the offset from the beginning of the file in units of PAGE_SIZE. For anonymous pages, this is the offset from the beginning of the anon_vma in units of PAGE_SIZE. This will return nonsense for KSM pages.”h]”hŒåFor file pages, this is the offset from the beginning of the file in units of PAGE_SIZE. For anonymous pages, this is the offset from the beginning of the anon_vma in units of PAGE_SIZE. This will return nonsense for KSM pages.”…”�”}”(hjÔyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mþhj%yubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjåyh]”hŒContext”…”�”}”(hjçyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjãyubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mhj%yubjM)�”}”(hŒ\Caller must have a reference on the folio or otherwise prevent it from being split or freed.”h]”hŒ\Caller must have a reference on the folio or otherwise prevent it from being split or freed.”…”�”}”(hjûyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mhj%yubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj zh]”hŒReturn”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj zubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mhj%yubjM)�”}”(hŒ!The offset in units of PAGE_SIZE.”h]”hŒ!The offset in units of PAGE_SIZE.”…”�”}”(hj"zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mhj%yubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_pos (C function)”Œ c.folio_pos”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ,loff_t folio_pos (const struct folio *folio)”h]”hù)�”}”(hŒ+loff_t folio_pos(const struct folio *folio)”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjTzh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjQzubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jVzŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒ folio_pos”sbŒ c.folio_pos”†”asbuh1hhjMzh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvzh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjMzh²hh³juzh´Mubhÿ)�”}”(hŒ folio_pos”h]”j)�”}”(hjrzh]”hŒ folio_pos”…”�”}”(hjˆzh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj„zubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjMzh²hh³juzh´Mubj )�”}”(hŒ(const struct folio *folio)”h]”j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj£zh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjŸzubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°zh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŸzubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¾zh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjŸzubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËzh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŸzubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÜzh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙzubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÞzŒmodname”NŒ classname”Njpjs)�”}”jv]”jpzŒ c.folio_pos”†”asbuh1hhjŸzubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúzh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŸzubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjŸzubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŸzubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj›zubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjMzh²hh³juzh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjIzh²hh³juzh´Mubah}”(h]”jDzah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³juzh´MhjFzh²hubj4)�”}”(hhh]”jM)�”}”(hŒ4Returns the byte position of this folio in its file.”h]”hŒ4Returns the byte position of this folio in its file.”…”�”}”(hj?{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mhj<{h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjFzh²hh³juzh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjW{jHjW{jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hŒ:**Parameters** ``const struct folio *folio`` The folio.”h]”(jM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mhj[{ubj¤)�”}”(hhh]”j©)�”}”(hŒ(``const struct folio *folio`` The folio.”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hj€{h]”hŒconst struct folio *folio”…”�”}”(hj‚{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj~{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mhjz{ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hj™{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mhj–{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjz{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j•{h´Mhjw{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”]”(héŒlinear_page_delta (C function)”Œc.linear_page_delta”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒYpgoff_t linear_page_delta (const struct vm_area_struct *vma, const unsigned long address)”h]”hù)�”}”(hŒXpgoff_t linear_page_delta(const struct vm_area_struct *vma, const unsigned long address)”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjÝ{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÚ{ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jß{Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒlinear_page_delta”sbŒc.linear_page_delta”†”asbuh1hhjÖ{h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M+ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”•8}”(hjÿ{h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÖ{h²hh³jþ{h´M+ubhÿ)�”}”(hŒlinear_page_delta”h]”j)�”}”(hjû{h]”hŒlinear_page_delta”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj |ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÖ{h²hh³jþ{h´M+ubj )�”}”(hŒ?(const struct vm_area_struct *vma, const unsigned long address)”h]”(j )�”}”(hŒ const struct vm_area_struct *vma”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj,|h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj(|ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9|h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj(|ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjG|h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj(|ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjT|h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj(|ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hje|h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjb|ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jg|Œmodname”NŒ classname”Njpjs)�”}”jv]”jù{Œc.linear_page_delta”†”asbuh1hhj(|ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒ|h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj(|ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj‘|h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj(|ubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjž|h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj(|ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj$|ubj )�”}”(hŒconst unsigned long address”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj·|h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj³|ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄ|h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj³|ubjµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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³|ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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³|ubj)�”}”(hŒaddress”h]”hŒaddress”…”�”}”(hj }h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj³|ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj$|ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÖ{h²hh³jþ{h´M+ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÒ{h²hh³jþ{h´M+ubah}”(h]”jÍ{ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jþ{h´M+hjÏ{h²hubj4)�”}”(hhh]”jM)�”}”(hŒADetermine the relative page offset of **address** within **vma**.”h]”(hŒ&Determine the relative page offset of ”…”�”}”(hj4}h²hh³Nh´NubjŽ)�”}”(hŒ **address**”h]”hŒaddress”…”�”}”(hj<}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj4}ubhŒ within ”…”�”}”(hj4}h²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjN}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj4}ubhŒ.”…”�”}”(hj4}h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M+hj1}h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÏ{h²hh³jþ{h´M+ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjp}jHjp}jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hX¡**Parameters** ``const struct vm_area_struct *vma`` The VMA in which **address** resides. ``const unsigned long address`` The address whose relative page offset is required. **Description** The result is identical for both file-backed and anonymous mappings and simply determines how many pages **address** lies from **vma->vm_start**. **Return** The number of pages **address** is offset by within **vma**.”h]”(jM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M/hjt}ubj¤)�”}”(hhh]”(j©)�”}”(hŒK``const struct vm_area_struct *vma`` The VMA in which **address** resides. ”h]”(j¯)�”}”(hŒ$``const struct vm_area_struct *vma``”h]”jS)�”}”(hj™}h]”hŒ const struct vm_area_struct *vma”…”�”}”(hj›}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj—}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M-hj“}ubjÉ)�”}”(hhh]”jM)�”}”(hŒ%The VMA in which **address** resides.”h]”(hŒThe VMA in which ”…”�”}”(hj²}h²hh³Nh´NubjŽ)�”}”(hŒ **address**”h]”hŒaddress”…”�”}”(hjº}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj²}ubhŒ resides.”…”�”}”(hj²}h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j®}h´M-hj¯}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj“}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j®}h´M-hj�}ubj©)�”}”(hŒT``const unsigned long address`` The address whose relative page offset is required. ”h]”(j¯)�”}”(hŒ``const unsigned long address``”h]”jS)�”}”(hjä}h]”hŒconst unsigned long address”…”�”}”(hjæ}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjâ}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M.hjÞ}ubjÉ)�”}”(hhh]”jM)�”}”(hŒ3The address whose relative page offset is required.”h]”hŒ3The address whose relative page offset is required.”…”�”}”(hjý}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jù}h´M.hjú}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÞ}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jù}h´M.hj�}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjt}ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj~h]”hŒ Description”…”�”}”(hj!~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M0hjt}ubjM)�”}”(hŒ‘The result is identical for both file-backed and anonymous mappings and simply determines how many pages **address** lies from **vma->vm_start**.”h]”(hŒiThe result is identical for both file-backed and anonymous mappings and simply determines how many pages ”…”�”}”(hj5~h²hh³Nh´NubjŽ)�”}”(hŒ **address**”h]”hŒaddress”…”�”}”(hj=~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj5~ubhŒ lies from ”…”�”}”(hj5~h²hh³Nh´NubjŽ)�”}”(hŒ**vma->vm_start**”h]”hŒ vma->vm_start”…”�”}”(hjO~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj5~ubhŒ.”…”�”}”(hj5~h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M/hjt}ubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M2hjt}ubjM)�”}”(hŒhjŒ€ubjÉ)�”}”(hhh]”jM)�”}”(hŒ%The VMA in which **address** resides.”h]”(hŒThe VMA in which ”…”�”}”(hj«€h²hh³Nh´NubjŽ)�”}”(hŒ **address**”h]”hŒaddress”…”�”}”(hj³€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj«€ubhŒ resides.”…”�”}”(hj«€h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j§€h´M>hj¨€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjŒ€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j§€h´M>hj‰€ubj©)�”}”(hŒT``const unsigned long address`` The address whose absolute page offset is required. ”h]”(j¯)�”}”(hŒ``const unsigned long address``”h]”jS)�”}”(hjÝ€h]”hŒconst unsigned long address”…”�”}”(hj߀h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÛ€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M?hj×€ubjÉ)�”}”(hhh]”jM)�”}”(hŒ3The address whose absolute page offset is required.”h]”hŒ3The address whose absolute page offset is required.”…”�”}”(hjö€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jò€h´M?hjó€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj×€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jò€h´M?hj‰€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjm€ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj�h]”hŒ Description”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MAhjm€ubjM)�”}”(hŒZSee the comment for vma_start_pgoff() for a description of what the page offset signifies.”h]”hŒZSee the comment for vma_start_pgoff() for a description of what the page offset signifies.”…”�”}”(hj.�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M@hjm€ubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MChjm€ubjM)�”}”(hŒ7The absolute page offset of **address** within **vma**.”h]”(hŒThe absolute page offset of ”…”�”}”(hjU�h²hh³Nh´NubjŽ)�”}”(hŒ **address**”h]”hŒaddress”…”�”}”(hj]�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjU�ubhŒ within ”…”�”}”(hjU�h²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjo�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjU�ubhŒ.”…”�”}”(hjU�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MDhjm€ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ#linear_anon_page_index (C function)”Œc.linear_anon_page_index”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ^pgoff_t linear_anon_page_index (const struct vm_area_struct *vma, const unsigned long address)”h]”hù)�”}”(hŒ]pgoff_t linear_anon_page_index(const struct vm_area_struct *vma, const unsigned long address)”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hj«�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¨�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j­�Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒlinear_anon_page_index”sbŒc.linear_anon_page_index”†”asbuh1hhj¤�h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MSubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍ�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¤�h²hh³jÌ�h´MSubhÿ)�”}”(hŒlinear_anon_page_index”h]”j)�”}”(hjÉ�h]”hŒlinear_anon_page_index”…”�”}”(hjß�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÛ�ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¤�h²hh³jÌ�h´MSubj )�”}”(hŒ?(const struct vm_area_struct *vma, const unsigned long address)”h]”(j )�”}”(hŒ const struct vm_area_struct *vma”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjú�h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjö�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjö�ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjö�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"‚h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjö�ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj3‚h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj0‚ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j5‚Œmodname”NŒ classname”Njpjs)�”}”jv]”jÇ�Œc.linear_anon_page_index”†”asbuh1hhjö�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQ‚h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjö�ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj_‚h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjö�ubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjl‚h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjö�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjò�ubj )�”}”(hŒconst unsigned long address”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj…‚h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj�‚ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’‚h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�‚ubjµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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�‚ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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�‚ubj)�”}”(hŒaddress”h]”hŒaddress”…”�”}”(hjØ‚h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�‚ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjò�ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¤�h²hh³jÌ�h´MSubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj �h²hh³jÌ�h´MSubah}”(h]”j›�ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÌ�h´MShj��h²hubj4)�”}”(hhh]”jM)�”}”(hŒKDetermine the absolute anonymous page offset of **address** within **vma**.”h]”(hŒ0Determine the absolute anonymous page offset of ”…”�”}”(hjƒh²hh³Nh´NubjŽ)�”}”(hŒ **address**”h]”hŒaddress”…”�”}”(hj ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjƒubhŒ within ”…”�”}”(hjƒh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjƒubhŒ.”…”�”}”(hjƒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MShjÿ‚h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj��h²hh³jÌ�h´MSubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj>ƒjHj>ƒjI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hX**Parameters** ``const struct vm_area_struct *vma`` An anonymous or MAP_PRIVATE file-backed VMA in which **address** resides. ``const unsigned long address`` The address whose absolute page offset is required. **Description** This returns the anonymous page offset of **address**, which is the page offset the address possessed at the time the VMA was first faulted. For anonymous mappings, this returns the same value as linear_page_index(). For MAP_PRIVATE file-backed mappings, this returns the anonymous page offset of **address**, which is the page offset the address possessed at the time the VMA was first faulted. It is not valid to call this function for shared file-backed mappings. **Return** The absolute anonymous page offset of **address** within **vma**.”h]”(jM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MWhjBƒubj¤)�”}”(hhh]”(j©)�”}”(hŒo``const struct vm_area_struct *vma`` An anonymous or MAP_PRIVATE file-backed VMA in which **address** resides. ”h]”(j¯)�”}”(hŒ$``const struct vm_area_struct *vma``”h]”jS)�”}”(hjgƒh]”hŒ const struct vm_area_struct *vma”…”�”}”(hjiƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjeƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MUhjaƒubjÉ)�”}”(hhh]”jM)�”}”(hŒIAn anonymous or MAP_PRIVATE file-backed VMA in which **address** resides.”h]”(hŒ5An anonymous or MAP_PRIVATE file-backed VMA in which ”…”�”}”(hj€ƒh²hh³Nh´NubjŽ)�”}”(hŒ **address**”h]”hŒaddress”…”�”}”(hjˆƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj€ƒubhŒ resides.”…”�”}”(hj€ƒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j|ƒh´MUhj}ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjaƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j|ƒh´MUhj^ƒubj©)�”}”(hŒT``const unsigned long address`` The address whose absolute page offset is required. ”h]”(j¯)�”}”(hŒ``const unsigned long address``”h]”jS)�”}”(hj²ƒh]”hŒconst unsigned long address”…”�”}”(hj´ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj°ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MVhj¬ƒubjÉ)�”}”(hhh]”jM)�”}”(hŒ3The address whose absolute page offset is required.”h]”hŒ3The address whose absolute page offset is required.”…”�”}”(hj˃h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jǃh´MVhjȃubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¬ƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jǃh´MVhj^ƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjBƒubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjíƒh]”hŒ Description”…”�”}”(hjïƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjëƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MXhjBƒubjM)�”}”(hŒŒThis returns the anonymous page offset of **address**, which is the page offset the address possessed at the time the VMA was first faulted.”h]”(hŒ*This returns the anonymous page offset of ”…”�”}”(hj„h²hh³Nh´NubjŽ)�”}”(hŒ **address**”h]”hŒaddress”…”�”}”(hj „h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj„ubhŒW, which is the page offset the address possessed at the time the VMA was first faulted.”…”�”}”(hj„h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MWhjBƒubjM)�”}”(hŒKFor anonymous mappings, this returns the same value as linear_page_index().”h]”hŒKFor anonymous mappings, this returns the same value as linear_page_index().”…”�”}”(hj$„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MZhjBƒubjM)�”}”(hŒ²For MAP_PRIVATE file-backed mappings, this returns the anonymous page offset of **address**, which is the page offset the address possessed at the time the VMA was first faulted.”h]”(hŒPFor MAP_PRIVATE file-backed mappings, this returns the anonymous page offset of ”…”�”}”(hj3„h²hh³Nh´NubjŽ)�”}”(hŒ **address**”h]”hŒaddress”…”�”}”(hj;„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj3„ubhŒW, which is the page offset the address possessed at the time the VMA was first faulted.”…”�”}”(hj3„h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M\hjBƒubjM)�”}”(hŒFIt is not valid to call this function for shared file-backed mappings.”h]”hŒFIt is not valid to call this function for shared file-backed mappings.”…”�”}”(hjT„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M`hjBƒubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MbhjBƒubjM)�”}”(hŒAThe absolute anonymous page offset of **address** within **vma**.”h]”(hŒ&The absolute anonymous page offset of ”…”�”}”(hj{„h²hh³Nh´NubjŽ)�”}”(hŒ **address**”h]”hŒaddress”…”�”}”(hjƒ„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj{„ubhŒ within ”…”�”}”(hj{„h²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hj•„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj{„ubhŒ.”…”�”}”(hj{„h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MchjBƒubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_trylock (C function)”Œc.folio_trylock”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ(bool folio_trylock (struct folio *folio)”h]”hù)�”}”(hŒ'bool folio_trylock(struct folio *folio)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hj΄h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÊ„h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M’ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜ„h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÊ„h²hh³jÛ„h´M’ubhÿ)�”}”(hŒ folio_trylock”h]”j)�”}”(hŒ folio_trylock”h]”hŒ folio_trylock”…”�”}”(hjî„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjê„ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÊ„h²hh³jÛ„h´M’ubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj …h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj…ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj…ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj(…h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj%…ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j*…Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljð„sbŒc.folio_trylock”†”asbuh1hhj…ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjH…h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj…ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjV…h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj…ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjc…h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj…ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj…ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÊ„h²hh³jÛ„h´M’ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÆ„h²hh³jÛ„h´M’ubah}”(h]”jÁ„ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÛ„h´M’hjÄh²hubj4)�”}”(hhh]”jM)�”}”(hŒAttempt to lock a folio.”h]”hŒAttempt to lock a folio.”…”�”}”(hj�…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M’hjŠ…h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÄh²hh³jÛ„h´M’ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¥…jHj¥…jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hX¼**Parameters** ``struct folio *folio`` The folio to attempt to lock. **Description** Sometimes it is undesirable to wait for a folio to be unlocked (eg when the locks are being taken in the wrong order, or if making progress through a batch of folios is more important than processing them in order). Usually folio_lock() is the correct function to call. **Context** Any context. **Return** Whether the lock was successfully acquired.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¯…h]”hŒ Parameters”…”�”}”(hj±…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj­…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M–hj©…ubj¤)�”}”(hhh]”j©)�”}”(hŒ6``struct folio *folio`` The folio to attempt to lock. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjÎ…h]”hŒstruct folio *folio”…”�”}”(hjÐ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÌ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M“hjÈ…ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to attempt to lock.”h]”hŒThe folio to attempt to lock.”…”�”}”(hjç…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jã…h´M“hjä…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÈ…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jã…h´M“hjÅ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj©…ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj †h]”hŒ Description”…”�”}”(hj †h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M•hj©…ubjM)�”}”(hXSometimes it is undesirable to wait for a folio to be unlocked (eg when the locks are being taken in the wrong order, or if making progress through a batch of folios is more important than processing them in order). Usually folio_lock() is the correct function to call.”h]”hXSometimes it is undesirable to wait for a folio to be unlocked (eg when the locks are being taken in the wrong order, or if making progress through a batch of folios is more important than processing them in order). Usually folio_lock() is the correct function to call.”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M”hj©…ubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hj0†h]”hŒContext”…”�”}”(hj2†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj.†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M™hj©…ubjM)�”}”(hŒ Any context.”h]”hŒ Any context.”…”�”}”(hjF†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mšhj©…ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjW†h]”hŒReturn”…”�”}”(hjY†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjU†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mœhj©…ubjM)�”}”(hŒ+Whether the lock was successfully acquired.”h]”hŒ+Whether the lock was successfully acquired.”…”�”}”(hjm†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.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”]”(héŒfolio_lock (C function)”Œ c.folio_lock”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ%void folio_lock (struct folio *folio)”h]”hù)�”}”(hŒ$void folio_lock(struct folio *folio)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjœ†h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj˜†h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M«ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«†h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj˜†h²hh³jª†h´M«ubhÿ)�”}”(hŒ folio_lock”h]”j)�”}”(hŒ folio_lock”h]”hŒ folio_lock”…”�”}”(hj½†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¹†ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj˜†h²hh³jª†h´M«ubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÙ†h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÕ†ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæ†h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÕ†ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj÷†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjô†ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jù†Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj¿†sbŒ c.folio_lock”†”asbuh1hhjÕ†ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÕ†ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj%‡h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÕ†ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj2‡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕ†ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjцubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj˜†h²hh³jª†h´M«ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj”†h²hh³jª†h´M«ubah}”(h]”j�†ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jª†h´M«hj‘†h²hubj4)�”}”(hhh]”jM)�”}”(hŒLock this folio.”h]”hŒLock this folio.”…”�”}”(hj\‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M«hjY‡h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj‘†h²hh³jª†h´M«ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjt‡jHjt‡jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hXî**Parameters** ``struct folio *folio`` The folio to lock. **Description** The folio lock protects against many things, probably more than it should. It is primarily held while a folio is being brought uptodate, either from its backing file or from swap. It is also held while a folio is being truncated from its address_space, so holding the lock is sufficient to keep folio->mapping stable. The folio lock is also held while write() is modifying the page to provide POSIX atomicity guarantees (as long as the write does not cross a page boundary). Other modifications to the data in the folio do not hold the folio lock and can race with writes, eg DMA and stores to mapped pages. **Context** May sleep. If you need to acquire the locks of two or more folios, they must be in order of ascending index, if they are in the same address_space. If they are in different address_spaces, acquire the lock of the folio which belongs to the address_space which has the lowest address in memory first.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj~‡h]”hŒ Parameters”…”�”}”(hj€‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj|‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M¯hjx‡ubj¤)�”}”(hhh]”j©)�”}”(hŒ+``struct folio *folio`` The folio to lock. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj�‡h]”hŒstruct folio *folio”…”�”}”(hjŸ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj›‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M¬hj—‡ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to lock.”h]”hŒThe folio to lock.”…”�”}”(hj¶‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j²‡h´M¬hj³‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj—‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j²‡h´M¬hj”‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjx‡ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj؇h]”hŒ Description”…”�”}”(hjÚ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÖ‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M®hjx‡ubjM)�”}”(hX?The folio lock protects against many things, probably more than it should. It is primarily held while a folio is being brought uptodate, either from its backing file or from swap. It is also held while a folio is being truncated from its address_space, so holding the lock is sufficient to keep folio->mapping stable.”h]”hX?The folio lock protects against many things, probably more than it should. It is primarily held while a folio is being brought uptodate, either from its backing file or from swap. It is also held while a folio is being truncated from its address_space, so holding the lock is sufficient to keep folio->mapping stable.”…”�”}”(hjî‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M­hjx‡ubjM)�”}”(hX"The folio lock is also held while write() is modifying the page to provide POSIX atomicity guarantees (as long as the write does not cross a page boundary). Other modifications to the data in the folio do not hold the folio lock and can race with writes, eg DMA and stores to mapped pages.”h]”hX"The folio lock is also held while write() is modifying the page to provide POSIX atomicity guarantees (as long as the write does not cross a page boundary). Other modifications to the data in the folio do not hold the folio lock and can race with writes, eg DMA and stores to mapped pages.”…”�”}”(hjý‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M³hjx‡ubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M¹hjx‡ubjM)�”}”(hX-May sleep. If you need to acquire the locks of two or more folios, they must be in order of ascending index, if they are in the same address_space. If they are in different address_spaces, acquire the lock of the folio which belongs to the address_space which has the lowest address in memory first.”h]”hX-May sleep. If you need to acquire the locks of two or more folios, they must be in order of ascending index, if they are in the same address_space. If they are in different address_spaces, acquire the lock of the folio which belongs to the address_space which has the lowest address in memory first.”…”�”}”(hj$ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.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”]”(héŒlock_page (C function)”Œ c.lock_page”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ"void lock_page (struct page *page)”h]”hù)�”}”(hŒ!void lock_page(struct page *page)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjSˆh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjOˆh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MÈubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbˆh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjOˆh²hh³jaˆh´MÈubhÿ)�”}”(hŒ lock_page”h]”j)�”}”(hŒ lock_page”h]”hŒ lock_page”…”�”}”(hjtˆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjpˆubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjOˆh²hh³jaˆh´MÈubj )�”}”(hŒ(struct page *page)”h]”j )�”}”(hŒstruct page *page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj�ˆh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjŒˆubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�ˆh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŒˆubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj®ˆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj«ˆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j°ˆŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljvˆsbŒ c.lock_page”†”asbuh1hhjŒˆubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjΈh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŒˆubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj܈h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjŒˆubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjéˆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŒˆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjˆˆubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjOˆh²hh³jaˆh´MÈubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjKˆh²hh³jaˆh´MÈubah}”(h]”jFˆah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jaˆh´MÈhjHˆh²hubj4)�”}”(hhh]”jM)�”}”(hŒ$Lock the folio containing this page.”h]”hŒ$Lock the folio containing this page.”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MÈhj‰h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjHˆh²hh³jaˆh´MÈubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj+‰jHj+‰jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hXS**Parameters** ``struct page *page`` The page to lock. **Description** See folio_lock() for a description of what the lock protects. This is a legacy function and new code should probably use folio_lock() instead. **Context** May sleep. Pages in the same folio share a lock, so do not attempt to lock two pages which share a folio.”h]”(jM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MÌhj/‰ubj¤)�”}”(hhh]”j©)�”}”(hŒ(``struct page *page`` The page to lock. ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hjT‰h]”hŒstruct page *page”…”�”}”(hjV‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjR‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MÉhjN‰ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page to lock.”h]”hŒThe page to lock.”…”�”}”(hjm‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ji‰h´MÉhjj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjN‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³ji‰h´MÉhjK‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj/‰ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj�‰h]”hŒ Description”…”�”}”(hj‘‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MËhj/‰ubjM)�”}”(hŒŽSee folio_lock() for a description of what the lock protects. This is a legacy function and new code should probably use folio_lock() instead.”h]”hŒŽSee folio_lock() for a description of what the lock protects. This is a legacy function and new code should probably use folio_lock() instead.”…”�”}”(hj¥‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MÊhj/‰ubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MÎhj/‰ubjM)�”}”(hŒjMay sleep. Pages in the same folio share a lock, so do not attempt to lock two pages which share a folio.”h]”hŒjMay sleep. Pages in the same folio share a lock, so do not attempt to lock two pages which share a folio.”…”�”}”(hj̉h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.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”]”(héŒ folio_lock_killable (C function)”Œc.folio_lock_killable”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ-int folio_lock_killable (struct folio *folio)”h]”hù)�”}”(hŒ,int folio_lock_killable(struct folio *folio)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjû‰h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj÷‰h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MÝubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Šh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj÷‰h²hh³j Šh´MÝubhÿ)�”}”(hŒfolio_lock_killable”h]”j)�”}”(hŒfolio_lock_killable”h]”hŒfolio_lock_killable”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŠubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj÷‰h²hh³j Šh´MÝubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj8Šh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj4ŠubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEŠh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj4Šubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjVŠh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjSŠubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jXŠŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljŠsbŒc.folio_lock_killable”†”asbuh1hhj4ŠubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvŠh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj4ŠubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj„Šh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj4Šubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj‘Šh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4Šubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj0Šubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj÷‰h²hh³j Šh´MÝubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjó‰h²hh³j Šh´MÝubah}”(h]”jî‰ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j Šh´MÝhjð‰h²hubj4)�”}”(hhh]”jM)�”}”(hŒ1Lock this folio, interruptible by a fatal signal.”h]”hŒ1Lock this folio, interruptible by a fatal signal.”…”�”}”(hj»Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MÝhj¸Šh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjð‰h²hh³j Šh´MÝubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÓŠjHjÓŠjI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hXF**Parameters** ``struct folio *folio`` The folio to lock. **Description** Attempts to lock the folio, like folio_lock(), except that the sleep to acquire the lock is interruptible by a fatal signal. **Context** May sleep; see folio_lock(). **Return** 0 if the lock was acquired; -EINTR if a fatal signal was received.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÝŠh]”hŒ Parameters”…”�”}”(hjߊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÛŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Máhj׊ubj¤)�”}”(hhh]”j©)�”}”(hŒ+``struct folio *folio`` The folio to lock. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjüŠh]”hŒstruct folio *folio”…”�”}”(hjþŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjúŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MÞhjöŠubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to lock.”h]”hŒThe folio to lock.”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‹h´MÞhj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjöŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‹h´MÞhjóŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj׊ubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Màhj׊ubjM)�”}”(hŒ|Attempts to lock the folio, like folio_lock(), except that the sleep to acquire the lock is interruptible by a fatal signal.”h]”hŒ|Attempts to lock the folio, like folio_lock(), except that the sleep to acquire the lock is interruptible by a fatal signal.”…”�”}”(hjM‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mßhj׊ubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mâhj׊ubjM)�”}”(hŒMay sleep; see folio_lock().”h]”hŒMay sleep; see folio_lock().”…”�”}”(hjt‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mãhj׊ubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Måhj׊ubjM)�”}”(hŒB0 if the lock was acquired; -EINTR if a fatal signal was received.”h]”hŒB0 if the lock was acquired; -EINTR if a fatal signal was received.”…”�”}”(hj›‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.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”]”(héŒ*filemap_range_needs_writeback (C function)”Œc.filemap_range_needs_writeback”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒfbool filemap_range_needs_writeback (struct address_space *mapping, loff_t start_byte, loff_t end_byte)”h]”hù)�”}”(hŒebool filemap_range_needs_writeback(struct address_space *mapping, loff_t start_byte, loff_t end_byte)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjÊ‹h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÆ‹h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MWubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØ‹h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÆ‹h²hh³j׋h´MWubhÿ)�”}”(hŒfilemap_range_needs_writeback”h]”j)�”}”(hŒfilemap_range_needs_writeback”h]”hŒfilemap_range_needs_writeback”…”�”}”(hjê‹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjæ‹ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÆ‹h²hh³j׋h´MWubj )�”}”(hŒC(struct address_space *mapping, loff_t start_byte, loff_t end_byte)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjŒubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŒubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj$Œh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj!Œubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j&ŒŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljì‹sbŒc.filemap_range_needs_writeback”†”asbuh1hhjŒubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDŒh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŒubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjRŒh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjŒubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj_Œh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjþ‹ubj )�”}”(hŒloff_t start_byte”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj{Œh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjxŒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j}ŒŒmodname”NŒ classname”Njpjs)�”}”jv]”j@ŒŒc.filemap_range_needs_writeback”†”asbuh1hhjtŒubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™Œh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjtŒubj)�”}”(hŒ start_byte”h]”hŒ start_byte”…”�”}”(hj§Œh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjtŒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjþ‹ubj )�”}”(hŒloff_t end_byte”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjÃŒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÀŒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÅŒŒmodname”NŒ classname”Njpjs)�”}”jv]”j@ŒŒc.filemap_range_needs_writeback”†”asbuh1hhj¼ŒubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáŒh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¼Œubj)�”}”(hŒend_byte”h]”hŒend_byte”…”�”}”(hjïŒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¼Œubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjþ‹ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÆ‹h²hh³j׋h´MWubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj‹h²hh³j׋h´MWubah}”(h]”j½‹ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j׋h´MWhj¿‹h²hubj4)�”}”(hhh]”jM)�”}”(hŒ*check if range potentially needs writeback”h]”hŒ*check if range potentially needs writeback”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MWhj�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¿‹h²hh³j׋h´MWubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj1�jHj1�jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hX�**Parameters** ``struct address_space *mapping`` address space within which to check ``loff_t start_byte`` offset in bytes where the range starts ``loff_t end_byte`` offset in bytes where the range ends (inclusive) **Description** Find at least one page in the range supplied, usually used to check if direct writing in this range will trigger a writeback. Used by O_DIRECT read/write with IOCB_NOWAIT, to see if the caller needs to do filemap_write_and_wait_range() before proceeding. **Return** ``true`` if the caller should do filemap_write_and_wait_range() before doing O_DIRECT to a page in this range, ``false`` otherwise.”h]”(jM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M[hj5�ubj¤)�”}”(hhh]”(j©)�”}”(hŒF``struct address_space *mapping`` address space within which to check ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjZ�h]”hŒstruct address_space *mapping”…”�”}”(hj\�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjX�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MXhjT�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ#address space within which to check”h]”hŒ#address space within which to check”…”�”}”(hjs�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jo�h´MXhjp�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjT�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jo�h´MXhjQ�ubj©)�”}”(hŒ=``loff_t start_byte`` offset in bytes where the range starts ”h]”(j¯)�”}”(hŒ``loff_t start_byte``”h]”jS)�”}”(hj“�h]”hŒloff_t start_byte”…”�”}”(hj•�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‘�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MYhj��ubjÉ)�”}”(hhh]”jM)�”}”(hŒ&offset in bytes where the range starts”h]”hŒ&offset in bytes where the range starts”…”�”}”(hj¬�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¨�h´MYhj©�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj��ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¨�h´MYhjQ�ubj©)�”}”(hŒE``loff_t end_byte`` offset in bytes where the range ends (inclusive) ”h]”(j¯)�”}”(hŒ``loff_t end_byte``”h]”jS)�”}”(hjÌ�h]”hŒloff_t end_byte”…”�”}”(hjÎ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÊ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MZhjÆ�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ0offset in bytes where the range ends (inclusive)”h]”hŒ0offset in bytes where the range ends (inclusive)”…”�”}”(hjå�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³já�h´MZhjâ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÆ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³já�h´MZhjQ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj5�ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjŽh]”hŒ Description”…”�”}”(hj Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M\hj5�ubjM)�”}”(hŒþFind at least one page in the range supplied, usually used to check if direct writing in this range will trigger a writeback. Used by O_DIRECT read/write with IOCB_NOWAIT, to see if the caller needs to do filemap_write_and_wait_range() before proceeding.”h]”hŒþFind at least one page in the range supplied, usually used to check if direct writing in this range will trigger a writeback. Used by O_DIRECT read/write with IOCB_NOWAIT, to see if the caller needs to do filemap_write_and_wait_range() before proceeding.”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M[hj5�ubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M`hj5�ubjM)�”}”(hŒƒ``true`` if the caller should do filemap_write_and_wait_range() before doing O_DIRECT to a page in this range, ``false`` otherwise.”h]”(jS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjHŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjDŽubhŒg if the caller should do filemap_write_and_wait_range() before doing O_DIRECT to a page in this range, ”…”�”}”(hjDŽh²hh³Nh´NubjS)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjZŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjDŽubhŒ otherwise.”…”�”}”(hjDŽh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mahj5�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒreadahead_control (C struct)”Œc.readahead_control”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒreadahead_control”h]”hù)�”}”(hŒstruct readahead_control”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj“Žh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj�Žh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MgubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡Žh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�Žh²hh³j Žh´Mgubhÿ)�”}”(hŒreadahead_control”h]”j)�”}”(hj�Žh]”hŒreadahead_control”…”�”}”(hj³Žh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¯Žubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj�Žh²hh³j Žh´Mgubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj‹Žh²hh³j Žh´Mgubah}”(h]”j†Žah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j Žh´MghjˆŽh²hubj4)�”}”(hhh]”jM)�”}”(hŒDescribes a readahead request.”h]”hŒDescribes a readahead request.”…”�”}”(hjÕŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MqhjÒŽh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjˆŽh²hh³j Žh´Mgubeh}”(h]”h ]”(jAŒstruct”eh"]”h$]”h&]”jFjAjGjíŽjHjíŽjI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hX„**Definition**:: struct readahead_control { struct file *file; struct address_space *mapping; struct file_ra_state *ra; }; **Members** ``file`` The file, used primarily by network filesystems for authentication. May be NULL if invoked internally by the filesystem. ``mapping`` Readahead this filesystem object. ``ra`` File readahead state. May be NULL.”h]”(jM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MuhjñŽubj )�”}”(hŒustruct readahead_control { struct file *file; struct address_space *mapping; struct file_ra_state *ra; };”h]”hŒustruct readahead_control { struct file *file; struct address_space *mapping; struct file_ra_state *ra; };”…”�”}”hj�sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MwhjñŽubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M}hjñŽubj¤)�”}”(hhh]”(j©)�”}”(hŒ‚``file`` The file, used primarily by network filesystems for authentication. May be NULL if invoked internally by the filesystem. ”h]”(j¯)�”}”(hŒ``file``”h]”jS)�”}”(hjB�h]”hŒfile”…”�”}”(hjD�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj@�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M}hj<�ubjÉ)�”}”(hhh]”jM)�”}”(hŒxThe file, used primarily by network filesystems for authentication. May be NULL if invoked internally by the filesystem.”h]”hŒxThe file, used primarily by network filesystems for authentication. May be NULL if invoked internally by the filesystem.”…”�”}”(hj[�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M|hjX�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj<�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jW�h´M}hj9�ubj©)�”}”(hŒ.``mapping`` Readahead this filesystem object. ”h]”(j¯)�”}”(hŒ ``mapping``”h]”jS)�”}”(hj|�h]”hŒmapping”…”�”}”(hj~�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjz�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M~hjv�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ!Readahead this filesystem object.”h]”hŒ!Readahead this filesystem object.”…”�”}”(hj•�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‘�h´M~hj’�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjv�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‘�h´M~hj9�ubj©)�”}”(hŒ*``ra`` File readahead state. May be NULL.”h]”(j¯)�”}”(hŒ``ra``”h]”jS)�”}”(hjµ�h]”hŒra”…”�”}”(hj·�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj³�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M~hj¯�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ#File readahead state. May be NULL.”h]”hŒ#File readahead state. May be NULL.”…”�”}”(hjÎ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MhjË�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¯�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÊ�h´M~hj9�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjñŽubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjø�h]”hŒ Description”…”�”}”(hjú�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjö�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”•h´M‚hj«#h²hubjM)�”}”(hŒÛA readahead request is for consecutive pages. Filesystems which implement the ->readahead method should call readahead_folio() or __readahead_batch() in a loop and attempt to start reads into each folio in the request.”h]”hŒÛA readahead request is for consecutive pages. Filesystems which implement the ->readahead method should call readahead_folio() or __readahead_batch() in a loop and attempt to start reads into each folio in the request.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mrhj«#h²hubjM)�”}”(hŒ\Most of the fields in this struct are private and should be accessed by the functions below.”h]”hŒ\Most of the fields in this struct are private and should be accessed by the functions below.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mwhj«#h²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ&page_cache_sync_readahead (C function)”Œc.page_cache_sync_readahead”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ“void page_cache_sync_readahead (struct address_space *mapping, struct file_ra_state *ra, struct file *file, pgoff_t index, unsigned long req_count)”h]”hù)�”}”(hŒ’void page_cache_sync_readahead(struct address_space *mapping, struct file_ra_state *ra, struct file *file, pgoff_t index, unsigned long req_count)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjE�h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjA�h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjT�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjA�h²hh³jS�h´M ubhÿ)�”}”(hŒpage_cache_sync_readahead”h]”j)�”}”(hŒpage_cache_sync_readahead”h]”hŒpage_cache_sync_readahead”…”�”}”(hjf�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjb�ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjA�h²hh³jS�h´M ubj )�”}”(hŒt(struct address_space *mapping, struct file_ra_state *ra, struct file *file, pgoff_t index, unsigned long req_count)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj‚�h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj~�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj~�ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj��ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¢�Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljh�sbŒc.page_cache_sync_readahead”†”asbuh1hhj~�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀ�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj~�ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÎ�h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj~�ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjÛ�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj~�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjz�ubj )�”}”(hŒstruct file_ra_state *ra”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjô�h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjð�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjð�ubh)�”}”(hhh]”j)�”}”(hŒ file_ra_state”h]”hŒ file_ra_state”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‘ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j‘Œmodname”NŒ classname”Njpjs)�”}”jv]”j¼�Œc.page_cache_sync_readahead”†”asbuh1hhjð�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0‘h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjð�ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj>‘h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjð�ubj)�”}”(hŒra”h]”hŒra”…”�”}”(hjK‘h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjð�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjz�ubj )�”}”(hŒstruct file *file”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjd‘h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj`‘ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjq‘h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj`‘ubh)�”}”(hhh]”j)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj‚‘h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‘ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j„‘Œmodname”NŒ classname”Njpjs)�”}”jv]”j¼�Œc.page_cache_sync_readahead”†”asbuh1hhj`‘ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ‘h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj`‘ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj®‘h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj`‘ubj)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj»‘h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj`‘ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjz�ubj )�”}”(hŒ pgoff_t index”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjבh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÔ‘ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÙ‘Œmodname”NŒ classname”Njpjs)�”}”jv]”j¼�Œc.page_cache_sync_readahead”†”asbuh1hhjБubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõ‘h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjБubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjБubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjz�ubj )�”}”(hŒunsigned long req_count”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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’ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj8’h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj’ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjF’h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj’ubj)�”}”(hŒ req_count”h]”hŒ req_count”…”�”}”(hjT’h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjz�ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjA�h²hh³jS�h´M ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj=�h²hh³jS�h´M ubah}”(h]”j8�ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jS�h´M hj:�h²hubj4)�”}”(hhh]”jM)�”}”(hŒgeneric file readahead”h]”hŒgeneric file readahead”…”�”}”(hj~’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M hj{’h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj:�h²hh³jS�h´M ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj–’jHj–’jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hX{**Parameters** ``struct address_space *mapping`` address_space which holds the pagecache and I/O vectors ``struct file_ra_state *ra`` file_ra_state which holds the readahead state ``struct file *file`` Used by the filesystem for authentication. ``pgoff_t index`` Index of first page to be read. ``unsigned long req_count`` Total number of pages being read by the caller. **Description** page_cache_sync_readahead() should be called when a cache miss happened: it will submit the read. The readahead logic may decide to piggyback more pages onto the read request if access patterns suggest it will improve performance.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj ’h]”hŒ Parameters”…”�”}”(hj¢’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjž’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M¤hjš’ubj¤)�”}”(hhh]”(j©)�”}”(hŒZ``struct address_space *mapping`` address_space which holds the pagecache and I/O vectors ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj¿’h]”hŒstruct address_space *mapping”…”�”}”(hjÁ’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj½’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M¡hj¹’ubjÉ)�”}”(hhh]”jM)�”}”(hŒ7address_space which holds the pagecache and I/O vectors”h]”hŒ7address_space which holds the pagecache and I/O vectors”…”�”}”(hjØ’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÔ’h´M¡hjÕ’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¹’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÔ’h´M¡hj¶’ubj©)�”}”(hŒK``struct file_ra_state *ra`` file_ra_state which holds the readahead state ”h]”(j¯)�”}”(hŒ``struct file_ra_state *ra``”h]”jS)�”}”(hjø’h]”hŒstruct file_ra_state *ra”…”�”}”(hjú’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjö’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M¢hjò’ubjÉ)�”}”(hhh]”jM)�”}”(hŒ-file_ra_state which holds the readahead state”h]”hŒ-file_ra_state which holds the readahead state”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j “h´M¢hj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjò’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j “h´M¢hj¶’ubj©)�”}”(hŒA``struct file *file`` Used by the filesystem for authentication. ”h]”(j¯)�”}”(hŒ``struct file *file``”h]”jS)�”}”(hj1“h]”hŒstruct file *file”…”�”}”(hj3“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj/“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M£hj+“ubjÉ)�”}”(hhh]”jM)�”}”(hŒ*Used by the filesystem for authentication.”h]”hŒ*Used by the filesystem for authentication.”…”�”}”(hjJ“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jF“h´M£hjG“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj+“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jF“h´M£hj¶’ubj©)�”}”(hŒ2``pgoff_t index`` Index of first page to be read. ”h]”(j¯)�”}”(hŒ``pgoff_t index``”h]”jS)�”}”(hjj“h]”hŒ pgoff_t index”…”�”}”(hjl“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjh“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M¤hjd“ubjÉ)�”}”(hhh]”jM)�”}”(hŒIndex of first page to be read.”h]”hŒIndex of first page to be read.”…”�”}”(hjƒ“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j“h´M¤hj€“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjd“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j“h´M¤hj¶’ubj©)�”}”(hŒL``unsigned long req_count`` Total number of pages being read by the caller. ”h]”(j¯)�”}”(hŒ``unsigned long req_count``”h]”jS)�”}”(hj£“h]”hŒunsigned long req_count”…”�”}”(hj¥“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¡“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M¥hj�“ubjÉ)�”}”(hhh]”jM)�”}”(hŒ/Total number of pages being read by the caller.”h]”hŒ/Total number of pages being read by the caller.”…”�”}”(hj¼“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¸“h´M¥hj¹“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¸“h´M¥hj¶’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjš’ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÞ“h]”hŒ Description”…”�”}”(hjà“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÜ“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M§hjš’ubjM)�”}”(hŒçpage_cache_sync_readahead() should be called when a cache miss happened: it will submit the read. The readahead logic may decide to piggyback more pages onto the read request if access patterns suggest it will improve performance.”h]”hŒçpage_cache_sync_readahead() should be called when a cache miss happened: it will submit the read. The readahead logic may decide to piggyback more pages onto the read request if access patterns suggest it will improve performance.”…”�”}”(hjô“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.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”]”(héŒ'page_cache_async_readahead (C function)”Œc.page_cache_async_readahead”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒšvoid page_cache_async_readahead (struct address_space *mapping, struct file_ra_state *ra, struct file *file, struct folio *folio, unsigned long req_count)”h]”hù)�”}”(hŒ™void page_cache_async_readahead(struct address_space *mapping, struct file_ra_state *ra, struct file *file, struct folio *folio, unsigned long req_count)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj#”h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj”h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M¶ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2”h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj”h²hh³j1”h´M¶ubhÿ)�”}”(hŒpage_cache_async_readahead”h]”j)�”}”(hŒpage_cache_async_readahead”h]”hŒpage_cache_async_readahead”…”�”}”(hjD”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj@”ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj”h²hh³j1”h´M¶ubj )�”}”(hŒz(struct address_space *mapping, struct file_ra_state *ra, struct file *file, struct folio *folio, unsigned long req_count)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj`”h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj\”ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjm”h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj\”ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj~”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj{”ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j€”Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljF”sbŒc.page_cache_async_readahead”†”asbuh1hhj\”ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjž”h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj\”ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¬”h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj\”ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj¹”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj\”ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjX”ubj )�”}”(hŒstruct file_ra_state *ra”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÒ”h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjΔubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß”h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjΔubh)�”}”(hhh]”j)�”}”(hŒ file_ra_state”h]”hŒ file_ra_state”…”�”}”(hjð”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjí”ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jò”Œmodname”NŒ classname”Njpjs)�”}”jv]”jš”Œc.page_cache_async_readahead”†”asbuh1hhjΔubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjΔubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjΔubj)�”}”(hŒra”h]”hŒra”…”�”}”(hj)•h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjΔubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjX”ubj )�”}”(hŒstruct file *file”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjB•h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj>•ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjO•h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj>•ubh)�”}”(hhh]”j)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj`•h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj]•ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jb•Œmodname”NŒ classname”Njpjs)�”}”jv]”jš”Œc.page_cache_async_readahead”†”asbuh1hhj>•ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~•h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj>•ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjŒ•h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj>•ubj)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj™•h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>•ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjX”ubj )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj²•h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj®•ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿•h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj®•ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjЕh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÍ•ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÒ•Œmodname”NŒ classname”Njpjs)�”}”jv]”jš”Œc.page_cache_async_readahead”†”asbuh1hhj®•ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî•h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj®•ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjü•h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj®•ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj –h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj®•ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjX”ubj )�”}”(hŒunsigned long req_count”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj"–h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj–ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0–h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj–ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj>–h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj–ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjL–h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj–ubj)�”}”(hŒ req_count”h]”hŒ req_count”…”�”}”(hjZ–h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj–ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjX”ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj”h²hh³j1”h´M¶ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj”h²hh³j1”h´M¶ubah}”(h]”j”ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j1”h´M¶hj”h²hubj4)�”}”(hhh]”jM)�”}”(hŒfile readahead for marked pages”h]”hŒfile readahead for marked pages”…”�”}”(hj„–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M¶hj�–h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj”h²hh³j1”h´M¶ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjœ–jHjœ–jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hX“**Parameters** ``struct address_space *mapping`` address_space which holds the pagecache and I/O vectors ``struct file_ra_state *ra`` file_ra_state which holds the readahead state ``struct file *file`` Used by the filesystem for authentication. ``struct folio *folio`` The folio which triggered the readahead call. ``unsigned long req_count`` Total number of pages being read by the caller. **Description** page_cache_async_readahead() should be called when a page is used which is marked as PageReadahead; this is a marker to suggest that the application has used up enough of the readahead window that we should start pulling in more pages.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¦–h]”hŒ Parameters”…”�”}”(hj¨–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¤–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mºhj –ubj¤)�”}”(hhh]”(j©)�”}”(hŒZ``struct address_space *mapping`` address_space which holds the pagecache and I/O vectors ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjÅ–h]”hŒstruct address_space *mapping”…”�”}”(hjÇ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M·hj¿–ubjÉ)�”}”(hhh]”jM)�”}”(hŒ7address_space which holds the pagecache and I/O vectors”h]”hŒ7address_space which holds the pagecache and I/O vectors”…”�”}”(hjÞ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÚ–h´M·hjÛ–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¿–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÚ–h´M·hj¼–ubj©)�”}”(hŒK``struct file_ra_state *ra`` file_ra_state which holds the readahead state ”h]”(j¯)�”}”(hŒ``struct file_ra_state *ra``”h]”jS)�”}”(hjþ–h]”hŒstruct file_ra_state *ra”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjü–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M¸hjø–ubjÉ)�”}”(hhh]”jM)�”}”(hŒ-file_ra_state which holds the readahead state”h]”hŒ-file_ra_state which holds the readahead state”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j—h´M¸hj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjø–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j—h´M¸hj¼–ubj©)�”}”(hŒA``struct file *file`` Used by the filesystem for authentication. ”h]”(j¯)�”}”(hŒ``struct file *file``”h]”jS)�”}”(hj7—h]”hŒstruct file *file”…”�”}”(hj9—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj5—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M¹hj1—ubjÉ)�”}”(hhh]”jM)�”}”(hŒ*Used by the filesystem for authentication.”h]”hŒ*Used by the filesystem for authentication.”…”�”}”(hjP—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jL—h´M¹hjM—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj1—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jL—h´M¹hj¼–ubj©)�”}”(hŒF``struct folio *folio`` The folio which triggered the readahead call. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjp—h]”hŒstruct folio *folio”…”�”}”(hjr—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjn—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mºhjj—ubjÉ)�”}”(hhh]”jM)�”}”(hŒ-The folio which triggered the readahead call.”h]”hŒ-The folio which triggered the readahead call.”…”�”}”(hj‰—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j…—h´Mºhj†—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjj—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j…—h´Mºhj¼–ubj©)�”}”(hŒL``unsigned long req_count`` Total number of pages being read by the caller. ”h]”(j¯)�”}”(hŒ``unsigned long req_count``”h]”jS)�”}”(hj©—h]”hŒunsigned long req_count”…”�”}”(hj«—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj§—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M»hj£—ubjÉ)�”}”(hhh]”jM)�”}”(hŒ/Total number of pages being read by the caller.”h]”hŒ/Total number of pages being read by the caller.”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¾—h´M»hj¿—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj£—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¾—h´M»hj¼–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj –ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjä—h]”hŒ Description”…”�”}”(hjæ—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjâ—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M½hj –ubjM)�”}”(hŒëpage_cache_async_readahead() should be called when a page is used which is marked as PageReadahead; this is a marker to suggest that the application has used up enough of the readahead window that we should start pulling in more pages.”h]”hŒëpage_cache_async_readahead() should be called when a page is used which is marked as PageReadahead; this is a marker to suggest that the application has used up enough of the readahead window that we should start pulling in more pages.”…”�”}”(hjú—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.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”]”(héŒreadahead_folio (C function)”Œc.readahead_folio”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ@struct folio * readahead_folio (struct readahead_control *ractl)”h]”hù)�”}”(hŒ>struct folio *readahead_folio(struct readahead_control *ractl)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj)˜h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj%˜h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MàubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7˜h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj%˜h²hh³j6˜h´Màubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjH˜h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjE˜ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jJ˜Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒreadahead_folio”sbŒc.readahead_folio”†”asbuh1hhj%˜h²hh³j6˜h´MàubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hji˜h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj%˜h²hh³j6˜h´MàubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjw˜h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj%˜h²hh³j6˜h´Màubhÿ)�”}”(hŒreadahead_folio”h]”j)�”}”(hjf˜h]”hŒreadahead_folio”…”�”}”(hjˆ˜h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj„˜ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj%˜h²hh³j6˜h´Màubj )�”}”(hŒ!(struct readahead_control *ractl)”h]”j )�”}”(hŒstruct readahead_control *ractl”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj£˜h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjŸ˜ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°˜h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŸ˜ubh)�”}”(hhh]”j)�”}”(hŒreadahead_control”h]”hŒreadahead_control”…”�”}”(hjÁ˜h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾˜ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jØŒmodname”NŒ classname”Njpjs)�”}”jv]”jd˜Œc.readahead_folio”†”asbuh1hhjŸ˜ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjߘh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŸ˜ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjí˜h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjŸ˜ubj)�”}”(hŒractl”h]”hŒractl”…”�”}”(hjú˜h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŸ˜ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj›˜ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj%˜h²hh³j6˜h´Màubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj!˜h²hh³j6˜h´Màubah}”(h]”j˜ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j6˜h´Màhj˜h²hubj4)�”}”(hhh]”jM)�”}”(hŒGet the next folio to read.”h]”hŒGet the next folio to read.”…”�”}”(hj$™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Màhj!™h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj˜h²hh³j6˜h´Màubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj<™jHj<™jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hX **Parameters** ``struct readahead_control *ractl`` The current readahead request. **Context** The folio is locked. The caller should unlock the folio once all I/O to that folio has completed. **Return** A pointer to the next folio, or ``NULL`` if we are done.”h]”(jM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mähj@™ubj¤)�”}”(hhh]”j©)�”}”(hŒC``struct readahead_control *ractl`` The current readahead request. ”h]”(j¯)�”}”(hŒ#``struct readahead_control *ractl``”h]”jS)�”}”(hje™h]”hŒstruct readahead_control *ractl”…”�”}”(hjg™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjc™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Máhj_™ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe current readahead request.”h]”hŒThe current readahead request.”…”�”}”(hj~™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jz™h´Máhj{™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj_™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jz™h´Máhj\™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj@™ubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mãhj@™ubjM)�”}”(hŒbThe folio is locked. The caller should unlock the folio once all I/O to that folio has completed.”h]”hŒbThe folio is locked. The caller should unlock the folio once all I/O to that folio has completed.”…”�”}”(hj¶™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mãhj@™ubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mæhj@™ubjM)�”}”(hŒ8A pointer to the next folio, or ``NULL`` if we are done.”h]”(hŒ A pointer to the next folio, or ”…”�”}”(hjÝ™h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjå™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÝ™ubhŒ if we are done.”…”�”}”(hjÝ™h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.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”]”(héŒreadahead_pos (C function)”Œc.readahead_pos”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ:loff_t readahead_pos (const struct readahead_control *rac)”h]”hù)�”}”(hŒ9loff_t readahead_pos(const struct readahead_control *rac)”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj!šh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjšubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j#šŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒ readahead_pos”sbŒc.readahead_pos”†”asbuh1hhjšh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCšh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjšh²hh³jBšh´M ubhÿ)�”}”(hŒ readahead_pos”h]”j)�”}”(hj?šh]”hŒ readahead_pos”…”�”}”(hjUšh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjQšubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjšh²hh³jBšh´M ubj )�”}”(hŒ%(const struct readahead_control *rac)”h]”j )�”}”(hŒ#const struct readahead_control *rac”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjpšh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjlšubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}šh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjlšubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj‹šh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjlšubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜šh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjlšubh)�”}”(hhh]”j)�”}”(hŒreadahead_control”h]”hŒreadahead_control”…”�”}”(hj©šh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦šubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j«šŒmodname”NŒ classname”Njpjs)�”}”jv]”j=šŒc.readahead_pos”†”asbuh1hhjlšubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇšh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjlšubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÕšh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjlšubj)�”}”(hŒrac”h]”hŒrac”…”�”}”(hjâšh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjlšubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjhšubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjšh²hh³jBšh´M ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjšh²hh³jBšh´M ubah}”(h]”jšah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jBšh´M hjšh²hubj4)�”}”(hhh]”jM)�”}”(hŒ8The byte offset into the file of this readahead request.”h]”hŒ8The byte offset into the file of this readahead request.”…”�”}”(hj ›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M hj ›h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjšh²hh³jBšh´M ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj$›jHj$›jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hŒP**Parameters** ``const struct readahead_control *rac`` The readahead request.”h]”(jM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mhj(›ubj¤)�”}”(hhh]”j©)�”}”(hŒ>``const struct readahead_control *rac`` The readahead request.”h]”(j¯)�”}”(hŒ'``const struct readahead_control *rac``”h]”jS)�”}”(hjM›h]”hŒ#const struct readahead_control *rac”…”�”}”(hjO›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjK›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MhjG›ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe readahead request.”h]”hŒThe readahead request.”…”�”}”(hjf›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mhjc›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjG›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jb›h´MhjD›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”]”(héŒreadahead_length (C function)”Œc.readahead_length”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ=size_t readahead_length (const struct readahead_control *rac)”h]”hù)�”}”(hŒ``const struct readahead_control *rac`` The readahead request.”h]”(j¯)�”}”(hŒ'``const struct readahead_control *rac``”h]”jS)�”}”(hjÖœh]”hŒ#const struct readahead_control *rac”…”�”}”(hjØœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÔœubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MhjМubjÉ)�”}”(hhh]”jM)�”}”(hŒThe readahead request.”h]”hŒThe readahead request.”…”�”}”(hjïœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mhjìœubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjМubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³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”]”(héŒreadahead_index (C function)”Œc.readahead_index”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ=pgoff_t readahead_index (const struct readahead_control *rac)”h]”hù)�”}”(hŒžubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M#hj:žubj¤)�”}”(hhh]”j©)�”}”(hŒ>``const struct readahead_control *rac`` The readahead request.”h]”(j¯)�”}”(hŒ'``const struct readahead_control *rac``”h]”jS)�”}”(hj_žh]”hŒ#const struct readahead_control *rac”…”�”}”(hjažh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj]žubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M%hjYžubjÉ)�”}”(hhh]”jM)�”}”(hŒThe readahead request.”h]”hŒThe readahead request.”…”�”}”(hjxžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M hjužubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjYžubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jtžh´M%hjVž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”]”(héŒreadahead_count (C function)”Œc.readahead_count”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒBunsigned int readahead_count (const struct readahead_control *rac)”h]”hù)�”}”(hŒAunsigned int readahead_count(const struct readahead_control *rac)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¹žh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjµžh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M(ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈžh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjµžh²hh³jÇžh´M(ubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjÖžh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjµžh²hh³jÇžh´M(ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäžh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjµžh²hh³jÇžh´M(ubhÿ)�”}”(hŒreadahead_count”h]”j)�”}”(hŒreadahead_count”h]”hŒreadahead_count”…”�”}”(hjöžh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjòžubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjµžh²hh³jÇžh´M(ubj )�”}”(hŒ%(const struct readahead_control *rac)”h]”j )�”}”(hŒ#const struct readahead_control *rac”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjŸubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŸubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj-Ÿh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjŸubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:Ÿh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŸubh)�”}”(hhh]”j)�”}”(hŒreadahead_control”h]”hŒreadahead_control”…”�”}”(hjKŸh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjHŸubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jMŸŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljøžsbŒc.readahead_count”†”asbuh1hhjŸubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkŸh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŸubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjyŸh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjŸubj)�”}”(hŒrac”h]”hŒrac”…”�”}”(hj†Ÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŸubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj Ÿubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjµžh²hh³jÇžh´M(ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj±žh²hh³jÇžh´M(ubah}”(h]”j¬žah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÇžh´M(hj®žh²hubj4)�”}”(hhh]”jM)�”}”(hŒ.The number of pages in this readahead request.”h]”hŒ.The number of pages in this readahead request.”…”�”}”(hj°Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M(hj­Ÿh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj®žh²hh³jÇžh´M(ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÈŸjHjÈŸjI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hŒP**Parameters** ``const struct readahead_control *rac`` The readahead request.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÒŸh]”hŒ Parameters”…”�”}”(hjÔŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjПubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M,hjÌŸubj¤)�”}”(hhh]”j©)�”}”(hŒ>``const struct readahead_control *rac`` The readahead request.”h]”(j¯)�”}”(hŒ'``const struct readahead_control *rac``”h]”jS)�”}”(hjñŸh]”hŒ#const struct readahead_control *rac”…”�”}”(hjóŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjïŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M.hjëŸubjÉ)�”}”(hhh]”jM)�”}”(hŒThe readahead request.”h]”hŒThe readahead request.”…”�”}”(hj  h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M)hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjëŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³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”]”(héŒ#readahead_batch_length (C function)”Œc.readahead_batch_length”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒCsize_t readahead_batch_length (const struct readahead_control *rac)”h]”hù)�”}”(hŒBsize_t readahead_batch_length(const struct readahead_control *rac)”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjN h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjK ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jP Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒreadahead_batch_length”sbŒc.readahead_batch_length”†”asbuh1hhjG h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M1ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjp h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjG h²hh³jo h´M1ubhÿ)�”}”(hŒreadahead_batch_length”h]”j)�”}”(hjl h]”hŒreadahead_batch_length”…”�”}”(hj‚ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj~ ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjG h²hh³jo h´M1ubj )�”}”(hŒ%(const struct readahead_control *rac)”h]”j )�”}”(hŒ#const struct readahead_control *rac”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj™ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj™ ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¸ h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj™ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅ h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj™ ubh)�”}”(hhh]”j)�”}”(hŒreadahead_control”h]”hŒreadahead_control”…”�”}”(hjÖ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÓ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jØ Œmodname”NŒ classname”Njpjs)�”}”jv]”jj Œc.readahead_batch_length”†”asbuh1hhj™ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjô h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj™ ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj™ ubj)�”}”(hŒrac”h]”hŒrac”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj• ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjG h²hh³jo h´M1ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjC h²hh³jo h´M1ubah}”(h]”j> ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jo h´M1hj@ h²hubj4)�”}”(hhh]”jM)�”}”(hŒ)The number of bytes in the current batch.”h]”hŒ)The number of bytes in the current batch.”…”�”}”(hj9¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M1hj6¡h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj@ h²hh³jo h´M1ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjQ¡jHjQ¡jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hŒP**Parameters** ``const struct readahead_control *rac`` The readahead request.”h]”(jM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M5hjU¡ubj¤)�”}”(hhh]”j©)�”}”(hŒ>``const struct readahead_control *rac`` The readahead request.”h]”(j¯)�”}”(hŒ'``const struct readahead_control *rac``”h]”jS)�”}”(hjz¡h]”hŒ#const struct readahead_control *rac”…”�”}”(hj|¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjx¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M7hjt¡ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe readahead request.”h]”hŒThe readahead request.”…”�”}”(hj“¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M2hj�¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjt¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�¡h´M7hjq¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjU¡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ)folio_mkwrite_check_truncate (C function)”Œc.folio_mkwrite_check_truncate”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ[ssize_t folio_mkwrite_check_truncate (const struct folio *folio, const struct inode *inode)”h]”hù)�”}”(hŒZssize_t folio_mkwrite_check_truncate(const struct folio *folio, const struct inode *inode)”h]”(h)�”}”(hhh]”j)�”}”(hŒssize_t”h]”hŒssize_t”…”�”}”(hjסh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÔ¡ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÙ¡Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒfolio_mkwrite_check_truncate”sbŒc.folio_mkwrite_check_truncate”†”asbuh1hhjСh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M@ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjù¡h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjСh²hh³jø¡h´M@ubhÿ)�”}”(hŒfolio_mkwrite_check_truncate”h]”j)�”}”(hjõ¡h]”hŒfolio_mkwrite_check_truncate”…”�”}”(hj ¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¢ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjСh²hh³jø¡h´M@ubj )�”}”(hŒ6(const struct folio *folio, const struct inode *inode)”h]”(j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj&¢h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj"¢ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3¢h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj"¢ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjA¢h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj"¢ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjN¢h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj"¢ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj_¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj\¢ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”ja¢Œmodname”NŒ classname”Njpjs)�”}”jv]”jó¡Œc.folio_mkwrite_check_truncate”†”asbuh1hhj"¢ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}¢h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj"¢ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj‹¢h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj"¢ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj˜¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj"¢ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¢ubj )�”}”(hŒconst struct inode *inode”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj±¢h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj­¢ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾¢h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj­¢ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÌ¢h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj­¢ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙ¢h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj­¢ubh)�”}”(hhh]”j)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjê¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjç¢ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j좌modname”NŒ classname”Njpjs)�”}”jv]”jó¡Œc.folio_mkwrite_check_truncate”†”asbuh1hhj­¢ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj­¢ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj­¢ubj)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj#£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj­¢ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¢ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjСh²hh³jø¡h´M@ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÌ¡h²hh³jø¡h´M@ubah}”(h]”jÇ¡ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jø¡h´M@hjÉ¡h²hubj4)�”}”(hhh]”jM)�”}”(hŒcheck if folio was truncated”h]”hŒcheck if folio was truncated”…”�”}”(hjM£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M@hjJ£h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÉ¡h²hh³jø¡h´M@ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGje£jHje£jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hŒè**Parameters** ``const struct folio *folio`` the folio to check ``const struct inode *inode`` the inode to check the folio against **Return** the number of bytes in the folio up to EOF, or -EFAULT if the folio was truncated.”h]”(jM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MDhji£ubj¤)�”}”(hhh]”(j©)�”}”(hŒ1``const struct folio *folio`` the folio to check ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjŽ£h]”hŒconst struct folio *folio”…”�”}”(hj�£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjŒ£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MAhjˆ£ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe folio to check”h]”hŒthe folio to check”…”�”}”(hj§£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j££h´MAhj¤£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjˆ£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j££h´MAhj…£ubj©)�”}”(hŒC``const struct inode *inode`` the inode to check the folio against ”h]”(j¯)�”}”(hŒ``const struct inode *inode``”h]”jS)�”}”(hjÇ£h]”hŒconst struct inode *inode”…”�”}”(hjÉ£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÅ£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MBhjÁ£ubjÉ)�”}”(hhh]”jM)�”}”(hŒ$the inode to check the folio against”h]”hŒ$the inode to check the folio against”…”�”}”(hjà£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÜ£h´MBhjÝ£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÁ£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÜ£h´MBhj…£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hji£ubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MDhji£ubjM)�”}”(hŒRthe number of bytes in the folio up to EOF, or -EFAULT if the folio was truncated.”h]”hŒRthe number of bytes in the folio up to EOF, or -EFAULT if the folio was truncated.”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´MDhji£ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒi_blocks_per_folio (C function)”Œc.i_blocks_per_folio”hNt”auh1hÜhj«#h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒVunsigned int i_blocks_per_folio (const struct inode *inode, const struct folio *folio)”h]”hù)�”}”(hŒUunsigned int i_blocks_per_folio(const struct inode *inode, const struct folio *folio)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjG¤h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjC¤h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M\ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjV¤h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjC¤h²hh³jU¤h´M\ubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjd¤h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjC¤h²hh³jU¤h´M\ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjr¤h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjC¤h²hh³jU¤h´M\ubhÿ)�”}”(hŒi_blocks_per_folio”h]”j)�”}”(hŒi_blocks_per_folio”h]”hŒi_blocks_per_folio”…”�”}”(hj„¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj€¤ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjC¤h²hh³jU¤h´M\ubj )�”}”(hŒ6(const struct inode *inode, const struct folio *folio)”h]”(j )�”}”(hŒconst struct inode *inode”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj ¤h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjœ¤ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­¤h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjœ¤ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj»¤h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjœ¤ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjȤh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjœ¤ubh)�”}”(hhh]”j)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjÙ¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÖ¤ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÛ¤Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj†¤sbŒc.i_blocks_per_folio”†”asbuh1hhjœ¤ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjù¤h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjœ¤ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjœ¤ubj)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjœ¤ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj˜¤ubj )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj-¥h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj)¥ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:¥h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj)¥ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjH¥h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj)¥ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjU¥h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj)¥ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjf¥h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjc¥ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jh¥Œmodname”NŒ classname”Njpjs)�”}”jv]”jõ¤Œc.i_blocks_per_folio”†”asbuh1hhj)¥ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„¥h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj)¥ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj’¥h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj)¥ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjŸ¥h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj)¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj˜¤ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjC¤h²hh³jU¤h´M\ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj?¤h²hh³jU¤h´M\ubah}”(h]”j:¤ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jU¤h´M\hj<¤h²hubj4)�”}”(hhh]”jM)�”}”(hŒ"How many blocks fit in this folio.”h]”hŒ"How many blocks fit in this folio.”…”�”}”(hjÉ¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M\hjÆ¥h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj<¤h²hh³jU¤h´M\ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjá¥jHjá¥jI‰jJ‰jK‰uh1híh²hhj«#h³Nh´Nubj„)�”}”(hXy**Parameters** ``const struct inode *inode`` The inode which contains the blocks. ``const struct folio *folio`` The folio. **Description** If the block size is larger than the size of this folio, return zero. **Context** The caller should hold a refcount on the folio to prevent it from being split. **Return** The number of filesystem blocks covered by this folio.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjë¥h]”hŒ Parameters”…”�”}”(hjí¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjé¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M`hjå¥ubj¤)�”}”(hhh]”(j©)�”}”(hŒC``const struct inode *inode`` The inode which contains the blocks. ”h]”(j¯)�”}”(hŒ``const struct inode *inode``”h]”jS)�”}”(hj ¦h]”hŒconst struct inode *inode”…”�”}”(hj ¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M]hj¦ubjÉ)�”}”(hhh]”jM)�”}”(hŒ$The inode which contains the blocks.”h]”hŒ$The inode which contains the blocks.”…”�”}”(hj#¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¦h´M]hj ¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¦h´M]hj¦ubj©)�”}”(hŒ)``const struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjC¦h]”hŒconst struct folio *folio”…”�”}”(hjE¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjA¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M^hj=¦ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hj\¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jX¦h´M^hjY¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj=¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jX¦h´M^hj¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjå¥ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj~¦h]”hŒ Description”…”�”}”(hj€¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj|¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1•jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M`hjå¥ubjM)�”}”(hŒEIf the block size is larger than the size of this folio, return zero.”h]”hŒEIf the block size is larger than the size of this folio, return zero.”…”�”}”(hj”¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´M_hjå¥ubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mahjå¥ubjM)�”}”(hŒNThe caller should hold a refcount on the folio to prevent it from being split.”h]”hŒNThe caller should hold a refcount on the folio to prevent it from being split.”…”�”}”(hj»¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mbhjå¥ubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mehjå¥ubjM)�”}”(hŒ6The number of filesystem blocks covered by this folio.”h]”hŒ6The number of filesystem blocks covered by this folio.”…”�”}”(hjâ¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:86: ./include/linux/pagemap.h”h´Mdhjå¥ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj«#h²hh³Nh´Nubeh}”(h]”Œtruncate”ah ]”h"]”Œtruncate”ah$]”h&]”uh1hµhj¯œh²hh³hÊh´KQubeh}”(h]”Œfile-mapping-and-page-cache”ah ]”h"]”Œfile mapping and page cache”ah$]”h&]”uh1hµhh·h²hh³hÊh´K8ubh¶)�”}”(hhh]”(h»)�”}”(hŒ Memory pools”h]”hŒ Memory pools”…”�”}”(hj §h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj§h²hh³hÊh´KZubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmempool_exit (C function)”Œc.mempool_exit”hNt”auh1hÜhj§h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ(void mempool_exit (struct mempool *pool)”h]”hù)�”}”(hŒ'void mempool_exit(struct mempool *pool)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj2§h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj.§h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´KÏubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA§h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj.§h²hh³j@§h´KÏubhÿ)�”}”(hŒ mempool_exit”h]”j)�”}”(hŒ mempool_exit”h]”hŒ mempool_exit”…”�”}”(hjS§h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjO§ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj.§h²hh³j@§h´KÏubj )�”}”(hŒ(struct mempool *pool)”h]”j )�”}”(hŒstruct mempool *pool”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjo§h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjk§ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|§h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjk§ubh)�”}”(hhh]”j)�”}”(hŒmempool”h]”hŒmempool”…”�”}”(hj�§h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjЧubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j�§Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljU§sbŒc.mempool_exit”†”asbuh1hhjk§ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­§h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjk§ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj»§h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjk§ubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hjȧh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjk§ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjg§ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj.§h²hh³j@§h´KÏubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj*§h²hh³j@§h´KÏubah}”(h]”j%§ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j@§h´KÏhj'§h²hubj4)�”}”(hhh]”jM)�”}”(hŒ.exit a mempool initialized with mempool_init()”h]”hŒ.exit a mempool initialized with mempool_init()”…”�”}”(hjò§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´KÏhjï§h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj'§h²hh³j@§h´KÏubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj ¨jHj ¨jI‰jJ‰jK‰uh1híh²hhj§h³Nh´Nubj„)�”}”(hXS**Parameters** ``struct mempool *pool`` pointer to the memory pool which was initialized with mempool_init(). **Description** Free all reserved elements in **pool** and **pool** itself. This function only sleeps if the free_fn() function sleeps. May be called on a zeroed but uninitialized mempool (i.e. allocated with kzalloc()).”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¨h]”hŒ Parameters”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´KÓhj¨ubj¤)�”}”(hhh]”j©)�”}”(hŒ_``struct mempool *pool`` pointer to the memory pool which was initialized with mempool_init(). ”h]”(j¯)�”}”(hŒ``struct mempool *pool``”h]”jS)�”}”(hj3¨h]”hŒstruct mempool *pool”…”�”}”(hj5¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj1¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´KÑhj-¨ubjÉ)�”}”(hhh]”jM)�”}”(hŒEpointer to the memory pool which was initialized with mempool_init().”h]”hŒEpointer to the memory pool which was initialized with mempool_init().”…”�”}”(hjL¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´KÐhjI¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj-¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jH¨h´KÑhj*¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¨ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´KÓhj¨ubjM)�”}”(hŒxFree all reserved elements in **pool** and **pool** itself. This function only sleeps if the free_fn() function sleeps.”h]”(hŒFree all reserved elements in ”…”�”}”(hj…¨h²hh³Nh´NubjŽ)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hj�¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj…¨ubhŒ and ”…”�”}”(hj…¨h²hh³Nh´NubjŽ)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hjŸ¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj…¨ubhŒE itself. This function only sleeps if the free_fn() function sleeps.”…”�”}”(hj…¨h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´KÒhj¨ubjM)�”}”(hŒTMay be called on a zeroed but uninitialized mempool (i.e. allocated with kzalloc()).”h]”hŒTMay be called on a zeroed but uninitialized mempool (i.e. allocated with kzalloc()).”…”�”}”(hj¸¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.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”]”(héŒmempool_destroy (C function)”Œc.mempool_destroy”hNt”auh1hÜhj§h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ+void mempool_destroy (struct mempool *pool)”h]”hù)�”}”(hŒ*void mempool_destroy(struct mempool *pool)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjç¨h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjã¨h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´KåubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjö¨h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjã¨h²hh³jõ¨h´Kåubhÿ)�”}”(hŒmempool_destroy”h]”j)�”}”(hŒmempool_destroy”h]”hŒmempool_destroy”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj©ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjã¨h²hh³jõ¨h´Kåubj )�”}”(hŒ(struct mempool *pool)”h]”j )�”}”(hŒstruct mempool *pool”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj$©h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj ©ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1©h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj ©ubh)�”}”(hhh]”j)�”}”(hŒmempool”h]”hŒmempool”…”�”}”(hjB©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj?©ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jD©Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj ©sbŒc.mempool_destroy”†”asbuh1hhj ©ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjb©h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj ©ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjp©h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj ©ubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hj}©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj©ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjã¨h²hh³jõ¨h´Kåubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjߨh²hh³jõ¨h´Kåubah}”(h]”jÚ¨ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jõ¨h´Kåhjܨh²hubj4)�”}”(hhh]”jM)�”}”(hŒdeallocate a memory pool”h]”hŒdeallocate a memory pool”…”�”}”(hj§©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Kåhj¤©h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjܨh²hh³jõ¨h´Kåubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¿©jHj¿©jI‰jJ‰jK‰uh1híh²hhj§h³Nh´Nubj„)�”}”(hŒü**Parameters** ``struct mempool *pool`` pointer to the memory pool which was allocated via mempool_create(). **Description** Free all reserved elements in **pool** and **pool** itself. This function only sleeps if the free_fn() function sleeps.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÉ©h]”hŒ Parameters”…”�”}”(hjË©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÇ©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Kéhjéubj¤)�”}”(hhh]”j©)�”}”(hŒ^``struct mempool *pool`` pointer to the memory pool which was allocated via mempool_create(). ”h]”(j¯)�”}”(hŒ``struct mempool *pool``”h]”jS)�”}”(hjè©h]”hŒstruct mempool *pool”…”�”}”(hjê©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjæ©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Kçhjâ©ubjÉ)�”}”(hhh]”jM)�”}”(hŒDpointer to the memory pool which was allocated via mempool_create().”h]”hŒDpointer to the memory pool which was allocated via mempool_create().”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Kæhjþ©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjâ©ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jý©h´Kçhjß©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjéubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj$ªh]”hŒ Description”…”�”}”(hj&ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj"ªubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´KéhjéubjM)�”}”(hŒxFree all reserved elements in **pool** and **pool** itself. This function only sleeps if the free_fn() function sleeps.”h]”(hŒFree all reserved elements in ”…”�”}”(hj:ªh²hh³Nh´NubjŽ)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hjBªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj:ªubhŒ and ”…”�”}”(hj:ªh²hh³Nh´NubjŽ)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hjTªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj:ªubhŒE itself. This function only sleeps if the free_fn() function sleeps.”…”�”}”(hj:ªh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.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”]”(héŒmempool_init (C function)”Œc.mempool_init”hNt”auh1hÜhj§h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒxint mempool_init (struct mempool *pool, int min_nr, mempool_alloc_t *alloc_fn, mempool_free_t *free_fn, void *pool_data)”h]”hù)�”}”(hŒwint mempool_init(struct mempool *pool, int min_nr, mempool_alloc_t *alloc_fn, mempool_free_t *free_fn, void *pool_data)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj�ªh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj‰ªh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœªh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj‰ªh²hh³j›ªh´Mubhÿ)�”}”(hŒ mempool_init”h]”j)�”}”(hŒ mempool_init”h]”hŒ mempool_init”…”�”}”(hj®ªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjªªubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj‰ªh²hh³j›ªh´Mubj )�”}”(hŒg(struct mempool *pool, int min_nr, mempool_alloc_t *alloc_fn, mempool_free_t *free_fn, void *pool_data)”h]”(j )�”}”(hŒstruct mempool *pool”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjʪh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjƪubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjתh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjƪubh)�”}”(hhh]”j)�”}”(hŒmempool”h]”hŒmempool”…”�”}”(hjèªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjåªubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jꪌmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj°ªsbŒc.mempool_init”†”asbuh1hhjƪubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjƪubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjƪubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hj#«h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjƪubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjªubj )�”}”(hŒ int min_nr”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj<«h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj8«ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJ«h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj8«ubj)�”}”(hŒmin_nr”h]”hŒmin_nr”…”�”}”(hjX«h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj8«ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjªubj )�”}”(hŒmempool_alloc_t *alloc_fn”h]”(h)�”}”(hhh]”j)�”}”(hŒmempool_alloc_t”h]”hŒmempool_alloc_t”…”�”}”(hjt«h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjq«ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jv«Œmodname”NŒ classname”Njpjs)�”}”jv]”j«Œc.mempool_init”†”asbuh1hhjm«ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’«h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjm«ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj «h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjm«ubj)�”}”(hŒalloc_fn”h]”hŒalloc_fn”…”�”}”(hj­«h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjm«ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjªubj )�”}”(hŒmempool_free_t *free_fn”h]”(h)�”}”(hhh]”j)�”}”(hŒmempool_free_t”h]”hŒmempool_free_t”…”�”}”(hjÉ«h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÆ«ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jË«Œmodname”NŒ classname”Njpjs)�”}”jv]”j«Œc.mempool_init”†”asbuh1hhj«ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç«h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj«ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjõ«h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj«ubj)�”}”(hŒfree_fn”h]”hŒfree_fn”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj«ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjªubj )�”}”(hŒvoid *pool_data”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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¬ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj7¬h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¬ubj)�”}”(hŒ pool_data”h]”hŒ pool_data”…”�”}”(hjD¬h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¬ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjªubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj‰ªh²hh³j›ªh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj…ªh²hh³j›ªh´Mubah}”(h]”j€ªah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j›ªh´Mhj‚ªh²hubj4)�”}”(hhh]”jM)�”}”(hŒinitialize a memory pool”h]”hŒinitialize a memory pool”…”�”}”(hjn¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Mhjk¬h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj‚ªh²hh³j›ªh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj†¬jHj†¬jI‰jJ‰jK‰uh1híh²hhj§h³Nh´Nubj„)�”}”(hXM**Parameters** ``struct mempool *pool`` pointer to the memory pool that should be initialized ``int min_nr`` the minimum number of elements guaranteed to be allocated for this pool. ``mempool_alloc_t *alloc_fn`` user-defined element-allocation function. ``mempool_free_t *free_fn`` user-defined element-freeing function. ``void *pool_data`` optional private data available to the user-defined functions. **Description** Like mempool_create(), but initializes the pool in (i.e. embedded in another structure). **Return** ``0`` on success, negative error code otherwise.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj�¬h]”hŒ Parameters”…”�”}”(hj’¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjެubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M!hjЬubj¤)�”}”(hhh]”(j©)�”}”(hŒO``struct mempool *pool`` pointer to the memory pool that should be initialized ”h]”(j¯)�”}”(hŒ``struct mempool *pool``”h]”jS)�”}”(hj¯¬h]”hŒstruct mempool *pool”…”�”}”(hj±¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj­¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Mhj©¬ubjÉ)�”}”(hhh]”jM)�”}”(hŒ5pointer to the memory pool that should be initialized”h]”hŒ5pointer to the memory pool that should be initialized”…”�”}”(hjȬh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jĬh´MhjŬubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj©¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jĬh´Mhj¦¬ubj©)�”}”(hŒX``int min_nr`` the minimum number of elements guaranteed to be allocated for this pool. ”h]”(j¯)�”}”(hŒ``int min_nr``”h]”jS)�”}”(hjè¬h]”hŒ int min_nr”…”�”}”(hjê¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjæ¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M hjâ¬ubjÉ)�”}”(hhh]”jM)�”}”(hŒHthe minimum number of elements guaranteed to be allocated for this pool.”h]”hŒHthe minimum number of elements guaranteed to be allocated for this pool.”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Mhjþ¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjâ¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jý¬h´M hj¦¬ubj©)�”}”(hŒH``mempool_alloc_t *alloc_fn`` user-defined element-allocation function. ”h]”(j¯)�”}”(hŒ``mempool_alloc_t *alloc_fn``”h]”jS)�”}”(hj"­h]”hŒmempool_alloc_t *alloc_fn”…”�”}”(hj$­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj ­ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M!hj­ubjÉ)�”}”(hhh]”jM)�”}”(hŒ)user-defined element-allocation function.”h]”hŒ)user-defined element-allocation function.”…”�”}”(hj;­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j7­h´M!hj8­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j7­h´M!hj¦¬ubj©)�”}”(hŒC``mempool_free_t *free_fn`` user-defined element-freeing function. ”h]”(j¯)�”}”(hŒ``mempool_free_t *free_fn``”h]”jS)�”}”(hj[­h]”hŒmempool_free_t *free_fn”…”�”}”(hj]­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjY­ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M"hjU­ubjÉ)�”}”(hhh]”jM)�”}”(hŒ&user-defined element-freeing function.”h]”hŒ&user-defined element-freeing function.”…”�”}”(hjt­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jp­h´M"hjq­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjU­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jp­h´M"hj¦¬ubj©)�”}”(hŒS``void *pool_data`` optional private data available to the user-defined functions. ”h]”(j¯)�”}”(hŒ``void *pool_data``”h]”jS)�”}”(hj”­h]”hŒvoid *pool_data”…”�”}”(hj–­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj’­ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M#hjŽ­ubjÉ)�”}”(hhh]”jM)�”}”(hŒ>optional private data available to the user-defined functions.”h]”hŒ>optional private data available to the user-defined functions.”…”�”}”(hj­­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j©­h´M#hjª­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjŽ­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j©­h´M#hj¦¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjЬubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÏ­h]”hŒ Description”…”�”}”(hjÑ­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÍ­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M%hjЬubjM)�”}”(hŒXLike mempool_create(), but initializes the pool in (i.e. embedded in another structure).”h]”hŒXLike mempool_create(), but initializes the pool in (i.e. embedded in another structure).”…”�”}”(hjå­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M$hjЬubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M'hjЬubjM)�”}”(hŒ0``0`` on success, negative error code otherwise.”h]”(jS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj ®ubhŒ+ on success, negative error code otherwise.”…”�”}”(hj ®h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.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”]”(héŒ mempool_create_node (C function)”Œc.mempool_create_node”hNt”auh1hÜhj§h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ“struct mempool * mempool_create_node (int min_nr, mempool_alloc_t *alloc_fn, mempool_free_t *free_fn, void *pool_data, gfp_t gfp_mask, int node_id)”h]”hù)�”}”(hŒ‘struct mempool *mempool_create_node(int min_nr, mempool_alloc_t *alloc_fn, mempool_free_t *free_fn, void *pool_data, gfp_t gfp_mask, int node_id)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjI®h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjE®h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M5ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW®h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjE®h²hh³jV®h´M5ubh)�”}”(hhh]”j)�”}”(hŒmempool”h]”hŒmempool”…”�”}”(hjh®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhje®ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jj®Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒmempool_create_node”sbŒc.mempool_create_node”†”asbuh1hhjE®h²hh³jV®h´M5ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰®h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjE®h²hh³jV®h´M5ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj—®h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjE®h²hh³jV®h´M5ubhÿ)�”}”(hŒmempool_create_node”h]”j)�”}”(hj†®h]”hŒmempool_create_node”…”�”}”(hj¨®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤®ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjE®h²hh³jV®h´M5ubj )�”}”(hŒn(int min_nr, mempool_alloc_t *alloc_fn, mempool_free_t *free_fn, void *pool_data, gfp_t gfp_mask, int node_id)”h]”(j )�”}”(hŒ int min_nr”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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¿®ubj)�”}”(hŒmin_nr”h]”hŒmin_nr”…”�”}”(hjß®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¿®ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj»®ubj )�”}”(hŒmempool_alloc_t *alloc_fn”h]”(h)�”}”(hhh]”j)�”}”(hŒmempool_alloc_t”h]”hŒmempool_alloc_t”…”�”}”(hjû®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjø®ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jý®Œmodname”NŒ classname”Njpjs)�”}”jv]”j„®Œc.mempool_create_node”†”asbuh1hhjô®ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjô®ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj'¯h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjô®ubj)�”}”(hŒalloc_fn”h]”hŒalloc_fn”…”�”}”(hj4¯h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjô®ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj»®ubj )�”}”(hŒmempool_free_t *free_fn”h]”(h)�”}”(hhh]”j)�”}”(hŒmempool_free_t”h]”hŒmempool_free_t”…”�”}”(hjP¯h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjM¯ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jR¯Œmodname”NŒ classname”Njpjs)�”}”jv]”j„®Œc.mempool_create_node”†”asbuh1hhjI¯ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjn¯h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjI¯ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj|¯h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjI¯ubj)�”}”(hŒfree_fn”h]”hŒfree_fn”…”�”}”(hj‰¯h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjI¯ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj»®ubj )�”}”(hŒvoid *pool_data”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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ž¯ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¾¯h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjž¯ubj)�”}”(hŒ pool_data”h]”hŒ pool_data”…”�”}”(hj˯h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjž¯ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j 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 ]”jah"]”h$]”h&]”uh1jhjä¯ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j鯌modname”NŒ classname”Njpjs)�”}”jv]”j„®Œc.mempool_create_node”†”asbuh1hhjà¯ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjà¯ubj)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjà¯ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj»®ubj )�”}”(hŒ int node_id”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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(°ubj)�”}”(hŒnode_id”h]”hŒnode_id”…”�”}”(hjH°h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj(°ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj»®ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjE®h²hh³jV®h´M5ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjA®h²hh³jV®h´M5ubah}”(h]”j<®ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jV®h´M5hj>®h²hubj4)�”}”(hhh]”jM)�”}”(hŒcreate a memory pool”h]”hŒcreate a memory pool”…”�”}”(hjr°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M5hjo°h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj>®h²hh³jV®h´M5ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjаjHjаjI‰jJ‰jK‰uh1híh²hhj§h³Nh´Nubj„)�”}”(hXJ**Parameters** ``int min_nr`` the minimum number of elements guaranteed to be allocated for this pool. ``mempool_alloc_t *alloc_fn`` user-defined element-allocation function. ``mempool_free_t *free_fn`` user-defined element-freeing function. ``void *pool_data`` optional private data available to the user-defined functions. ``gfp_t gfp_mask`` memory allocation flags ``int node_id`` numa node to allocate on **Description** this function creates and allocates a guaranteed size, preallocated memory pool. The pool can be used from the mempool_alloc() and mempool_free() functions. This function might sleep. Both the alloc_fn() and the free_fn() functions might sleep - as long as the mempool_alloc() function is not called from IRQ contexts. **Return** pointer to the created memory pool object or ``NULL`` on error.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj”°h]”hŒ Parameters”…”�”}”(hj–°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj’°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M9hjްubj¤)�”}”(hhh]”(j©)�”}”(hŒX``int min_nr`` the minimum number of elements guaranteed to be allocated for this pool. ”h]”(j¯)�”}”(hŒ``int min_nr``”h]”jS)�”}”(hj³°h]”hŒ int min_nr”…”�”}”(hjµ°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj±°ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M7hj­°ubjÉ)�”}”(hhh]”jM)�”}”(hŒHthe minimum number of elements guaranteed to be allocated for this pool.”h]”hŒHthe minimum number of elements guaranteed to be allocated for this pool.”…”�”}”(hj̰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M6hjɰubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj­°ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jȰh´M7hjª°ubj©)�”}”(hŒH``mempool_alloc_t *alloc_fn`` user-defined element-allocation function. ”h]”(j¯)�”}”(hŒ``mempool_alloc_t *alloc_fn``”h]”jS)�”}”(hjí°h]”hŒmempool_alloc_t *alloc_fn”…”�”}”(hjï°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjë°ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M8hjç°ubjÉ)�”}”(hhh]”jM)�”}”(hŒ)user-defined element-allocation function.”h]”hŒ)user-defined element-allocation function.”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j±h´M8hj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjç°ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j±h´M8hjª°ubj©)�”}”(hŒC``mempool_free_t *free_fn`` user-defined element-freeing function. ”h]”(j¯)�”}”(hŒ``mempool_free_t *free_fn``”h]”jS)�”}”(hj&±h]”hŒmempool_free_t *free_fn”…”�”}”(hj(±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj$±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M9hj ±ubjÉ)�”}”(hhh]”jM)�”}”(hŒ&user-defined element-freeing function.”h]”hŒ&user-defined element-freeing function.”…”�”}”(hj?±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j;±h´M9hj<±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j;±h´M9hjª°ubj©)�”}”(hŒS``void *pool_data`` optional private data available to the user-defined functions. ”h]”(j¯)�”}”(hŒ``void *pool_data``”h]”jS)�”}”(hj_±h]”hŒvoid *pool_data”…”�”}”(hja±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj]±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M:hjY±ubjÉ)�”}”(hhh]”jM)�”}”(hŒ>optional private data available to the user-defined functions.”h]”hŒ>optional private data available to the user-defined functions.”…”�”}”(hjx±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jt±h´M:hju±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjY±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jt±h´M:hjª°ubj©)�”}”(hŒ+``gfp_t gfp_mask`` memory allocation flags ”h]”(j¯)�”}”(hŒ``gfp_t gfp_mask``”h]”jS)�”}”(hj˜±h]”hŒgfp_t gfp_mask”…”�”}”(hjš±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj–±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M;hj’±ubjÉ)�”}”(hhh]”jM)�”}”(hŒmemory allocation flags”h]”hŒmemory allocation flags”…”�”}”(hj±±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j­±h´M;hj®±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj’±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j­±h´M;hjª°ubj©)�”}”(hŒ)``int node_id`` numa node to allocate on ”h]”(j¯)�”}”(hŒ``int node_id``”h]”jS)�”}”(hjѱh]”hŒ int node_id”…”�”}”(hjÓ±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjϱubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M<hj˱ubjÉ)�”}”(hhh]”jM)�”}”(hŒnuma node to allocate on”h]”hŒnuma node to allocate on”…”�”}”(hjê±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jæ±h´M<hjç±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj˱ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jæ±h´M<hjª°ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjްubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj ²h]”hŒ Description”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M>hjްubjM)�”}”(hX>this function creates and allocates a guaranteed size, preallocated memory pool. The pool can be used from the mempool_alloc() and mempool_free() functions. This function might sleep. Both the alloc_fn() and the free_fn() functions might sleep - as long as the mempool_alloc() function is not called from IRQ contexts.”h]”hX>this function creates and allocates a guaranteed size, preallocated memory pool. The pool can be used from the mempool_alloc() and mempool_free() functions. This function might sleep. Both the alloc_fn() and the free_fn() functions might sleep - as long as the mempool_alloc() function is not called from IRQ contexts.”…”�”}”(hj"²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M=hjްubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´MChjްubjM)�”}”(hŒ?pointer to the created memory pool object or ``NULL`` on error.”h]”(hŒ-pointer to the created memory pool object or ”…”�”}”(hjI²h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjQ²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjI²ubhŒ on error.”…”�”}”(hjI²h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´MDhjްubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj§h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmempool_resize (C function)”Œc.mempool_resize”hNt”auh1hÜhj§h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ9int mempool_resize (struct mempool *pool, int new_min_nr)”h]”hù)�”}”(hŒ8int mempool_resize(struct mempool *pool, int new_min_nr)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjвh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj†²h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M[ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™²h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj†²h²hh³j˜²h´M[ubhÿ)�”}”(hŒmempool_resize”h]”j)�”}”(hŒmempool_resize”h]”hŒmempool_resize”…”�”}”(hj«²h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj§²ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj†²h²hh³j˜²h´M[ubj )�”}”(hŒ&(struct mempool *pool, int new_min_nr)”h]”(j )�”}”(hŒstruct mempool *pool”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjDzh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjòubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ²h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjòubh)�”}”(hhh]”j)�”}”(hŒmempool”h]”hŒmempool”…”�”}”(hjå²h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjâ²ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j粌modname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj­²sbŒc.mempool_resize”†”asbuh1hhjòubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjòubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjòubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hj ³h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjòubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¿²ubj )�”}”(hŒint new_min_nr”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj9³h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj5³ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjG³h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj5³ubj)�”}”(hŒ new_min_nr”h]”hŒ new_min_nr”…”�”}”(hjU³h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj5³ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¿²ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj†²h²hh³j˜²h´M[ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj‚²h²hh³j˜²h´M[ubah}”(h]”j}²ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j˜²h´M[hj²h²hubj4)�”}”(hhh]”jM)�”}”(hŒresize an existing memory pool”h]”hŒresize an existing memory pool”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M[hj|³h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj²h²hh³j˜²h´M[ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj—³jHj—³jI‰jJ‰jK‰uh1híh²hhj§h³Nh´Nubj„)�”}”(hXÅ**Parameters** ``struct mempool *pool`` pointer to the memory pool which was allocated via mempool_create(). ``int new_min_nr`` the new minimum number of elements guaranteed to be allocated for this pool. **Description** This function shrinks/grows the pool. In the case of growing, it cannot be guaranteed that the pool will be grown to the new size immediately, but new mempool_free() calls will refill it. This function may sleep. Note, the caller must guarantee that no mempool_destroy is called while this function is running. mempool_alloc() & mempool_free() might be called (eg. from IRQ contexts) while this function executes. **Return** ``0`` on success, negative error code otherwise.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¡³h]”hŒ Parameters”…”�”}”(hj£³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŸ³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M_hj›³ubj¤)�”}”(hhh]”(j©)�”}”(hŒ^``struct mempool *pool`` pointer to the memory pool which was allocated via mempool_create(). ”h]”(j¯)�”}”(hŒ``struct mempool *pool``”h]”jS)�”}”(hjÀ³h]”hŒstruct mempool *pool”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¾³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M]hjº³ubjÉ)�”}”(hhh]”jM)�”}”(hŒDpointer to the memory pool which was allocated via mempool_create().”h]”hŒDpointer to the memory pool which was allocated via mempool_create().”…”�”}”(hjÙ³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M\hjÖ³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjº³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÕ³h´M]hj·³ubj©)�”}”(hŒ```int new_min_nr`` the new minimum number of elements guaranteed to be allocated for this pool. ”h]”(j¯)�”}”(hŒ``int new_min_nr``”h]”jS)�”}”(hjú³h]”hŒint new_min_nr”…”�”}”(hjü³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjø³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M_hjô³ubjÉ)�”}”(hhh]”jM)�”}”(hŒLthe new minimum number of elements guaranteed to be allocated for this pool.”h]”hŒLthe new minimum number of elements guaranteed to be allocated for this pool.”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M^hj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjô³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j´h´M_hj·³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj›³ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Mahj›³ubjM)�”}”(hŒÔThis function shrinks/grows the pool. In the case of growing, it cannot be guaranteed that the pool will be grown to the new size immediately, but new mempool_free() calls will refill it. This function may sleep.”h]”hŒÔThis function shrinks/grows the pool. In the case of growing, it cannot be guaranteed that the pool will be grown to the new size immediately, but new mempool_free() calls will refill it. This function may sleep.”…”�”}”(hjL´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M`hj›³ubjM)�”}”(hŒÈNote, the caller must guarantee that no mempool_destroy is called while this function is running. mempool_alloc() & mempool_free() might be called (eg. from IRQ contexts) while this function executes.”h]”hŒÈNote, the caller must guarantee that no mempool_destroy is called while this function is running. mempool_alloc() & mempool_free() might be called (eg. from IRQ contexts) while this function executes.”…”�”}”(hj[´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Mehj›³ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Mihj›³ubjM)�”}”(hŒ0``0`` on success, negative error code otherwise.”h]”(jS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hj†´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‚´ubhŒ+ on success, negative error code otherwise.”…”�”}”(hj‚´h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Mjhj›³ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj§h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmempool_alloc_bulk (C function)”Œc.mempool_alloc_bulk”hNt”auh1hÜhj§h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒOint mempool_alloc_bulk (struct mempool *pool, void **elems, unsigned int count)”h]”hù)�”}”(hŒNint mempool_alloc_bulk(struct mempool *pool, void **elems, unsigned int count)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj¿´h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj»´h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´MçubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjδh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj»´h²hh³jÍ´h´Mçubhÿ)�”}”(hŒmempool_alloc_bulk”h]”j)�”}”(hŒmempool_alloc_bulk”h]”hŒmempool_alloc_bulk”…”�”}”(hjà´h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÜ´ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj»´h²hh³jÍ´h´Mçubj )�”}”(hŒ8(struct mempool *pool, void **elems, unsigned int count)”h]”(j )�”}”(hŒstruct mempool *pool”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjü´h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjø´ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj µh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjø´ubh)�”}”(hhh]”j)�”}”(hŒmempool”h]”hŒmempool”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjµubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jµŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljâ´sbŒc.mempool_alloc_bulk”†”asbuh1hhjø´ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:µh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjø´ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjHµh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjø´ubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hjUµh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjø´ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjô´ubj )�”}”(hŒ void **elems”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjnµh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjjµubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|µh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjjµubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjеh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjjµubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj—µh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjjµubj)�”}”(hŒelems”h]”hŒelems”…”�”}”(hj¤µh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjjµubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjô´ubj )�”}”(hŒunsigned int count”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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¹µubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(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¹µubj)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjõµh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¹µubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjô´ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj»´h²hh³jÍ´h´Mçubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj·´h²hh³jÍ´h´Mçubah}”(h]”j²´ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÍ´h´Mçhj´´h²hubj4)�”}”(hhh]”jM)�”}”(hŒ-allocate multiple elements from a memory pool”h]”hŒ-allocate multiple elements from a memory pool”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Mçhj¶h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj´´h²hh³jÍ´h´Mçubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj7¶jHj7¶jI‰jJ‰jK‰uh1híh²hhj§h³Nh´Nubj„)�”}”(hXN**Parameters** ``struct mempool *pool`` pointer to the memory pool ``void **elems`` partially or fully populated elements array ``unsigned int count`` number of entries in **elem** that need to be allocated **Description** Allocate **count** elements into **elems**. This is done by first calling into the alloc_fn supplied at pool initialization time, and dipping into the reserved pool when alloc_fn fails to allocate an element. On return all **count** elements in **elems** will be populated. **Return** Always 0. If it wasn't for %$#^$ alloc tags, it would return void.”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Mëhj;¶ubj¤)�”}”(hhh]”(j©)�”}”(hŒ4``struct mempool *pool`` pointer to the memory pool ”h]”(j¯)�”}”(hŒ``struct mempool *pool``”h]”jS)�”}”(hj`¶h]”hŒstruct mempool *pool”…”�”}”(hjb¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj^¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´MèhjZ¶ubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to the memory pool”h]”hŒpointer to the memory pool”…”�”}”(hjy¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ju¶h´Mèhjv¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjZ¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³ju¶h´MèhjW¶ubj©)�”}”(hŒ=``void **elems`` partially or fully populated elements array ”h]”(j¯)�”}”(hŒ``void **elems``”h]”jS)�”}”(hj™¶h]”hŒ void **elems”…”�”}”(hj›¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj—¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Méhj“¶ubjÉ)�”}”(hhh]”jM)�”}”(hŒ+partially or fully populated elements array”h]”hŒ+partially or fully populated elements array”…”�”}”(hj²¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j®¶h´Méhj¯¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj“¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j®¶h´MéhjW¶ubj©)�”}”(hŒO``unsigned int count`` number of entries in **elem** that need to be allocated ”h]”(j¯)�”}”(hŒ``unsigned int count``”h]”jS)�”}”(hjÒ¶h]”hŒunsigned int count”…”�”}”(hjÔ¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjжubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Mêhj̶ubjÉ)�”}”(hhh]”jM)�”}”(hŒ7number of entries in **elem** that need to be allocated”h]”(hŒnumber of entries in ”…”�”}”(hjë¶h²hh³Nh´NubjŽ)�”}”(hŒ**elem**”h]”hŒelem”…”�”}”(hjó¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjë¶ubhŒ that need to be allocated”…”�”}”(hjë¶h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jç¶h´Mêhjè¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj̶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jç¶h´MêhjW¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj;¶ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj·h]”hŒ Description”…”�”}”(hj!·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Mìhj;¶ubjM)�”}”(hŒÑAllocate **count** elements into **elems**. This is done by first calling into the alloc_fn supplied at pool initialization time, and dipping into the reserved pool when alloc_fn fails to allocate an element.”h]”(hŒ Allocate ”…”�”}”(hj5·h²hh³Nh´NubjŽ)�”}”(hŒ **count**”h]”hŒcount”…”�”}”(hj=·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj5·ubhŒ elements into ”…”�”}”(hj5·h²hh³Nh´NubjŽ)�”}”(hŒ **elems**”h]”hŒelems”…”�”}”(hjO·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj5·ubhŒ§. This is done by first calling into the alloc_fn supplied at pool initialization time, and dipping into the reserved pool when alloc_fn fails to allocate an element.”…”�”}”(hj5·h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Mëhj;¶ubjM)�”}”(hŒ@On return all **count** elements in **elems** will be populated.”h]”(hŒOn return all ”…”�”}”(hjh·h²hh³Nh´NubjŽ)�”}”(hŒ **count**”h]”hŒcount”…”�”}”(hjp·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjh·ubhŒ elements in ”…”�”}”(hjh·h²hh³Nh´NubjŽ)�”}”(hŒ **elems**”h]”hŒelems”…”�”}”(hj‚·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjh·ubhŒ will be populated.”…”�”}”(hjh·h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Mïhj;¶ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Mñhj;¶ubjM)�”}”(hŒCAlways 0. If it wasn't for %$#^$ alloc tags, it would return void.”h]”hŒEAlways 0. If it wasn’t for %$#^$ alloc tags, it would return void.”…”�”}”(hj³·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.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”]”(héŒmempool_alloc (C function)”Œc.mempool_alloc”hNt”auh1hÜhj§h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ;void * mempool_alloc (struct mempool *pool, gfp_t gfp_mask)”h]”hù)�”}”(hŒ9void *mempool_alloc(struct mempool *pool, gfp_t gfp_mask)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjâ·h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÞ·h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñ·h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÞ·h²hh³jð·h´MubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÿ·h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÞ·h²hh³jð·h´Mubhÿ)�”}”(hŒ mempool_alloc”h]”j)�”}”(hŒ mempool_alloc”h]”hŒ mempool_alloc”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ¸ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÞ·h²hh³jð·h´Mubj )�”}”(hŒ&(struct mempool *pool, gfp_t gfp_mask)”h]”(j )�”}”(hŒstruct mempool *pool”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj,¸h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj(¸ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9¸h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj(¸ubh)�”}”(hhh]”j)�”}”(hŒmempool”h]”hŒmempool”…”�”}”(hjJ¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjG¸ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jL¸Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj¸sbŒc.mempool_alloc”†”asbuh1hhj(¸ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj¸h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj(¸ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjx¸h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj(¸ubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hj…¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj(¸ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j 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 ]”jah"]”h$]”h&]”uh1jhjž¸ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j£¸Œmodname”NŒ classname”Njpjs)�”}”jv]”jf¸Œc.mempool_alloc”†”asbuh1hhjš¸ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿¸h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjš¸ubj)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hj͸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjš¸ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj$¸ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÞ·h²hh³jð·h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÚ·h²hh³jð·h´Mubah}”(h]”jÕ·ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jð·h´Mhj×·h²hubj4)�”}”(hhh]”jM)�”}”(hŒ&allocate an element from a memory pool”h]”hŒ&allocate an element from a memory pool”…”�”}”(hj÷¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Mhjô¸h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj×·h²hh³jð·h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¹jHj¹jI‰jJ‰jK‰uh1híh²hhj§h³Nh´Nubj„)�”}”(hXŸ**Parameters** ``struct mempool *pool`` pointer to the memory pool ``gfp_t gfp_mask`` GFP_* flags. ``__GFP_ZERO`` is not supported. **Description** Allocate an element from **pool**. This is done by first calling into the alloc_fn supplied at pool initialization time, and dipping into the reserved pool when alloc_fn fails to allocate an element. This function only sleeps if the alloc_fn callback sleeps, or when waiting for elements to become available in the pool. **Return** pointer to the allocated element or ``NULL`` when failing to allocate an element. Allocation failure can only happen when **gfp_mask** does not include ``__GFP_DIRECT_RECLAIM``.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¹h]”hŒ Parameters”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M#hj¹ubj¤)�”}”(hhh]”(j©)�”}”(hŒ4``struct mempool *pool`` pointer to the memory pool ”h]”(j¯)�”}”(hŒ``struct mempool *pool``”h]”jS)�”}”(hj8¹h]”hŒstruct mempool *pool”…”�”}”(hj:¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj6¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M hj2¹ubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to the memory pool”h]”hŒpointer to the memory pool”…”�”}”(hjQ¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jM¹h´M hjN¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj2¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jM¹h´M hj/¹ubj©)�”}”(hŒB``gfp_t gfp_mask`` GFP_* flags. ``__GFP_ZERO`` is not supported. ”h]”(j¯)�”}”(hŒ``gfp_t gfp_mask``”h]”jS)�”}”(hjq¹h]”hŒgfp_t gfp_mask”…”�”}”(hjs¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjo¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M!hjk¹ubjÉ)�”}”(hhh]”jM)�”}”(hŒ.GFP_* flags. ``__GFP_ZERO`` is not supported.”h]”(hŒGFP_* flags. ”…”�”}”(hjйh²hh³Nh´NubjS)�”}”(hŒ``__GFP_ZERO``”h]”hŒ __GFP_ZERO”…”�”}”(hj’¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjйubhŒ is not supported.”…”�”}”(hjйh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j†¹h´M!hj‡¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjk¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j†¹h´M!hj/¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¹ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj¾¹h]”hŒ Description”…”�”}”(hjÀ¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¼¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M#hj¹ubjM)�”}”(hŒÈAllocate an element from **pool**. This is done by first calling into the alloc_fn supplied at pool initialization time, and dipping into the reserved pool when alloc_fn fails to allocate an element.”h]”(hŒAllocate an element from ”…”�”}”(hjÔ¹h²hh³Nh´NubjŽ)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hjܹh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÔ¹ubhŒ§. This is done by first calling into the alloc_fn supplied at pool initialization time, and dipping into the reserved pool when alloc_fn fails to allocate an element.”…”�”}”(hjÔ¹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M"hj¹ubjM)�”}”(hŒxThis function only sleeps if the alloc_fn callback sleeps, or when waiting for elements to become available in the pool.”h]”hŒxThis function only sleeps if the alloc_fn callback sleeps, or when waiting for elements to become available in the pool.”…”�”}”(hjõ¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M&hj¹ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M)hj¹ubjM)�”}”(hŒ²pointer to the allocated element or ``NULL`` when failing to allocate an element. Allocation failure can only happen when **gfp_mask** does not include ``__GFP_DIRECT_RECLAIM``.”h]”(hŒ$pointer to the allocated element or ”…”�”}”(hjºh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj$ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjºubhŒO when failing to allocate an element. Allocation failure can only happen when ”…”�”}”(hjºh²hh³Nh´NubjŽ)�”}”(hŒ **gfp_mask**”h]”hŒgfp_mask”…”�”}”(hj6ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjºubhŒ does not include ”…”�”}”(hjºh²hh³Nh´NubjS)�”}”(hŒ``__GFP_DIRECT_RECLAIM``”h]”hŒ__GFP_DIRECT_RECLAIM”…”�”}”(hjHºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjºubhŒ.”…”�”}”(hjºh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.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”]”(héŒ'mempool_alloc_preallocated (C function)”Œc.mempool_alloc_preallocated”hNt”auh1hÜhj§h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ8void * mempool_alloc_preallocated (struct mempool *pool)”h]”hù)�”}”(hŒ6void *mempool_alloc_preallocated(struct mempool *pool)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj�ºh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj}ºh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´MWubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�ºh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj}ºh²hh³j�ºh´MWubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjžºh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj}ºh²hh³j�ºh´MWubhÿ)�”}”(hŒmempool_alloc_preallocated”h]”j)�”}”(hŒmempool_alloc_preallocated”h]”hŒmempool_alloc_preallocated”…”�”}”(hj¯ºh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj«ºubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj}ºh²hh³j�ºh´MWubj )�”}”(hŒ(struct mempool *pool)”h]”j )�”}”(hŒstruct mempool *pool”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj˺h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjǺubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjغh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjǺubh)�”}”(hhh]”j)�”}”(hŒmempool”h]”hŒmempool”…”�”}”(hjéºh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjæºubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j뺌modname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj±ºsbŒc.mempool_alloc_preallocated”†”asbuh1hhjǺubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj »h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjǺubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjǺubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hj$»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjǺubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjúubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj}ºh²hh³j�ºh´MWubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjyºh²hh³j�ºh´MWubah}”(h]”jtºah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j�ºh´MWhjvºh²hubj4)�”}”(hhh]”jM)�”}”(hŒIallocate an element from preallocated elements belonging to a memory pool”h]”hŒIallocate an element from preallocated elements belonging to a memory pool”…”�”}”(hjN»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´MWhjK»h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjvºh²hh³j�ºh´MWubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjf»jHjf»jI‰jJ‰jK‰uh1híh²hhj§h³Nh´Nubj„)�”}”(hXŒ**Parameters** ``struct mempool *pool`` pointer to the memory pool **Description** This function is similar to mempool_alloc(), but it only attempts allocating an element from the preallocated elements. It only takes a single spinlock_t and immediately returns if no preallocated elements are available. **Return** pointer to the allocated element or ``NULL`` if no elements are available.”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”•h´M[hjj»ubj¤)�”}”(hhh]”j©)�”}”(hŒ4``struct mempool *pool`` pointer to the memory pool ”h]”(j¯)�”}”(hŒ``struct mempool *pool``”h]”jS)�”}”(hj�»h]”hŒstruct mempool *pool”…”�”}”(hj‘»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´MYhj‰»ubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to the memory pool”h]”hŒpointer to the memory pool”…”�”}”(hj¨»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¤»h´MYhj¥»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‰»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¤»h´MYhj†»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjj»ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÊ»h]”hŒ Description”…”�”}”(hjÌ»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÈ»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M[hjj»ubjM)�”}”(hŒÜThis function is similar to mempool_alloc(), but it only attempts allocating an element from the preallocated elements. It only takes a single spinlock_t and immediately returns if no preallocated elements are available.”h]”hŒÜThis function is similar to mempool_alloc(), but it only attempts allocating an element from the preallocated elements. It only takes a single spinlock_t and immediately returns if no preallocated elements are available.”…”�”}”(hjà»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´MZhjj»ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M^hjj»ubjM)�”}”(hŒJpointer to the allocated element or ``NULL`` if no elements are available.”h]”(hŒ$pointer to the allocated element or ”…”�”}”(hj¼h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¼ubhŒ if no elements are available.”…”�”}”(hj¼h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´M_hjj»ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj§h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmempool_free_bulk (C function)”Œc.mempool_free_bulk”hNt”auh1hÜhj§h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒWunsigned int mempool_free_bulk (struct mempool *pool, void **elems, unsigned int count)”h]”hù)�”}”(hŒVunsigned int mempool_free_bulk(struct mempool *pool, void **elems, unsigned int count)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjH¼h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjD¼h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´MlubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW¼h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjD¼h²hh³jV¼h´Mlubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(hje¼h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjD¼h²hh³jV¼h´MlubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs¼h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjD¼h²hh³jV¼h´Mlubhÿ)�”}”(hŒmempool_free_bulk”h]”j)�”}”(hŒmempool_free_bulk”h]”hŒmempool_free_bulk”…”�”}”(hj…¼h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�¼ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjD¼h²hh³jV¼h´Mlubj )�”}”(hŒ8(struct mempool *pool, void **elems, unsigned int count)”h]”(j )�”}”(hŒstruct mempool *pool”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¡¼h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj�¼ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®¼h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�¼ubh)�”}”(hhh]”j)�”}”(hŒmempool”h]”hŒmempool”…”�”}”(hj¿¼h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¼¼ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÁ¼Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj‡¼sbŒc.mempool_free_bulk”†”asbuh1hhj�¼ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß¼h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�¼ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjí¼h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj�¼ubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hjú¼h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�¼ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj™¼ubj )�”}”(hŒ void **elems”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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½ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj/½h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj½ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj<½h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj½ubj)�”}”(hŒelems”h]”hŒelems”…”�”}”(hjI½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj½ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj™¼ubj )�”}”(hŒunsigned int count”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjb½h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj^½ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjp½h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj^½ubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(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^½ubj)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjš½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj^½ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj™¼ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjD¼h²hh³jV¼h´Mlubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj@¼h²hh³jV¼h´Mlubah}”(h]”j;¼ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jV¼h´Mlhj=¼h²hubj4)�”}”(hhh]”jM)�”}”(hŒreturn elements to a mempool”h]”hŒreturn elements to a mempool”…”�”}”(hjĽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´MlhjÁ½h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj=¼h²hh³jV¼h´Mlubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjܽjHjܽjI‰jJ‰jK‰uh1híh²hhj§h³Nh´Nubj„)�”}”(hXS**Parameters** ``struct mempool *pool`` pointer to the memory pool ``void **elems`` elements to return ``unsigned int count`` number of elements to return **Description** Returns a number of elements from the start of **elem** to **pool** if **pool** needs replenishing and sets their slots in **elem** to NULL. Other elements are left in **elem**. **Return** number of elements transferred to **pool**. Elements are always transferred from the beginning of **elem**, so the return value can be used as an offset into **elem** for the freeing the remaining elements in the caller.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjæ½h]”hŒ Parameters”…”�”}”(hjè½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjä½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Mphjà½ubj¤)�”}”(hhh]”(j©)�”}”(hŒ4``struct mempool *pool`` pointer to the memory pool ”h]”(j¯)�”}”(hŒ``struct mempool *pool``”h]”jS)�”}”(hj¾h]”hŒstruct mempool *pool”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Mmhjÿ½ubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to the memory pool”h]”hŒpointer to the memory pool”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¾h´Mmhj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÿ½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¾h´Mmhjü½ubj©)�”}”(hŒ$``void **elems`` elements to return ”h]”(j¯)�”}”(hŒ``void **elems``”h]”jS)�”}”(hj>¾h]”hŒ void **elems”…”�”}”(hj@¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj<¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Mnhj8¾ubjÉ)�”}”(hhh]”jM)�”}”(hŒelements to return”h]”hŒelements to return”…”�”}”(hjW¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jS¾h´MnhjT¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj8¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jS¾h´Mnhjü½ubj©)�”}”(hŒ4``unsigned int count`` number of elements to return ”h]”(j¯)�”}”(hŒ``unsigned int count``”h]”jS)�”}”(hjw¾h]”hŒunsigned int count”…”�”}”(hjy¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhju¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Mohjq¾ubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of elements to return”h]”hŒnumber of elements to return”…”�”}”(hj�¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jŒ¾h´Mohj�¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjq¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŒ¾h´Mohjü½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjà½ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj²¾h]”hŒ Description”…”�”}”(hj´¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj°¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Mqhjà½ubjM)�”}”(hŒ²Returns a number of elements from the start of **elem** to **pool** if **pool** needs replenishing and sets their slots in **elem** to NULL. Other elements are left in **elem**.”h]”(hŒ/Returns a number of elements from the start of ”…”�”}”(hjȾh²hh³Nh´NubjŽ)�”}”(hŒ**elem**”h]”hŒelem”…”�”}”(hjоh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjȾubhŒ to ”…”�”}”(hjȾh²hh³Nh´NubjŽ)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hjâ¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjȾubhŒ if ”…”�”}”(hjȾh²hh³Nh´NubjŽ)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hjô¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjȾubhŒ, needs replenishing and sets their slots in ”…”�”}”(hjȾh²hh³Nh´NubjŽ)�”}”(hŒ**elem**”h]”hŒelem”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjȾubhŒ& to NULL. Other elements are left in ”…”�”}”(hjȾh²hh³Nh´NubjŽ)�”}”(hŒ**elem**”h]”hŒelem”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjȾubhŒ.”…”�”}”(hjȾh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Mphjà½ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Mthjà½ubjM)�”}”(hŒÝnumber of elements transferred to **pool**. Elements are always transferred from the beginning of **elem**, so the return value can be used as an offset into **elem** for the freeing the remaining elements in the caller.”h]”(hŒ"number of elements transferred to ”…”�”}”(hjI¿h²hh³Nh´NubjŽ)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hjQ¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjI¿ubhŒ9. Elements are always transferred from the beginning of ”…”�”}”(hjI¿h²hh³Nh´NubjŽ)�”}”(hŒ**elem**”h]”hŒelem”…”�”}”(hjc¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjI¿ubhŒ4, so the return value can be used as an offset into ”…”�”}”(hjI¿h²hh³Nh´NubjŽ)�”}”(hŒ**elem**”h]”hŒelem”…”�”}”(hju¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjI¿ubhŒ6 for the freeing the remaining elements in the caller.”…”�”}”(hjI¿h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´Muhjà½ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj§h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmempool_free (C function)”Œc.mempool_free”hNt”auh1hÜhj§h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ7void mempool_free (void *element, struct mempool *pool)”h]”hù)�”}”(hŒ6void mempool_free(void *element, struct mempool *pool)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj®¿h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjª¿h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´MÁubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½¿h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjª¿h²hh³j¼¿h´MÁubhÿ)�”}”(hŒ mempool_free”h]”j)�”}”(hŒ mempool_free”h]”hŒ mempool_free”…”�”}”(hjÏ¿h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjË¿ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjª¿h²hh³j¼¿h´MÁubj )�”}”(hŒ%(void *element, struct mempool *pool)”h]”(j )�”}”(hŒ void *element”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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ç¿ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjç¿ubj)�”}”(hŒelement”h]”hŒelement”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjç¿ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjã¿ubj )�”}”(hŒstruct mempool *pool”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj-Àh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj)ÀubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:Àh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj)Àubh)�”}”(hhh]”j)�”}”(hŒmempool”h]”hŒmempool”…”�”}”(hjKÀh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjHÀubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jMÀŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÑ¿sbŒc.mempool_free”†”asbuh1hhj)ÀubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkÀh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj)ÀubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjyÀh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj)Àubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hj†Àh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj)Àubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjã¿ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjª¿h²hh³j¼¿h´MÁubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¦¿h²hh³j¼¿h´MÁubah}”(h]”j¡¿ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¼¿h´MÁhj£¿h²hubj4)�”}”(hhh]”jM)�”}”(hŒreturn an element to the pool.”h]”hŒreturn an element to the pool.”…”�”}”(hj°Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´MÁhj­Àh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj£¿h²hh³j¼¿h´MÁubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÈÀjHjÈÀjI‰jJ‰jK‰uh1híh²hhj§h³Nh´Nubj„)�”}”(hX)**Parameters** ``void *element`` element to return ``struct mempool *pool`` pointer to the memory pool **Description** Returns **element** to **pool** if it needs replenishing, else frees it using the free_fn callback in **pool**. This function only sleeps if the free_fn callback sleeps.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÒÀh]”hŒ Parameters”…”�”}”(hjÔÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÐÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´MÅhjÌÀubj¤)�”}”(hhh]”(j©)�”}”(hŒ$``void *element`` element to return ”h]”(j¯)�”}”(hŒ``void *element``”h]”jS)�”}”(hjñÀh]”hŒ void *element”…”�”}”(hjóÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjïÀubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´MÂhjëÀubjÉ)�”}”(hhh]”jM)�”}”(hŒelement to return”h]”hŒelement to return”…”�”}”(hj Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÁh´MÂhjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjëÀubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÁh´MÂhjèÀubj©)�”}”(hŒ4``struct mempool *pool`` pointer to the memory pool ”h]”(j¯)�”}”(hŒ``struct mempool *pool``”h]”jS)�”}”(hj*Áh]”hŒstruct mempool *pool”…”�”}”(hj,Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj(Áubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´MÃhj$ÁubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to the memory pool”h]”hŒpointer to the memory pool”…”�”}”(hjCÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j?Áh´MÃhj@Áubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj$Áubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j?Áh´MÃhjèÀubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÌÀubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´MÅhjÌÀubjM)�”}”(hŒoReturns **element** to **pool** if it needs replenishing, else frees it using the free_fn callback in **pool**.”h]”(hŒReturns ”…”�”}”(hj{Áh²hh³Nh´NubjŽ)�”}”(hŒ **element**”h]”hŒelement”…”�”}”(hjƒÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj{ÁubhŒ to ”…”�”}”(hj{Áh²hh³Nh´NubjŽ)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hj•Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj{ÁubhŒG if it needs replenishing, else frees it using the free_fn callback in ”…”�”}”(hj{Áh²hh³Nh´NubjŽ)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hj§Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj{ÁubhŒ.”…”�”}”(hj{Áh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´MÄhjÌÀubjM)�”}”(hŒ9This function only sleeps if the free_fn callback sleeps.”h]”hŒ9This function only sleeps if the free_fn callback sleeps.”…”�”}”(hjÀÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:92: ./mm/mempool.c”h´MÇhjÌÀubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj§h²hh³Nh´Nubeh}”(h]”Œ memory-pools”ah ]”h"]”Œ memory pools”ah$]”h&]”uh1hµhh·h²hh³hÊh´KZubh¶)�”}”(hhh]”(h»)�”}”(hŒ More Memory Management Functions”h]”hŒ More Memory Management 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”]”(héŒ"zap_special_vma_range (C function)”Œc.zap_special_vma_range”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒbvoid zap_special_vma_range (struct vm_area_struct *vma, unsigned long address, unsigned long size)”h]”hù)�”}”(hŒavoid zap_special_vma_range(struct vm_area_struct *vma, unsigned long address, unsigned long size)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÂh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MO ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÂh²hh³jÂh´MO ubhÿ)�”}”(hŒzap_special_vma_range”h]”j)�”}”(hŒzap_special_vma_range”h]”hŒzap_special_vma_range”…”�”}”(hj)Âh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj%Âubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÂh²hh³jÂh´MO ubj )�”}”(hŒG(struct vm_area_struct *vma, unsigned long address, unsigned long size)”h]”(j )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjEÂh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjAÂubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRÂh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjAÂubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjcÂh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj`Âubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jeÂŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj+ÂsbŒc.zap_special_vma_range”†”asbuh1hhjAÂubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒÂh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjAÂubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj‘Âh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjAÂubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjžÂh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjAÂubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj=Âubj )�”}”(hŒunsigned long address”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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³Âubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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³Âubj)�”}”(hŒaddress”h]”hŒaddress”…”�”}”(hjïÂh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj³Âubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj=Âubj )�”}”(hŒunsigned long size”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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Ãubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj$Ãh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÃubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2Ã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 ]”jah"]”h$]”h&]”uh1jhjÃubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj=Âubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÂh²hh³jÂh´MO ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÂh²hh³jÂh´MO ubah}”(h]”jûÁah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÂh´MO hjýÁh²hubj4)�”}”(hhh]”jM)�”}”(hŒ1zap all page table entries in a special vma range”h]”hŒ1zap all page table entries in a special vma range”…”�”}”(hjjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MO hjgÃh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjýÁh²hh³jÂh´MO ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj‚ÃjHj‚ÃjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXj**Parameters** ``struct vm_area_struct *vma`` the vma covering the range to zap ``unsigned long address`` starting address of the range to zap ``unsigned long size`` number of bytes to zap **Description** This function does nothing when the provided address range is not fully contained in **vma**, or when the **vma** is not VM_PFNMAP or VM_MIXEDMAP.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjŒÃh]”hŒ Parameters”…”�”}”(hjŽÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŠÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MS hj†Ãubj¤)�”}”(hhh]”(j©)�”}”(hŒA``struct vm_area_struct *vma`` the vma covering the range to zap ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hj«Ãh]”hŒstruct vm_area_struct *vma”…”�”}”(hj­Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj©Ãubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MP hj¥ÃubjÉ)�”}”(hhh]”jM)�”}”(hŒ!the vma covering the range to zap”h]”hŒ!the vma covering the range to zap”…”�”}”(hjÄÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÀÃh´MP hjÁÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¥Ãubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÀÃh´MP hj¢Ãubj©)�”}”(hŒ?``unsigned long address`` starting address of the range to zap ”h]”(j¯)�”}”(hŒ``unsigned long address``”h]”jS)�”}”(hjäÃh]”hŒunsigned long address”…”�”}”(hjæÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjâÃubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MQ hjÞÃubjÉ)�”}”(hhh]”jM)�”}”(hŒ$starting address of the range to zap”h]”hŒ$starting address of the range to zap”…”�”}”(hjýÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jùÃh´MQ hjúÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÞÃubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jùÃh´MQ hj¢Ãubj©)�”}”(hŒ.``unsigned long size`` number of bytes to zap ”h]”(j¯)�”}”(hŒ``unsigned long size``”h]”jS)�”}”(hjÄh]”hŒunsigned long size”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MR hjÄubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of bytes to zap”h]”hŒnumber of bytes to zap”…”�”}”(hj6Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j2Äh´MR hj3Äubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j2Äh´MR hj¢Ãubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj†ÃubjM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MT hj†ÃubjM)�”}”(hŒ’This function does nothing when the provided address range is not fully contained in **vma**, or when the **vma** is not VM_PFNMAP or VM_MIXEDMAP.”h]”(hŒUThis function does nothing when the provided address range is not fully contained in ”…”�”}”(hjnÄh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjvÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjnÄubhŒ, or when the ”…”�”}”(hjnÄh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjˆÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjnÄubhŒ! is not VM_PFNMAP or VM_MIXEDMAP.”…”�”}”(hjnÄh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MS hj†Ãubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvm_insert_pages (C function)”Œc.vm_insert_pages”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒmint vm_insert_pages (struct vm_area_struct *vma, unsigned long addr, struct page **pages, unsigned long *num)”h]”hù)�”}”(hŒlint vm_insert_pages(struct vm_area_struct *vma, unsigned long addr, struct page **pages, unsigned long *num)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjÁÄh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj½Äh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M9 ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐÄh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj½Äh²hh³jÏÄh´M9 ubhÿ)�”}”(hŒvm_insert_pages”h]”j)�”}”(hŒvm_insert_pages”h]”hŒvm_insert_pages”…”�”}”(hjâÄh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÞÄubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj½Äh²hh³jÏÄh´M9 ubj )�”}”(hŒY(struct vm_area_struct *vma, unsigned long addr, struct page **pages, unsigned long *num)”h]”(j )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjþÄh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjúÄubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Åh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjúÄubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÅubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÅŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljäÄsbŒc.vm_insert_pages”†”asbuh1hhjúÄubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<Åh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjúÄubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjJÅh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjúÄubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjWÅh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjúÄubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjöÄubj )�”}”(hŒunsigned long addr”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjpÅh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjlÅubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~Åh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjlÅubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjŒÅh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjlÅubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšÅh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjlÅubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj¨Åh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjlÅubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjöÄubj )�”}”(hŒstruct page **pages”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÁÅh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj½ÅubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎÅh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj½Åubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjßÅh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÜÅubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jáÅŒmodname”NŒ classname”Njpjs)�”}”jv]”j8ÅŒc.vm_insert_pages”†”asbuh1hhj½ÅubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýÅh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj½ÅubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj Æh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj½ÅubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj½Åubj)�”}”(hŒpages”h]”hŒpages”…”�”}”(hj%Æh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj½Åubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjöÄubj )�”}”(hŒunsigned long *num”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj>Æh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj:ÆubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLÆh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj:Æubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjZÆh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj:ÆubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhÆh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj:ÆubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjvÆh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj:Æubj)�”}”(hŒnum”h]”hŒnum”…”�”}”(hjƒÆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj:Æubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjöÄubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj½Äh²hh³jÏÄh´M9 ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¹Äh²hh³jÏÄh´M9 ubah}”(h]”j´Äah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÏÄh´M9 hj¶Äh²hubj4)�”}”(hhh]”jM)�”}”(hŒ;insert multiple pages into user vma, batching the pmd lock.”h]”hŒ;insert multiple pages into user vma, batching the pmd lock.”…”�”}”(hj­Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M9 hjªÆh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¶Äh²hh³jÏÄh´M9 ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÅÆjHjÅÆjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXP**Parameters** ``struct vm_area_struct *vma`` user vma to map to ``unsigned long addr`` target start user address of these pages ``struct page **pages`` source kernel pages ``unsigned long *num`` in: number of pages to map. out: number of pages that were *not* mapped. (0 means all pages were successfully mapped). **Description** Preferred over vm_insert_page() when inserting multiple pages. In case of error, we may have mapped a subset of the provided pages. It is the caller's responsibility to account for this case. The same restrictions apply as in vm_insert_page().”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÏÆh]”hŒ Parameters”…”�”}”(hjÑÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÍÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M= hjÉÆubj¤)�”}”(hhh]”(j©)�”}”(hŒ2``struct vm_area_struct *vma`` user vma to map to ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hjîÆh]”hŒstruct vm_area_struct *vma”…”�”}”(hjðÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjìÆubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M: hjèÆubjÉ)�”}”(hhh]”jM)�”}”(hŒuser vma to map to”h]”hŒuser vma to map to”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÇh´M: hjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjèÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÇh´M: hjåÆubj©)�”}”(hŒ@``unsigned long addr`` target start user address of these pages ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hj'Çh]”hŒunsigned long addr”…”�”}”(hj)Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj%Çubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M; hj!ÇubjÉ)�”}”(hhh]”jM)�”}”(hŒ(target start user address of these pages”h]”hŒ(target start user address of these pages”…”�”}”(hj@Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j<Çh´M; hj=Çubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj!Çubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j<Çh´M; hjåÆubj©)�”}”(hŒ,``struct page **pages`` source kernel pages ”h]”(j¯)�”}”(hŒ``struct page **pages``”h]”jS)�”}”(hj`Çh]”hŒstruct page **pages”…”�”}”(hjbÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj^Çubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M< hjZÇubjÉ)�”}”(hhh]”jM)�”}”(hŒsource kernel pages”h]”hŒsource kernel pages”…”�”}”(hjyÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³juÇh´M< hjvÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjZÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³juÇh´M< hjåÆubj©)�”}”(hŒŽ``unsigned long *num`` in: number of pages to map. out: number of pages that were *not* mapped. (0 means all pages were successfully mapped). ”h]”(j¯)�”}”(hŒ``unsigned long *num``”h]”jS)�”}”(hj™Çh]”hŒunsigned long *num”…”�”}”(hj›Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj—Çubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M> hj“ÇubjÉ)�”}”(hhh]”jM)�”}”(hŒvin: number of pages to map. out: number of pages that were *not* mapped. (0 means all pages were successfully mapped).”h]”(hŒ;in: number of pages to map. out: number of pages that were ”…”�”}”(hj²Çh²hh³Nh´NubjB)�”}”(hŒ*not*”h]”hŒnot”…”�”}”(hjºÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhj²ÇubhŒ6 mapped. (0 means all pages were successfully mapped).”…”�”}”(hj²Çh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M= hj¯Çubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj“Çubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j®Çh´M> hjåÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÉÆubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjçÇh]”hŒ Description”…”�”}”(hjéÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjåÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M@ hjÉÆubjM)�”}”(hŒ>Preferred over vm_insert_page() when inserting multiple pages.”h]”hŒ>Preferred over vm_insert_page() when inserting multiple pages.”…”�”}”(hjýÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M? hjÉÆubjM)�”}”(hŒ€In case of error, we may have mapped a subset of the provided pages. It is the caller's responsibility to account for this case.”h]”hŒ‚In case of error, we may have mapped a subset of the provided pages. It is the caller’s responsibility to account for this case.”…”�”}”(hj Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MA hjÉÆubjM)�”}”(hŒ3The same restrictions apply as in vm_insert_page().”h]”hŒ3The same restrictions apply as in vm_insert_page().”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.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”]”(héŒvm_insert_page (C function)”Œc.vm_insert_page”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒVint vm_insert_page (struct vm_area_struct *vma, unsigned long addr, struct page *page)”h]”hù)�”}”(hŒUint vm_insert_page(struct vm_area_struct *vma, unsigned long addr, struct page *page)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjJÈh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjFÈh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M{ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYÈh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjFÈh²hh³jXÈh´M{ ubhÿ)�”}”(hŒvm_insert_page”h]”j)�”}”(hŒvm_insert_page”h]”hŒvm_insert_page”…”�”}”(hjkÈh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjgÈubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjFÈh²hh³jXÈh´M{ ubj )�”}”(hŒC(struct vm_area_struct *vma, unsigned long addr, struct page *page)”h]”(j )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj‡Èh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjƒÈubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”Èh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjƒÈubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj¥Èh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¢Èubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j§ÈŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljmÈsbŒc.vm_insert_page”†”asbuh1hhjƒÈubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅÈh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjƒÈubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÓÈh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjƒÈubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjàÈh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjƒÈubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÈubj )�”}”(hŒunsigned long addr”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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õÈubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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õÈubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj1Éh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjõÈubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÈubj )�”}”(hŒstruct page *page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjJÉh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjFÉubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWÉh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjFÉubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjhÉh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjeÉubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jjÉŒmodname”NŒ classname”Njpjs)�”}”jv]”jÁÈŒc.vm_insert_page”†”asbuh1hhjFÉubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†Éh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjFÉubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj”Éh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjFÉubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj¡Éh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjFÉubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÈubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjFÈh²hh³jXÈh´M{ ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjBÈh²hh³jXÈh´M{ ubah}”(h]”j=Èah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jXÈh´M{ hj?Èh²hubj4)�”}”(hhh]”jM)�”}”(hŒ insert single page into user vma”h]”hŒ insert single page into user vma”…”�”}”(hjËÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M{ hjÈÉh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj?Èh²hh³jXÈh´M{ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjãÉjHjãÉjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX®**Parameters** ``struct vm_area_struct *vma`` user vma to map to ``unsigned long addr`` target user address of this page ``struct page *page`` source kernel page **Description** This allows drivers to insert individual pages they've allocated into a user vma. The zeropage is supported in some VMAs, see vm_mixed_zeropage_allowed(). The page has to be a nice clean _individual_ kernel allocation. If you allocate a compound page, you need to have marked it as such (__GFP_COMP), or manually just split the page up yourself (see split_page()). NOTE! Traditionally this was done with "remap_pfn_range()" which took an arbitrary page protection parameter. This doesn't allow that. Your vma protection will have to be set up correctly, which means that if you want a shared writable mapping, you'd better ask for a shared writable mapping! The page does not need to be reserved. Usually this function is called from f_op->mmap() handler under mm->mmap_lock write-lock, so it can change vma->vm_flags. Caller must set VM_MIXEDMAP on vma if it wants to call this function from other places, for example from page-fault handler. **Return** ``0`` on success, negative error code otherwise.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjíÉh]”hŒ Parameters”…”�”}”(hjïÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjëÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M hjçÉubj¤)�”}”(hhh]”(j©)�”}”(hŒ2``struct vm_area_struct *vma`` user vma to map to ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hj Êh]”hŒstruct vm_area_struct *vma”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj Êubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M| hjÊubjÉ)�”}”(hhh]”jM)�”}”(hŒuser vma to map to”h]”hŒuser vma to map to”…”�”}”(hj%Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j!Êh´M| hj"Êubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÊubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j!Êh´M| hjÊubj©)�”}”(hŒ8``unsigned long addr`` target user address of this page ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hjEÊh]”hŒunsigned long addr”…”�”}”(hjGÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjCÊubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M} hj?ÊubjÉ)�”}”(hhh]”jM)�”}”(hŒ target user address of this page”h]”hŒ target user address of this page”…”�”}”(hj^Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jZÊh´M} hj[Êubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj?Êubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jZÊh´M} hjÊubj©)�”}”(hŒ)``struct page *page`` source kernel page ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hj~Êh]”hŒstruct page *page”…”�”}”(hj€Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj|Êubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M~ hjxÊubjÉ)�”}”(hhh]”jM)�”}”(hŒsource kernel page”h]”hŒsource kernel page”…”�”}”(hj—Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j“Êh´M~ hj”Êubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjxÊubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j“Êh´M~ hjÊubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjçÉubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj¹Êh]”hŒ Description”…”�”}”(hj»Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj·Êubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M€ hjçÉubjM)�”}”(hŒšThis allows drivers to insert individual pages they've allocated into a user vma. The zeropage is supported in some VMAs, see vm_mixed_zeropage_allowed().”h]”hŒœThis allows drivers to insert individual pages they’ve allocated into a user vma. The zeropage is supported in some VMAs, see vm_mixed_zeropage_allowed().”…”�”}”(hjÏÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M hjçÉubjM)�”}”(hŒÑThe page has to be a nice clean _individual_ kernel allocation. If you allocate a compound page, you need to have marked it as such (__GFP_COMP), or manually just split the page up yourself (see split_page()).”h]”hŒÑThe page has to be a nice clean _individual_ kernel allocation. If you allocate a compound page, you need to have marked it as such (__GFP_COMP), or manually just split the page up yourself (see split_page()).”…”�”}”(hjÞÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mƒ hjçÉubjM)�”}”(hX$NOTE! Traditionally this was done with "remap_pfn_range()" which took an arbitrary page protection parameter. This doesn't allow that. Your vma protection will have to be set up correctly, which means that if you want a shared writable mapping, you'd better ask for a shared writable mapping!”h]”hX,NOTE! Traditionally this was done with “remap_pfn_range()â€� which took an arbitrary page protection parameter. This doesn’t allow that. Your vma protection will have to be set up correctly, which means that if you want a shared writable mapping, you’d better ask for a shared writable mapping!”…”�”}”(hjíÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mˆ hjçÉubjM)�”}”(hŒ&The page does not need to be reserved.”h]”hŒ&The page does not need to be reserved.”…”�”}”(hjüÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MŽ hjçÉubjM)�”}”(hŒöUsually this function is called from f_op->mmap() handler under mm->mmap_lock write-lock, so it can change vma->vm_flags. Caller must set VM_MIXEDMAP on vma if it wants to call this function from other places, for example from page-fault handler.”h]”hŒöUsually this function is called from f_op->mmap() handler under mm->mmap_lock write-lock, so it can change vma->vm_flags. Caller must set VM_MIXEDMAP on vma if it wants to call this function from other places, for example from page-fault handler.”…”�”}”(hj Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M� hjçÉubjM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M• hjçÉubjM)�”}”(hŒ0``0`` on success, negative error code otherwise.”h]”(jS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hj6Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj2ËubhŒ+ on success, negative error code otherwise.”…”�”}”(hj2Ëh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.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”]”(héŒvm_map_pages (C function)”Œc.vm_map_pages”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒUint vm_map_pages (struct vm_area_struct *vma, struct page **pages, unsigned long num)”h]”hù)�”}”(hŒTint vm_map_pages(struct vm_area_struct *vma, struct page **pages, unsigned long num)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjoËh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjkËh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MÅ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~Ëh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjkËh²hh³j}Ëh´MÅ ubhÿ)�”}”(hŒ vm_map_pages”h]”j)�”}”(hŒ vm_map_pages”h]”hŒ vm_map_pages”…”�”}”(hj�Ëh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŒËubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjkËh²hh³j}Ëh´MÅ ubj )�”}”(hŒD(struct vm_area_struct *vma, struct page **pages, unsigned long num)”h]”(j )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¬Ëh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¨ËubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹Ëh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¨Ëubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjÊËh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÇËubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÌËŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj’ËsbŒc.vm_map_pages”†”asbuh1hhj¨ËubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêËh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¨ËubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjøËh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¨Ëubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¨Ëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¤Ëubj )�”}”(hŒstruct page **pages”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÌubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+Ìh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÌubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj<Ìh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj9Ìubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j>ÌŒmodname”NŒ classname”Njpjs)�”}”jv]”jæËŒc.vm_map_pages”†”asbuh1hhjÌubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZÌh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÌubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjhÌh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÌubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjuÌh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÌubj)�”}”(hŒpages”h]”hŒpages”…”�”}”(hj‚Ìh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÌubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¤Ëubj )�”}”(hŒunsigned long num”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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—Ìubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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—Ìubj)�”}”(hŒnum”h]”hŒnum”…”�”}”(hjÓÌh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj—Ìubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¤Ëubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjkËh²hh³j}Ëh´MÅ ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjgËh²hh³j}Ëh´MÅ ubah}”(h]”jbËah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j}Ëh´MÅ hjdËh²hubj4)�”}”(hhh]”jM)�”}”(hŒ6maps range of kernel pages starts with non zero offset”h]”hŒ6maps range of kernel pages starts with non zero offset”…”�”}”(hjýÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MÅ hjúÌh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjdËh²hh³j}Ëh´MÅ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÍjHjÍjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXð**Parameters** ``struct vm_area_struct *vma`` user vma to map to ``struct page **pages`` pointer to array of source kernel pages ``unsigned long num`` number of pages in page array **Description** Maps an object consisting of **num** pages, catering for the user's requested vm_pgoff If we fail to insert any page into the vma, the function will return immediately leaving any previously inserted pages present. Callers from the mmap handler may immediately return the error as their caller will destroy the vma, removing any successfully inserted pages. Other callers should make their own arrangements for calling unmap_region(). **Context** Process context. Called by mmap handlers. **Return** 0 on success and error code otherwise.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÍh]”hŒ Parameters”…”�”}”(hj!Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MÉ hjÍubj¤)�”}”(hhh]”(j©)�”}”(hŒ2``struct vm_area_struct *vma`` user vma to map to ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hj>Íh]”hŒstruct vm_area_struct *vma”…”�”}”(hj@Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj<Íubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MÆ hj8ÍubjÉ)�”}”(hhh]”jM)�”}”(hŒuser vma to map to”h]”hŒuser vma to map to”…”�”}”(hjWÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jSÍh´MÆ hjTÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj8Íubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jSÍh´MÆ hj5Íubj©)�”}”(hŒ@``struct page **pages`` pointer to array of source kernel pages ”h]”(j¯)�”}”(hŒ``struct page **pages``”h]”jS)�”}”(hjwÍh]”hŒstruct page **pages”…”�”}”(hjyÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjuÍubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MÇ hjqÍubjÉ)�”}”(hhh]”jM)�”}”(hŒ'pointer to array of source kernel pages”h]”hŒ'pointer to array of source kernel pages”…”�”}”(hj�Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jŒÍh´MÇ hj�Íubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjqÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŒÍh´MÇ hj5Íubj©)�”}”(hŒ4``unsigned long num`` number of pages in page array ”h]”(j¯)�”}”(hŒ``unsigned long num``”h]”jS)�”}”(hj°Íh]”hŒunsigned long num”…”�”}”(hj²Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj®Íubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MÈ hjªÍubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages in page array”h]”hŒnumber of pages in page array”…”�”}”(hjÉÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÅÍh´MÈ hjÆÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjªÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÅÍh´MÈ hj5Íubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÍubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjëÍh]”hŒ Description”…”�”}”(hjíÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjéÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MÊ hjÍubjM)�”}”(hŒVMaps an object consisting of **num** pages, catering for the user's requested vm_pgoff”h]”(hŒMaps an object consisting of ”…”�”}”(hjÎh²hh³Nh´NubjŽ)�”}”(hŒ**num**”h]”hŒnum”…”�”}”(hj Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÎubhŒ4 pages, catering for the user’s requested vm_pgoff”…”�”}”(hjÎh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MÉ hjÍubjM)�”}”(hX\If we fail to insert any page into the vma, the function will return immediately leaving any previously inserted pages present. Callers from the mmap handler may immediately return the error as their caller will destroy the vma, removing any successfully inserted pages. Other callers should make their own arrangements for calling unmap_region().”h]”hX\If we fail to insert any page into the vma, the function will return immediately leaving any previously inserted pages present. Callers from the mmap handler may immediately return the error as their caller will destroy the vma, removing any successfully inserted pages. Other callers should make their own arrangements for calling unmap_region().”…”�”}”(hj"Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MÌ hjÍubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hj3Îh]”hŒContext”…”�”}”(hj5Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj1Îubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MÒ hjÍubjM)�”}”(hŒ)Process context. Called by mmap handlers.”h]”hŒ)Process context. Called by mmap handlers.”…”�”}”(hjIÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MÓ hjÍubjM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MÕ hjÍubjM)�”}”(hŒ&0 on success and error code otherwise.”h]”hŒ&0 on success and error code otherwise.”…”�”}”(hjpÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.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”]”(héŒvm_map_pages_zero (C function)”Œc.vm_map_pages_zero”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒZint vm_map_pages_zero (struct vm_area_struct *vma, struct page **pages, unsigned long num)”h]”hù)�”}”(hŒYint vm_map_pages_zero(struct vm_area_struct *vma, struct page **pages, unsigned long num)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjŸÎh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj›Îh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MÞ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®Îh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj›Îh²hh³j­Îh´MÞ ubhÿ)�”}”(hŒvm_map_pages_zero”h]”j)�”}”(hŒvm_map_pages_zero”h]”hŒvm_map_pages_zero”…”�”}”(hjÀÎh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¼Îubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj›Îh²hh³j­Îh´MÞ ubj )�”}”(hŒD(struct vm_area_struct *vma, struct page **pages, unsigned long num)”h]”(j )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÜÎh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjØÎubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéÎh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjØÎubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjúÎh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj÷Îubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jüÎŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÂÎsbŒc.vm_map_pages_zero”†”asbuh1hhjØÎubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjØÎubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj(Ïh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjØÎubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hj5Ïh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjØÎubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÔÎubj )�”}”(hŒstruct page **pages”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjNÏh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjJÏubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[Ïh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjJÏubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjlÏh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjiÏubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jnÏŒmodname”NŒ classname”Njpjs)�”}”jv]”jÏŒc.vm_map_pages_zero”†”asbuh1hhjJÏubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠÏh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjJÏubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj˜Ïh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjJÏubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¥Ïh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjJÏubj)�”}”(hŒpages”h]”hŒpages”…”�”}”(hj²Ïh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjJÏubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÔÎubj )�”}”(hŒunsigned long num”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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ÇÏubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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ÇÏubj)�”}”(hŒnum”h]”hŒnum”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÇÏubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÔÎubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj›Îh²hh³j­Îh´MÞ ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj—Îh²hh³j­Îh´MÞ ubah}”(h]”j’Îah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j­Îh´MÞ hj”Îh²hubj4)�”}”(hhh]”jM)�”}”(hŒ1map range of kernel pages starts with zero offset”h]”hŒ1map range of kernel pages starts with zero offset”…”�”}”(hj-Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MÞ hj*Ðh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj”Îh²hh³j­Îh´MÞ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjEÐjHjEÐjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXÐ**Parameters** ``struct vm_area_struct *vma`` user vma to map to ``struct page **pages`` pointer to array of source kernel pages ``unsigned long num`` number of pages in page array **Description** Similar to vm_map_pages(), except that it explicitly sets the offset to 0. This function is intended for the drivers that did not consider vm_pgoff. **Context** Process context. Called by mmap handlers. **Return** 0 on success and error code otherwise.”h]”(jM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mâ hjIÐubj¤)�”}”(hhh]”(j©)�”}”(hŒ2``struct vm_area_struct *vma`` user vma to map to ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hjnÐh]”hŒstruct vm_area_struct *vma”…”�”}”(hjpÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjlÐubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mß hjhÐubjÉ)�”}”(hhh]”jM)�”}”(hŒuser vma to map to”h]”hŒuser vma to map to”…”�”}”(hj‡Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jƒÐh´Mß hj„Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjhÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jƒÐh´Mß hjeÐubj©)�”}”(hŒ@``struct page **pages`` pointer to array of source kernel pages ”h]”(j¯)�”}”(hŒ``struct page **pages``”h]”jS)�”}”(hj§Ðh]”hŒstruct page **pages”…”�”}”(hj©Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¥Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mà hj¡ÐubjÉ)�”}”(hhh]”jM)�”}”(hŒ'pointer to array of source kernel pages”h]”hŒ'pointer to array of source kernel pages”…”�”}”(hjÀÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¼Ðh´Mà hj½Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¡Ðubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¼Ðh´Mà hjeÐubj©)�”}”(hŒ4``unsigned long num`` number of pages in page array ”h]”(j¯)�”}”(hŒ``unsigned long num``”h]”jS)�”}”(hjàÐh]”hŒunsigned long num”…”�”}”(hjâÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÞÐubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Má hjÚÐubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages in page array”h]”hŒnumber of pages in page array”…”�”}”(hjùÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jõÐh´Má hjöÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÚÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨•h³jõÐh´Má hjeÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjIÐubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÑh]”hŒ Description”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mã hjIÐubjM)�”}”(hŒ”Similar to vm_map_pages(), except that it explicitly sets the offset to 0. This function is intended for the drivers that did not consider vm_pgoff.”h]”hŒ”Similar to vm_map_pages(), except that it explicitly sets the offset to 0. This function is intended for the drivers that did not consider vm_pgoff.”…”�”}”(hj1Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mâ hjIÐubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjBÑh]”hŒContext”…”�”}”(hjDÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj@Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mæ hjIÐubjM)�”}”(hŒ)Process context. Called by mmap handlers.”h]”hŒ)Process context. Called by mmap handlers.”…”�”}”(hjXÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mç hjIÐubjM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mé hjIÐubjM)�”}”(hŒ&0 on success and error code otherwise.”h]”hŒ&0 on success and error code otherwise.”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mè hjIÐubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ vmf_insert_pfn_prot (C function)”Œc.vmf_insert_pfn_prot”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒsvm_fault_t vmf_insert_pfn_prot (struct vm_area_struct *vma, unsigned long addr, unsigned long pfn, pgprot_t pgprot)”h]”hù)�”}”(hŒrvm_fault_t vmf_insert_pfn_prot(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn, pgprot_t pgprot)”h]”(h)�”}”(hhh]”j)�”}”(hŒ vm_fault_t”h]”hŒ vm_fault_t”…”�”}”(hj±Ñh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj®Ñubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j³ÑŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒvmf_insert_pfn_prot”sbŒc.vmf_insert_pfn_prot”†”asbuh1hhjªÑh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M% ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓÑh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjªÑh²hh³jÒÑh´M% ubhÿ)�”}”(hŒvmf_insert_pfn_prot”h]”j)�”}”(hjÏÑh]”hŒvmf_insert_pfn_prot”…”�”}”(hjåÑh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjáÑubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjªÑh²hh³jÒÑh´M% ubj )�”}”(hŒT(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn, pgprot_t pgprot)”h]”(j )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjüÑubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Òh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjüÑubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j ÒŒmodname”NŒ classname”Njpjs)�”}”jv]”jÍÑŒc.vmf_insert_pfn_prot”†”asbuh1hhjüÑubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<Òh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjüÑubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjJÒh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjüÑubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjWÒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjüÑubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjøÑubj )�”}”(hŒunsigned long addr”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjpÒh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjlÒubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~Òh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjlÒubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjŒÒh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjlÒubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšÒh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjlÒubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj¨Òh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjlÒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjøÑubj )�”}”(hŒunsigned long pfn”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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½Òubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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½Òubj)�”}”(hŒpfn”h]”hŒpfn”…”�”}”(hjùÒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj½Òubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjøÑubj )�”}”(hŒpgprot_t pgprot”h]”(h)�”}”(hhh]”j)�”}”(hŒpgprot_t”h]”hŒpgprot_t”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÓubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÓŒmodname”NŒ classname”Njpjs)�”}”jv]”jÍÑŒc.vmf_insert_pfn_prot”†”asbuh1hhjÓubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3Óh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÓubj)�”}”(hŒpgprot”h]”hŒpgprot”…”�”}”(hjAÓh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÓubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjøÑubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjªÑh²hh³jÒÑh´M% ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¦Ñh²hh³jÒÑh´M% ubah}”(h]”j¡Ñah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÒÑh´M% hj£Ñh²hubj4)�”}”(hhh]”jM)�”}”(hŒ5insert single pfn into user vma with specified pgprot”h]”hŒ5insert single pfn into user vma with specified pgprot”…”�”}”(hjkÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M% hjhÓh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj£Ñh²hh³jÒÑh´M% ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjƒÓjHjƒÓjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX¡**Parameters** ``struct vm_area_struct *vma`` user vma to map to ``unsigned long addr`` target user address of this page ``unsigned long pfn`` source kernel pfn ``pgprot_t pgprot`` pgprot flags for the inserted page **Description** This is exactly like vmf_insert_pfn(), except that it allows drivers to override pgprot on a per-page basis. This only makes sense for IO mappings, and it makes no sense for COW mappings. In general, using multiple vmas is preferable; vmf_insert_pfn_prot should only be used if using multiple VMAs is impractical. pgprot typically only differs from **vma->vm_page_prot** when drivers set caching- and encryption bits different than those of **vma->vm_page_prot**, because the caching- or encryption mode may not be known at mmap() time. This is ok as long as **vma->vm_page_prot** is not used by the core vm to set caching and encryption bits for those vmas (except for COW pages). This is ensured by core vm only modifying these page table entries using functions that don't touch caching- or encryption bits, using pte_modify() if needed. (See for example mprotect()). Also when new page-table entries are created, this is only done using the fault() callback, and never using the value of vma->vm_page_prot, except for page-table entries that point to anonymous pages as the result of COW. **Context** Process context. May allocate using ``GFP_KERNEL``. **Return** vm_fault_t value.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj�Óh]”hŒ Parameters”…”�”}”(hj�Óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‹Óubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M) hj‡Óubj¤)�”}”(hhh]”(j©)�”}”(hŒ2``struct vm_area_struct *vma`` user vma to map to ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hj¬Óh]”hŒstruct vm_area_struct *vma”…”�”}”(hj®Óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjªÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M& hj¦ÓubjÉ)�”}”(hhh]”jM)�”}”(hŒuser vma to map to”h]”hŒuser vma to map to”…”�”}”(hjÅÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÁÓh´M& hjÂÓubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¦Óubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÁÓh´M& hj£Óubj©)�”}”(hŒ8``unsigned long addr`` target user address of this page ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hjåÓh]”hŒunsigned long addr”…”�”}”(hjçÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjãÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M' hjßÓubjÉ)�”}”(hhh]”jM)�”}”(hŒ target user address of this page”h]”hŒ target user address of this page”…”�”}”(hjþÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³júÓh´M' hjûÓubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjßÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³júÓh´M' hj£Óubj©)�”}”(hŒ(``unsigned long pfn`` source kernel pfn ”h]”(j¯)�”}”(hŒ``unsigned long pfn``”h]”jS)�”}”(hjÔh]”hŒunsigned long pfn”…”�”}”(hj Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M( hjÔubjÉ)�”}”(hhh]”jM)�”}”(hŒsource kernel pfn”h]”hŒsource kernel pfn”…”�”}”(hj7Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j3Ôh´M( hj4Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j3Ôh´M( hj£Óubj©)�”}”(hŒ7``pgprot_t pgprot`` pgprot flags for the inserted page ”h]”(j¯)�”}”(hŒ``pgprot_t pgprot``”h]”jS)�”}”(hjWÔh]”hŒpgprot_t pgprot”…”�”}”(hjYÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjUÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M) hjQÔubjÉ)�”}”(hhh]”jM)�”}”(hŒ"pgprot flags for the inserted page”h]”hŒ"pgprot flags for the inserted page”…”�”}”(hjpÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jlÔh´M) hjmÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjQÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jlÔh´M) hj£Óubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj‡ÓubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj’Ôh]”hŒ Description”…”�”}”(hj”Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M+ hj‡ÓubjM)�”}”(hŒlThis is exactly like vmf_insert_pfn(), except that it allows drivers to override pgprot on a per-page basis.”h]”hŒlThis is exactly like vmf_insert_pfn(), except that it allows drivers to override pgprot on a per-page basis.”…”�”}”(hj¨Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M* hj‡ÓubjM)�”}”(hŒÍThis only makes sense for IO mappings, and it makes no sense for COW mappings. In general, using multiple vmas is preferable; vmf_insert_pfn_prot should only be used if using multiple VMAs is impractical.”h]”hŒÍThis only makes sense for IO mappings, and it makes no sense for COW mappings. In general, using multiple vmas is preferable; vmf_insert_pfn_prot should only be used if using multiple VMAs is impractical.”…”�”}”(hj·Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M- hj‡ÓubjM)�”}”(hŒÞpgprot typically only differs from **vma->vm_page_prot** when drivers set caching- and encryption bits different than those of **vma->vm_page_prot**, because the caching- or encryption mode may not be known at mmap() time.”h]”(hŒ#pgprot typically only differs from ”…”�”}”(hjÆÔh²hh³Nh´NubjŽ)�”}”(hŒ**vma->vm_page_prot**”h]”hŒvma->vm_page_prot”…”�”}”(hjÎÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÆÔubhŒG when drivers set caching- and encryption bits different than those of ”…”�”}”(hjÆÔh²hh³Nh´NubjŽ)�”}”(hŒ**vma->vm_page_prot**”h]”hŒvma->vm_page_prot”…”�”}”(hjàÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÆÔubhŒJ, because the caching- or encryption mode may not be known at mmap() time.”…”�”}”(hjÆÔh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M2 hj‡ÓubjM)�”}”(hXMThis is ok as long as **vma->vm_page_prot** is not used by the core vm to set caching and encryption bits for those vmas (except for COW pages). This is ensured by core vm only modifying these page table entries using functions that don't touch caching- or encryption bits, using pte_modify() if needed. (See for example mprotect()).”h]”(hŒThis is ok as long as ”…”�”}”(hjùÔh²hh³Nh´NubjŽ)�”}”(hŒ**vma->vm_page_prot**”h]”hŒvma->vm_page_prot”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjùÔubhX$ is not used by the core vm to set caching and encryption bits for those vmas (except for COW pages). This is ensured by core vm only modifying these page table entries using functions that don’t touch caching- or encryption bits, using pte_modify() if needed. (See for example mprotect()).”…”�”}”(hjùÔh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M6 hj‡ÓubjM)�”}”(hŒÝAlso when new page-table entries are created, this is only done using the fault() callback, and never using the value of vma->vm_page_prot, except for page-table entries that point to anonymous pages as the result of COW.”h]”hŒÝAlso when new page-table entries are created, this is only done using the fault() callback, and never using the value of vma->vm_page_prot, except for page-table entries that point to anonymous pages as the result of COW.”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M< hj‡ÓubjM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MA hj‡ÓubjM)�”}”(hŒ4Process context. May allocate using ``GFP_KERNEL``.”h]”(hŒ%Process context. May allocate using ”…”�”}”(hjAÕh²hh³Nh´NubjS)�”}”(hŒ``GFP_KERNEL``”h]”hŒ GFP_KERNEL”…”�”}”(hjIÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjAÕubhŒ.”…”�”}”(hjAÕh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MB hj‡ÓubjM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MD hj‡ÓubjM)�”}”(hŒvm_fault_t value.”h]”hŒvm_fault_t value.”…”�”}”(hjzÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MC hj‡Óubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvmf_insert_pfn (C function)”Œc.vmf_insert_pfn”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ]vm_fault_t vmf_insert_pfn (struct vm_area_struct *vma, unsigned long addr, unsigned long pfn)”h]”hù)�”}”(hŒ\vm_fault_t vmf_insert_pfn(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn)”h]”(h)�”}”(hhh]”j)�”}”(hŒ vm_fault_t”h]”hŒ vm_fault_t”…”�”}”(hj¬Õh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj©Õubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j®ÕŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒvmf_insert_pfn”sbŒc.vmf_insert_pfn”†”asbuh1hhj¥Õh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Ma ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎÕh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¥Õh²hh³jÍÕh´Ma ubhÿ)�”}”(hŒvmf_insert_pfn”h]”j)�”}”(hjÊÕh]”hŒvmf_insert_pfn”…”�”}”(hjàÕh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÜÕubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¥Õh²hh³jÍÕh´Ma ubj )�”}”(hŒC(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn)”h]”(j )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjûÕh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj÷ÕubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj÷Õubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÖubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÖŒmodname”NŒ classname”Njpjs)�”}”jv]”jÈÕŒc.vmf_insert_pfn”†”asbuh1hhj÷ÕubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7Öh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj÷ÕubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjEÖh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj÷Õubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjRÖh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj÷Õubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjóÕubj )�”}”(hŒunsigned long addr”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjkÖh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjgÖubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyÖh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjgÖubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj‡Öh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjgÖubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•Öh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjgÖubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj£Öh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjgÖubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjóÕubj )�”}”(hŒunsigned long pfn”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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¸Öubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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¸Öubj)�”}”(hŒpfn”h]”hŒpfn”…”�”}”(hjôÖh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¸Öubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjóÕubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¥Õh²hh³jÍÕh´Ma ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¡Õh²hh³jÍÕh´Ma ubah}”(h]”jœÕah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÍÕh´Ma hjžÕh²hubj4)�”}”(hhh]”jM)�”}”(hŒinsert single pfn into user vma”h]”hŒinsert single pfn into user vma”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Ma hj×h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjžÕh²hh³jÍÕh´Ma ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj6×jHj6×jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX¾**Parameters** ``struct vm_area_struct *vma`` user vma to map to ``unsigned long addr`` target user address of this page ``unsigned long pfn`` source kernel pfn **Description** Similar to vm_insert_page, this allows drivers to insert individual pages they've allocated into a user vma. Same comments apply. This function should only be called from a vm_ops->fault handler, and in that case the handler should return the result of this function. vma cannot be a COW mapping. As this is called only for pages that do not currently exist, we do not need to flush old virtual caches or the TLB. **Context** Process context. May allocate using ``GFP_KERNEL``. **Return** vm_fault_t value.”h]”(jM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Me hj:×ubj¤)�”}”(hhh]”(j©)�”}”(hŒ2``struct vm_area_struct *vma`` user vma to map to ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hj_×h]”hŒstruct vm_area_struct *vma”…”�”}”(hja×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj]×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mb hjY×ubjÉ)�”}”(hhh]”jM)�”}”(hŒuser vma to map to”h]”hŒuser vma to map to”…”�”}”(hjx×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jt×h´Mb hju×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjY×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jt×h´Mb hjV×ubj©)�”}”(hŒ8``unsigned long addr`` target user address of this page ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hj˜×h]”hŒunsigned long addr”…”�”}”(hjš×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj–×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mc hj’×ubjÉ)�”}”(hhh]”jM)�”}”(hŒ target user address of this page”h]”hŒ target user address of this page”…”�”}”(hj±×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j­×h´Mc hj®×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj’×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j­×h´Mc hjV×ubj©)�”}”(hŒ(``unsigned long pfn`` source kernel pfn ”h]”(j¯)�”}”(hŒ``unsigned long pfn``”h]”jS)�”}”(hjÑ×h]”hŒunsigned long pfn”…”�”}”(hjÓ×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÏ×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Md hjË×ubjÉ)�”}”(hhh]”jM)�”}”(hŒsource kernel pfn”h]”hŒsource kernel pfn”…”�”}”(hjê×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jæ×h´Md hjç×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjË×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jæ×h´Md hjV×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj:×ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj Øh]”hŒ Description”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj Øubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mf hj:×ubjM)�”}”(hŒ�Similar to vm_insert_page, this allows drivers to insert individual pages they've allocated into a user vma. Same comments apply.”h]”hŒƒSimilar to vm_insert_page, this allows drivers to insert individual pages they’ve allocated into a user vma. Same comments apply.”…”�”}”(hj"Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Me hj:×ubjM)�”}”(hŒ‰This function should only be called from a vm_ops->fault handler, and in that case the handler should return the result of this function.”h]”hŒ‰This function should only be called from a vm_ops->fault handler, and in that case the handler should return the result of this function.”…”�”}”(hj1Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mh hj:×ubjM)�”}”(hŒvma cannot be a COW mapping.”h]”hŒvma cannot be a COW mapping.”…”�”}”(hj@Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mk hj:×ubjM)�”}”(hŒtAs this is called only for pages that do not currently exist, we do not need to flush old virtual caches or the TLB.”h]”hŒtAs this is called only for pages that do not currently exist, we do not need to flush old virtual caches or the TLB.”…”�”}”(hjOØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mm hj:×ubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hj`Øh]”hŒContext”…”�”}”(hjbØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj^Øubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mp hj:×ubjM)�”}”(hŒ4Process context. May allocate using ``GFP_KERNEL``.”h]”(hŒ%Process context. May allocate using ”…”�”}”(hjvØh²hh³Nh´NubjS)�”}”(hŒ``GFP_KERNEL``”h]”hŒ GFP_KERNEL”…”�”}”(hj~Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjvØubhŒ.”…”�”}”(hjvØh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mq hj:×ubjM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Ms hj:×ubjM)�”}”(hŒvm_fault_t value.”h]”hŒvm_fault_t value.”…”�”}”(hj¯Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.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”]”(héŒremap_pfn_range (C function)”Œc.remap_pfn_range”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒzint remap_pfn_range (struct vm_area_struct *vma, unsigned long addr, unsigned long pfn, unsigned long size, pgprot_t prot)”h]”hù)�”}”(hŒyint remap_pfn_range(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn, unsigned long size, pgprot_t prot)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjÞØh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÚØh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mú ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíØh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÚØh²hh³jìØh´Mú ubhÿ)�”}”(hŒremap_pfn_range”h]”j)�”}”(hŒremap_pfn_range”h]”hŒremap_pfn_range”…”�”}”(hjÿØh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjûØubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÚØh²hh³jìØh´Mú ubj )�”}”(hŒf(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn, unsigned long size, pgprot_t prot)”h]”(j )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÙubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(Ùh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÙubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj9Ùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj6Ùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j;ÙŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÙsbŒc.remap_pfn_range”†”asbuh1hhjÙubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYÙh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÙubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjgÙh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÙubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjtÙh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÙubj )�”}”(hŒunsigned long addr”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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‰Ùubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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‰Ùubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjÅÙh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‰Ùubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÙubj )�”}”(hŒunsigned long pfn”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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ÚÙubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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ÚÙubj)�”}”(hŒpfn”h]”hŒpfn”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÚÙubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÙubj )�”}”(hŒunsigned long size”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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+Úubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjKÚh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj+ÚubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYÚh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj+Úubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjgÚh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj+Úubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÙubj )�”}”(hŒ pgprot_t prot”h]”(h)�”}”(hhh]”j)�”}”(hŒpgprot_t”h]”hŒpgprot_t”…”�”}”(hjƒÚh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj€Úubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j…ÚŒmodname”NŒ classname”Njpjs)�”}”jv]”jUÙŒc.remap_pfn_range”†”asbuh1hhj|ÚubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡Úh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj|Úubj)�”}”(hŒprot”h]”hŒprot”…”�”}”(hj¯Úh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj|Úubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÙubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÚØh²hh³jìØh´Mú ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÖØh²hh³jìØh´Mú ubah}”(h]”jÑØah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jìØh´Mú hjÓØh²hubj4)�”}”(hhh]”jM)�”}”(hŒ remap kernel memory to userspace”h]”hŒ remap kernel memory to userspace”…”�”}”(hjÙÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mú hjÖÚh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÓØh²hh³jìØh´Mú ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjñÚjHjñÚjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXÆ**Parameters** ``struct vm_area_struct *vma`` user vma to map to ``unsigned long addr`` target page aligned user address to start at ``unsigned long pfn`` page frame number of kernel physical memory address ``unsigned long size`` size of mapping area ``pgprot_t prot`` page protection flags for this mapping **Note** this is only safe if the mm semaphore is held when called. **Return** ``0`` on success, negative error code otherwise.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjûÚh]”hŒ Parameters”…”�”}”(hjýÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjùÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mþ hjõÚubj¤)�”}”(hhh]”(j©)�”}”(hŒ2``struct vm_area_struct *vma`` user vma to map to ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hjÛh]”hŒstruct vm_area_struct *vma”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mû hjÛubjÉ)�”}”(hhh]”jM)�”}”(hŒuser vma to map to”h]”hŒuser vma to map to”…”�”}”(hj3Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j/Ûh´Mû hj0Ûubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÛubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j/Ûh´Mû hjÛubj©)�”}”(hŒD``unsigned long addr`` target page aligned user address to start at ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hjSÛh]”hŒunsigned long addr”…”�”}”(hjUÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjQÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mü hjMÛubjÉ)�”}”(hhh]”jM)�”}”(hŒ,target page aligned user address to start at”h]”hŒ,target page aligned user address to start at”…”�”}”(hjlÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jhÛh´Mü hjiÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjMÛubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jhÛh´Mü hjÛubj©)�”}”(hŒJ``unsigned long pfn`` page frame number of kernel physical memory address ”h]”(j¯)�”}”(hŒ``unsigned long pfn``”h]”jS)�”}”(hjŒÛh]”hŒunsigned long pfn”…”�”}”(hjŽÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjŠÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mý hj†ÛubjÉ)�”}”(hhh]”jM)�”}”(hŒ3page frame number of kernel physical memory address”h]”hŒ3page frame number of kernel physical memory address”…”�”}”(hj¥Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¡Ûh´Mý hj¢Ûubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj†Ûubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¡Ûh´Mý hjÛubj©)�”}”(hŒ,``unsigned long size`` size of mapping area ”h]”(j¯)�”}”(hŒ``unsigned long size``”h]”jS)�”}”(hjÅÛh]”hŒunsigned long size”…”�”}”(hjÇÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÃÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mþ hj¿ÛubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of mapping area”h]”hŒsize of mapping area”…”�”}”(hjÞÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÚÛh´Mþ hjÛÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¿Ûubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÚÛh´Mþ hjÛubj©)�”}”(hŒ9``pgprot_t prot`` page protection flags for this mapping ”h]”(j¯)�”}”(hŒ``pgprot_t prot``”h]”jS)�”}”(hjþÛh]”hŒ pgprot_t prot”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjüÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mÿ hjøÛubjÉ)�”}”(hhh]”jM)�”}”(hŒ&page protection flags for this mapping”h]”hŒ&page protection flags for this mapping”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÜh´Mÿ hjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjøÛubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÜh´Mÿ hjÛubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjõÚubjM)�”}”(hŒ**Note**”h]”jŽ)�”}”(hj9Üh]”hŒNote”…”�”}”(hj;Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj7Üubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M hjõÚubjM)�”}”(hŒ:this is only safe if the mm semaphore is held when called.”h]”hŒ:this is only safe if the mm semaphore is held when called.”…”�”}”(hjOÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M hjõÚubjM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M hjõÚubjM)�”}”(hŒ0``0`` on success, negative error code otherwise.”h]”(jS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hjzÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjvÜubhŒ+ on success, negative error code otherwise.”…”�”}”(hjvÜh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.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”]”(héŒvm_iomap_memory (C function)”Œc.vm_iomap_memory”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒVint vm_iomap_memory (struct vm_area_struct *vma, phys_addr_t start, unsigned long len)”h]”hù)�”}”(hŒUint vm_iomap_memory(struct vm_area_struct *vma, phys_addr_t start, unsigned long len)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj³Üh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¯Üh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MR ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂÜh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¯Üh²hh³jÁÜh´MR ubhÿ)�”}”(hŒvm_iomap_memory”h]”j)�”}”(hŒvm_iomap_memory”h]”hŒvm_iomap_memory”…”�”}”(hjÔÜh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÐÜubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¯Üh²hh³jÁÜh´MR ubj )�”}”(hŒB(struct vm_area_struct *vma, phys_addr_t start, unsigned long len)”h]”(j )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjðÜh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjìÜubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýÜh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjìÜubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Ýubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÝŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÖÜsbŒc.vm_iomap_memory”†”asbuh1hhjìÜubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.Ýh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjìÜubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj<Ýh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjìÜubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjIÝh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjìÜubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjèÜubj )�”}”(hŒphys_addr_t start”h]”(h)�”}”(hhh]”j)�”}”(hŒ phys_addr_t”h]”hŒ phys_addr_t”…”�”}”(hjeÝh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjbÝubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jgÝŒmodname”NŒ classname”Njpjs)�”}”jv]”j*ÝŒc.vm_iomap_memory”†”asbuh1hhj^ÝubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒÝh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj^Ýubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj‘Ýh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj^Ýubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjèÜubj )�”}”(hŒunsigned long len”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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¦Ýubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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¦Ýubj)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjâÝh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦Ýubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjèÜubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¯Üh²hh³jÁÜh´MR ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj«Üh²hh³jÁÜh´MR ubah}”(h]”j¦Üah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÁÜh´MR hj¨Üh²hubj4)�”}”(hhh]”jM)�”}”(hŒremap memory to userspace”h]”hŒremap memory to userspace”…”�”}”(hj Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MR hj Þh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¨Üh²hh³jÁÜh´MR ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj$ÞjHj$ÞjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX.**Parameters** ``struct vm_area_struct *vma`` user vma to map to ``phys_addr_t start`` start of the physical memory to be mapped ``unsigned long len`` size of area **Description** This is a simplified io_remap_pfn_range() for common driver use. The driver just needs to give us the physical memory range to be mapped, we'll figure out the rest from the vma information. NOTE! Some drivers might want to tweak vma->vm_page_prot first to get whatever write-combining details or similar. **Return** ``0`` on success, negative error code otherwise.”h]”(jM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MV hj(Þubj¤)�”}”(hhh]”(j©)�”}”(hŒ2``struct vm_area_struct *vma`` user vma to map to ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hjMÞh]”hŒstruct vm_area_struct *vma”…”�”}”(hjOÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjKÞubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MS hjGÞubjÉ)�”}”(hhh]”jM)�”}”(hŒuser vma to map to”h]”hŒuser vma to map to”…”�”}”(hjfÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jbÞh´MS hjcÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjGÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jbÞh´MS hjDÞubj©)�”}”(hŒ@``phys_addr_t start`` start of the physical memory to be mapped ”h]”(j¯)�”}”(hŒ``phys_addr_t start``”h]”jS)�”}”(hj†Þh]”hŒphys_addr_t start”…”�”}”(hjˆÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj„Þubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MT hj€ÞubjÉ)�”}”(hhh]”jM)�”}”(hŒ)start of the physical memory to be mapped”h]”hŒ)start of the physical memory to be mapped”…”�”}”(hjŸÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j›Þh´MT hjœÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj€Þubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j›Þh´MT hjDÞubj©)�”}”(hŒ#``unsigned long len`` size of area ”h]”(j¯)�”}”(hŒ``unsigned long len``”h]”jS)�”}”(hj¿Þh]”hŒunsigned long len”…”�”}”(hjÁÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj½Þubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MU hj¹ÞubjÉ)�”}”(hhh]”jM)�”}”(hŒ size of area”h]”hŒ size of area”…”�”}”(hjØÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÔÞh´MU hjÕÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¹Þubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÔÞh´MU hjDÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj(ÞubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjúÞh]”hŒ Description”…”�”}”(hjüÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjøÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MW hj(ÞubjM)�”}”(hŒ½This is a simplified io_remap_pfn_range() for common driver use. The driver just needs to give us the physical memory range to be mapped, we'll figure out the rest from the vma information.”h]”hŒ¿This is a simplified io_remap_pfn_range() for common driver use. The driver just needs to give us the physical memory range to be mapped, we’ll figure out the rest from the vma information.”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MV hj(ÞubjM)�”}”(hŒrNOTE! Some drivers might want to tweak vma->vm_page_prot first to get whatever write-combining details or similar.”h]”hŒrNOTE! Some drivers might want to tweak vma->vm_page_prot first to get whatever write-combining details or similar.”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MZ hj(ÞubjM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M] hj(ÞubjM)�”}”(hŒ0``0`` on success, negative error code otherwise.”h]”(jS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hjJßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjFßubhŒ+ on success, negative error code otherwise.”…”�”}”(hjFßh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.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”]”(héŒ unmap_mapping_pages (C function)”Œc.unmap_mapping_pages”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒcvoid unmap_mapping_pages (struct address_space *mapping, pgoff_t start, pgoff_t nr, bool even_cows)”h]”hù)�”}”(hŒbvoid unmap_mapping_pages(struct address_space *mapping, pgoff_t start, pgoff_t nr, bool even_cows)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjƒßh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjßh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M´ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’ßh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjßh²hh³j‘ßh´M´ubhÿ)�”}”(hŒunmap_mapping_pages”h]”j)�”}”(hŒunmap_mapping_pages”h]”hŒunmap_mapping_pages”…”�”}”(hj¤ßh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ßubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjßh²hh³j‘ßh´M´ubj )�”}”(hŒJ(struct address_space *mapping, pgoff_t start, pgoff_t nr, bool even_cows)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÀßh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¼ßubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍßh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¼ßubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjÞßh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÛßubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jàߌmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj¦ßsbŒc.unmap_mapping_pages”†”asbuh1hhj¼ßubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþßh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¼ßubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj àh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¼ßubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¼ßubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¸ßubj )�”}”(hŒ pgoff_t start”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hj5àh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2àubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j7àŒmodname”NŒ classname”Njpjs)�”}”jv]”júߌc.unmap_mapping_pages”†”asbuh1hhj.àubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSàh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj.àubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjaàh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj.àubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¸ßubj )�”}”(hŒ pgoff_t nr”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hj}àh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjzàubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jàŒmodname”NŒ classname”Njpjs)�”}”jv]”júߌc.unmap_mapping_pages”†”asbuh1hhjvàubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›àh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjvàubj)�”}”(hŒnr”h]”hŒnr”…”�”}”(hj©àh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjvàubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¸ßubj )�”}”(hŒbool even_cows”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(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¾àubj)�”}”(hŒ even_cows”h]”hŒ even_cows”…”�”}”(hjÝàh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾àubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¸ßubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjßh²hh³j‘ßh´M´ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj{ßh²hh³j‘ßh´M´ubah}”(h]”jvßah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j‘ßh´M´hjxßh²hubj4)�”}”(hhh]”jM)�”}”(hŒUnmap pages from processes.”h]”hŒUnmap pages from processes.”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M´hjáh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjxßh²hh³j‘ßh´M´ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjájHjájI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX **Parameters** ``struct address_space *mapping`` The address space containing pages to be unmapped. ``pgoff_t start`` Index of first page to be unmapped. ``pgoff_t nr`` Number of pages to be unmapped. 0 to unmap to end of file. ``bool even_cows`` Whether to unmap even private COWed pages. **Description** Unmap the pages in this address space from any userspace process which has them mmaped. Generally, you want to remove COWed pages as well when a file is being truncated, but not when invalidating pages from the page cache.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj)áh]”hŒ Parameters”…”�”}”(hj+áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj'áubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M¸hj#áubj¤)�”}”(hhh]”(j©)�”}”(hŒU``struct address_space *mapping`` The address space containing pages to be unmapped. ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjHáh]”hŒstruct address_space *mapping”…”�”}”(hjJáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjFáubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MµhjBáubjÉ)�”}”(hhh]”jM)�”}”(hŒ2The address space containing pages to be unmapped.”h]”hŒ2The address space containing pages to be unmapped.”…”�”}”(hjaáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j]áh´Mµhj^áubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjBáubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j]áh´Mµhj?áubj©)�”}”(hŒ6``pgoff_t start`` Index of first page to be unmapped. ”h]”(j¯)�”}”(hŒ``pgoff_t start``”h]”jS)�”}”(hj�áh]”hŒ pgoff_t start”…”�”}”(hjƒáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjáubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M¶hj{áubjÉ)�”}”(hhh]”jM)�”}”(hŒ#Index of first page to be unmapped.”h]”hŒ#Index of first page to be unmapped.”…”�”}”(hjšáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j–áh´M¶hj—áubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj{áubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j–áh´M¶hj?áubj©)�”}”(hŒK``pgoff_t nr`` Number of pages to be unmapped. 0 to unmap to end of file. ”h]”(j¯)�”}”(hŒ``pgoff_t nr``”h]”jS)�”}”(hjºáh]”hŒ pgoff_t nr”…”�”}”(hj¼áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¸áubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M·hj´áubjÉ)�”}”(hhh]”jM)�”}”(hŒ;Number of pages to be unmapped. 0 to unmap to end of file.”h]”hŒ;Number of pages to be unmapped. 0 to unmap to end of file.”…”�”}”(hjÓáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÏáh´M·hjÐáubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj´áubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÏáh´M·hj?áubj©)�”}”(hŒ>``bool even_cows`` Whether to unmap even private COWed pages. ”h]”(j¯)�”}”(hŒ``bool even_cows``”h]”jS)�”}”(hjóáh]”hŒbool even_cows”…”�”}”(hjõáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjñáubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M¸hjíáubjÉ)�”}”(hhh]”jM)�”}”(hŒ*Whether to unmap even private COWed pages.”h]”hŒ*Whether to unmap even private COWed pages.”…”�”}”(hj âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jâh´M¸hj âubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjíáubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jâh´M¸hj?áubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj#áubjM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mºhj#áubjM)�”}”(hŒßUnmap the pages in this address space from any userspace process which has them mmaped. Generally, you want to remove COWed pages as well when a file is being truncated, but not when invalidating pages from the page cache.”h]”hŒßUnmap the pages in this address space from any userspace process which has them mmaped. Generally, you want to remove COWed pages as well when a file is being truncated, but not when invalidating pages from the page cache.”…”�”}”(hjDâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.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”]”(héŒ unmap_mapping_range (C function)”Œc.unmap_mapping_range”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒuvoid unmap_mapping_range (struct address_space *mapping, loff_t const holebegin, loff_t const holelen, int even_cows)”h]”hù)�”}”(hŒtvoid unmap_mapping_range(struct address_space *mapping, loff_t const holebegin, loff_t const holelen, int even_cows)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjsâh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjoâh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MÓubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚âh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjoâh²hh³j�âh´MÓubhÿ)�”}”(hŒunmap_mapping_range”h]”j)�”}”(hŒunmap_mapping_range”h]”hŒunmap_mapping_range”…”�”}”(hj”âh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�âubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjoâh²hh³j�âh´MÓubj )�”}”(hŒ\(struct address_space *mapping, loff_t const holebegin, loff_t const holelen, int even_cows)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj°âh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¬âubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½âh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¬âubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjÎâh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjËâubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÐâŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj–âsbŒc.unmap_mapping_range”†”asbuh1hhj¬âubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîâh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¬âubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjüâh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¬âubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj ãh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¬âubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¨âubj )�”}”(hŒloff_t const holebegin”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj%ãh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj"ãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j'ãŒmodname”NŒ classname”Njpjs)�”}”jv]”jêâŒc.unmap_mapping_range”†”asbuh1hhjãubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCãh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjãubj5)�”}”(hj“h]”hŒconst”…”�”}”(hjQãh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjãubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^ãh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjãubj)�”}”(hŒ holebegin”h]”hŒ holebegin”…”�”}”(hjlãh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¨âubj )�”}”(hŒloff_t const holelen”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjˆãh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj…ãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jŠãŒmodname”NŒ classname”Njpjs)�”}”jv]”jêâŒc.unmap_mapping_range”†”asbuh1hhj�ãubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦ãh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�ãubj5)�”}”(hj“h]”hŒconst”…”�”}”(hj´ãh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj�ãubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁãh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�ãubj)�”}”(hŒholelen”h]”hŒholelen”…”�”}”(hjÏãh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¨âubj )�”}”(hŒ int even_cows”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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äãubj)�”}”(hŒ even_cows”h]”hŒ even_cows”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjäãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¨âubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjoâh²hh³j�âh´MÓubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjkâh²hh³j�âh´MÓubah}”(h]”jfâah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j�âh´MÓhjhâh²hubj4)�”}”(hhh]”jM)�”}”(hŒunmap the portion of all mmaps in the specified address_space corresponding to the specified byte range in the underlying file.”h]”hŒunmap the portion of all mmaps in the specified address_space corresponding to the specified byte range in the underlying file.”…”�”}”(hj.äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MÓhj+äh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjhâh²hh³j�âh´MÓubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjFäjHjFäjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXÒ**Parameters** ``struct address_space *mapping`` the address space containing mmaps to be unmapped. ``loff_t const holebegin`` byte in first page to unmap, relative to the start of the underlying file. This will be rounded down to a PAGE_SIZE boundary. Note that this is different from truncate_pagecache(), which must keep the partial page. In contrast, we must get rid of partial pages. ``loff_t const holelen`` size of prospective hole in bytes. This will be rounded up to a PAGE_SIZE boundary. A holelen of zero truncates to the end of the file. ``int even_cows`` 1 when truncating a file, unmap even private COWed pages; but 0 when invalidating pagecache, don't throw away private data.”h]”(jM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M×hjJäubj¤)�”}”(hhh]”(j©)�”}”(hŒU``struct address_space *mapping`` the address space containing mmaps to be unmapped. ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjoäh]”hŒstruct address_space *mapping”…”�”}”(hjqäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjmäubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M×hjiäubjÉ)�”}”(hhh]”jM)�”}”(hŒ2the address space containing mmaps to be unmapped.”h]”hŒ2the address space containing mmaps to be unmapped.”…”�”}”(hjˆäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j„äh´M×hj…äubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjiäubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j„äh´M×hjfäubj©)�”}”(hX$``loff_t const holebegin`` byte in first page to unmap, relative to the start of the underlying file. This will be rounded down to a PAGE_SIZE boundary. Note that this is different from truncate_pagecache(), which must keep the partial page. In contrast, we must get rid of partial pages. ”h]”(j¯)�”}”(hŒ``loff_t const holebegin``”h]”jS)�”}”(hj¨äh]”hŒloff_t const holebegin”…”�”}”(hjªäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¦äubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MÜhj¢äubjÉ)�”}”(hhh]”jM)�”}”(hXbyte in first page to unmap, relative to the start of the underlying file. This will be rounded down to a PAGE_SIZE boundary. Note that this is different from truncate_pagecache(), which must keep the partial page. In contrast, we must get rid of partial pages.”h]”hXbyte in first page to unmap, relative to the start of the underlying file. This will be rounded down to a PAGE_SIZE boundary. Note that this is different from truncate_pagecache(), which must keep the partial page. In contrast, we must get rid of partial pages.”…”�”}”(hjÁäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MØhj¾äubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¢äubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j½äh´MÜhjfäubj©)�”}”(hŒ£``loff_t const holelen`` size of prospective hole in bytes. This will be rounded up to a PAGE_SIZE boundary. A holelen of zero truncates to the end of the file. ”h]”(j¯)�”}”(hŒ``loff_t const holelen``”h]”jS)�”}”(hjâäh]”hŒloff_t const holelen”…”�”}”(hjääh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjàäubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MßhjÜäubjÉ)�”}”(hhh]”jM)�”}”(hŒ‰size of prospective hole in bytes. This will be rounded up to a PAGE_SIZE boundary. A holelen of zero truncates to the end of the file.”h]”hŒ‰size of prospective hole in bytes. This will be rounded up to a PAGE_SIZE boundary. A holelen of zero truncates to the end of the file.”…”�”}”(hjûäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MÝhjøäubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÜäubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j÷äh´Mßhjfäubj©)�”}”(hŒ�``int even_cows`` 1 when truncating a file, unmap even private COWed pages; but 0 when invalidating pagecache, don't throw away private data.”h]”(j¯)�”}”(hŒ``int even_cows``”h]”jS)�”}”(hjåh]”hŒ int even_cows”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjåubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MàhjåubjÉ)�”}”(hhh]”jM)�”}”(hŒ{1 when truncating a file, unmap even private COWed pages; but 0 when invalidating pagecache, don't throw away private data.”h]”hŒ}1 when truncating a file, unmap even private COWed pages; but 0 when invalidating pagecache, don’t throw away private data.”…”�”}”(hj5åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j1åh´Màhj2åubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjåubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j1åh´Màhjfäubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjJäubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ follow_pfnmap_start (C function)”Œc.follow_pfnmap_start”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ9int follow_pfnmap_start (struct follow_pfnmap_args *args)”h]”hù)�”}”(hŒ8int follow_pfnmap_start(struct follow_pfnmap_args *args)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjuåh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjqåh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MaubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„åh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjqåh²hh³jƒåh´Maubhÿ)�”}”(hŒfollow_pfnmap_start”h]”j)�”}”(hŒfollow_pfnmap_start”h]”hŒfollow_pfnmap_start”…”�”}”(hj–åh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj’åubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjqåh²hh³jƒåh´Maubj )�”•D}”(hŒ!(struct follow_pfnmap_args *args)”h]”j )�”}”(hŒstruct follow_pfnmap_args *args”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj²åh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj®åubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿åh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj®åubh)�”}”(hhh]”j)�”}”(hŒfollow_pfnmap_args”h]”hŒfollow_pfnmap_args”…”�”}”(hjÐåh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÍåubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÒåŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj˜åsbŒc.follow_pfnmap_start”†”asbuh1hhj®åubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðåh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj®åubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjþåh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj®åubj)�”}”(hŒargs”h]”hŒargs”…”�”}”(hj æh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj®åubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjªåubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjqåh²hh³jƒåh´Maubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjmåh²hh³jƒåh´Maubah}”(h]”jhåah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jƒåh´Mahjjåh²hubj4)�”}”(hhh]”jM)�”}”(hŒ/Look up a pfn mapping at a user virtual address”h]”hŒ/Look up a pfn mapping at a user virtual address”…”�”}”(hj5æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mahj2æh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjjåh²hh³jƒåh´Maubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjMæjHjMæjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``struct follow_pfnmap_args *args`` Pointer to struct **follow_pfnmap_args** **Description** The caller needs to setup args->vma and args->address to point to the virtual address as the target of such lookup. On a successful return, the results will be put into other output fields. After the caller finished using the fields, the caller must invoke another follow_pfnmap_end() to proper releases the locks and resources of such look up request. During the start() and end() calls, the results in **args** will be valid as proper locks will be held. After the end() is called, all the fields in **follow_pfnmap_args** will be invalid to be further accessed. Further use of such information after end() may require proper synchronizations by the caller with page table updates, otherwise it can create a security bug. If the PTE maps a refcounted page, callers are responsible to protect against invalidation with MMU notifiers; otherwise access to the PFN at a later point in time can trigger use-after-free. Only IO mappings and raw PFN mappings are allowed. The mmap semaphore should be taken for read, and the mmap semaphore cannot be released before the end() is invoked. This function must not be used to modify PTE content. **Return** zero on success, negative otherwise.”h]”(jM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MehjQæubj¤)�”}”(hhh]”j©)�”}”(hŒM``struct follow_pfnmap_args *args`` Pointer to struct **follow_pfnmap_args** ”h]”(j¯)�”}”(hŒ#``struct follow_pfnmap_args *args``”h]”jS)�”}”(hjvæh]”hŒstruct follow_pfnmap_args *args”…”�”}”(hjxæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjtæubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MbhjpæubjÉ)�”}”(hhh]”jM)�”}”(hŒ(Pointer to struct **follow_pfnmap_args**”h]”(hŒPointer to struct ”…”�”}”(hj�æh²hh³Nh´NubjŽ)�”}”(hŒ**follow_pfnmap_args**”h]”hŒfollow_pfnmap_args”…”�”}”(hj—æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�æubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‹æh´MbhjŒæubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjpæubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‹æh´Mbhjmæubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjQæubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj¿æh]”hŒ Description”…”�”}”(hjÁæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj½æubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MdhjQæubjM)�”}”(hŒ¾The caller needs to setup args->vma and args->address to point to the virtual address as the target of such lookup. On a successful return, the results will be put into other output fields.”h]”hŒ¾The caller needs to setup args->vma and args->address to point to the virtual address as the target of such lookup. On a successful return, the results will be put into other output fields.”…”�”}”(hjÕæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MchjQæubjM)�”}”(hŒ¢After the caller finished using the fields, the caller must invoke another follow_pfnmap_end() to proper releases the locks and resources of such look up request.”h]”hŒ¢After the caller finished using the fields, the caller must invoke another follow_pfnmap_end() to proper releases the locks and resources of such look up request.”…”�”}”(hjäæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MghjQæubjM)�”}”(hXtDuring the start() and end() calls, the results in **args** will be valid as proper locks will be held. After the end() is called, all the fields in **follow_pfnmap_args** will be invalid to be further accessed. Further use of such information after end() may require proper synchronizations by the caller with page table updates, otherwise it can create a security bug.”h]”(hŒ3During the start() and end() calls, the results in ”…”�”}”(hjóæh²hh³Nh´NubjŽ)�”}”(hŒ**args**”h]”hŒargs”…”�”}”(hjûæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjóæubhŒ[ will be valid as proper locks will be held. After the end() is called, all the fields in ”…”�”}”(hjóæh²hh³Nh´NubjŽ)�”}”(hŒ**follow_pfnmap_args**”h]”hŒfollow_pfnmap_args”…”�”}”(hj çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjóæubhŒÈ will be invalid to be further accessed. Further use of such information after end() may require proper synchronizations by the caller with page table updates, otherwise it can create a security bug.”…”�”}”(hjóæh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MkhjQæubjM)�”}”(hŒ¿If the PTE maps a refcounted page, callers are responsible to protect against invalidation with MMU notifiers; otherwise access to the PFN at a later point in time can trigger use-after-free.”h]”hŒ¿If the PTE maps a refcounted page, callers are responsible to protect against invalidation with MMU notifiers; otherwise access to the PFN at a later point in time can trigger use-after-free.”…”�”}”(hj&çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MrhjQæubjM)�”}”(hŒ§Only IO mappings and raw PFN mappings are allowed. The mmap semaphore should be taken for read, and the mmap semaphore cannot be released before the end() is invoked.”h]”hŒ§Only IO mappings and raw PFN mappings are allowed. The mmap semaphore should be taken for read, and the mmap semaphore cannot be released before the end() is invoked.”…”�”}”(hj5çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MvhjQæubjM)�”}”(hŒ5This function must not be used to modify PTE content.”h]”hŒ5This function must not be used to modify PTE content.”…”�”}”(hjDçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MzhjQæubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjUçh]”hŒReturn”…”�”}”(hjWçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjSçubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M|hjQæubjM)�”}”(hŒ$zero on success, negative otherwise.”h]”hŒ$zero on success, negative otherwise.”…”�”}”(hjkçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.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”]”(héŒfollow_pfnmap_end (C function)”Œc.follow_pfnmap_end”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ8void follow_pfnmap_end (struct follow_pfnmap_args *args)”h]”hù)�”}”(hŒ7void follow_pfnmap_end(struct follow_pfnmap_args *args)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjšçh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj–çh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MØubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©çh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj–çh²hh³j¨çh´MØubhÿ)�”}”(hŒfollow_pfnmap_end”h]”j)�”}”(hŒfollow_pfnmap_end”h]”hŒfollow_pfnmap_end”…”�”}”(hj»çh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj·çubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj–çh²hh³j¨çh´MØubj )�”}”(hŒ!(struct follow_pfnmap_args *args)”h]”j )�”}”(hŒstruct follow_pfnmap_args *args”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj×çh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÓçubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäçh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÓçubh)�”}”(hhh]”j)�”}”(hŒfollow_pfnmap_args”h]”hŒfollow_pfnmap_args”…”�”}”(hjõçh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjòçubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j÷çŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj½çsbŒc.follow_pfnmap_end”†”asbuh1hhjÓçubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÓçubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj#èh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÓçubj)�”}”(hŒargs”h]”hŒargs”…”�”}”(hj0èh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÓçubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÏçubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj–çh²hh³j¨çh´MØubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj’çh²hh³j¨çh´MØubah}”(h]”j�çah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¨çh´MØhj�çh²hubj4)�”}”(hhh]”jM)�”}”(hŒ#End a follow_pfnmap_start() process”h]”hŒ#End a follow_pfnmap_start() process”…”�”}”(hjZèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MØhjWèh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj�çh²hh³j¨çh´MØubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjrèjHjrèjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒÕ**Parameters** ``struct follow_pfnmap_args *args`` Pointer to struct **follow_pfnmap_args** **Description** Must be used in pair of follow_pfnmap_start(). See the start() function above for more information.”h]”(jM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MÜhjvèubj¤)�”}”(hhh]”j©)�”}”(hŒM``struct follow_pfnmap_args *args`` Pointer to struct **follow_pfnmap_args** ”h]”(j¯)�”}”(hŒ#``struct follow_pfnmap_args *args``”h]”jS)�”}”(hj›èh]”hŒstruct follow_pfnmap_args *args”…”�”}”(hj�èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj™èubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MÙhj•èubjÉ)�”}”(hhh]”jM)�”}”(hŒ(Pointer to struct **follow_pfnmap_args**”h]”(hŒPointer to struct ”…”�”}”(hj´èh²hh³Nh´NubjŽ)�”}”(hŒ**follow_pfnmap_args**”h]”hŒfollow_pfnmap_args”…”�”}”(hj¼èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj´èubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j°èh´MÙhj±èubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj•èubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j°èh´MÙhj’èubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjvèubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjäèh]”hŒ Description”…”�”}”(hjæèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjâèubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MÛhjvèubjM)�”}”(hŒdMust be used in pair of follow_pfnmap_start(). See the start() function above for more information.”h]”hŒdMust be used in pair of follow_pfnmap_start(). See the start() function above for more information.”…”�”}”(hjúèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MÚhjvèubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ generic_access_phys (C function)”Œc.generic_access_phys”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒgint generic_access_phys (struct vm_area_struct *vma, unsigned long addr, void *buf, int len, int write)”h]”hù)�”}”(hŒfint generic_access_phys(struct vm_area_struct *vma, unsigned long addr, void *buf, int len, int write)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj)éh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj%éh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MéubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8éh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj%éh²hh³j7éh´Méubhÿ)�”}”(hŒgeneric_access_phys”h]”j)�”}”(hŒgeneric_access_phys”h]”hŒgeneric_access_phys”…”�”}”(hjJéh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjFéubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj%éh²hh³j7éh´Méubj )�”}”(hŒO(struct vm_area_struct *vma, unsigned long addr, void *buf, int len, int write)”h]”(j )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjféh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjbéubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjséh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjbéubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj„éh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�éubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j†éŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljLésbŒc.generic_access_phys”†”asbuh1hhjbéubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤éh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjbéubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj²éh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjbéubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hj¿éh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjbéubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj^éubj )�”}”(hŒunsigned long addr”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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Ôéubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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Ôéubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÔéubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj^éubj )�”}”(hŒ void *buf”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj)êh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj%êubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7êh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj%êubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjEêh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj%êubj)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjRêh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj%êubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj^éubj )�”}”(hŒint len”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjkêh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjgêubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyêh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjgêubj)�”}”(hŒlen”h]”hŒlen”…”�”}”(hj‡êh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjgêubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj^éubj )�”}”(hŒ int write”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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œêubj)�”}”(hŒwrite”h]”hŒwrite”…”�”}”(hj¼êh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjœêubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj^éubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj%éh²hh³j7éh´Méubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj!éh²hh³j7éh´Méubah}”(h]”jéah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j7éh´Méhjéh²hubj4)�”}”(hhh]”jM)�”}”(hŒ,generic implementation for iomem mmap access”h]”hŒ,generic implementation for iomem mmap access”…”�”}”(hjæêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Méhjãêh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjéh²hh³j7éh´Méubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjþêjHjþêjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXø**Parameters** ``struct vm_area_struct *vma`` the vma to access ``unsigned long addr`` userspace address, not relative offset within **vma** ``void *buf`` buffer to read/write ``int len`` length of transfer ``int write`` set to FOLL_WRITE when writing, otherwise reading **Description** This is a generic implementation for :c:type:`vm_operations_struct.access ` for an iomem mapping. This callback is used by access_process_vm() when the **vma** is not page based.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjëh]”hŒ Parameters”…”�”}”(hj ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjëubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Míhjëubj¤)�”}”(hhh]”(j©)�”}”(hŒ1``struct vm_area_struct *vma`` the vma to access ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hj'ëh]”hŒstruct vm_area_struct *vma”…”�”}”(hj)ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj%ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mêhj!ëubjÉ)�”}”(hhh]”jM)�”}”(hŒthe vma to access”h]”hŒthe vma to access”…”�”}”(hj@ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j<ëh´Mêhj=ëubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj!ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j<ëh´Mêhjëubj©)�”}”(hŒM``unsigned long addr`` userspace address, not relative offset within **vma** ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hj`ëh]”hŒunsigned long addr”…”�”}”(hjbëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj^ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MëhjZëubjÉ)�”}”(hhh]”jM)�”}”(hŒ5userspace address, not relative offset within **vma**”h]”(hŒ.userspace address, not relative offset within ”…”�”}”(hjyëh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hj�ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjyëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³juëh´Mëhjvëubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjZëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³juëh´Mëhjëubj©)�”}”(hŒ#``void *buf`` buffer to read/write ”h]”(j¯)�”}”(hŒ ``void *buf``”h]”jS)�”}”(hj§ëh]”hŒ void *buf”…”�”}”(hj©ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¥ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Mìhj¡ëubjÉ)�”}”(hhh]”jM)�”}”(hŒbuffer to read/write”h]”hŒbuffer to read/write”…”�”}”(hjÀëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¼ëh´Mìhj½ëubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¡ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¼ëh´Mìhjëubj©)�”}”(hŒ``int len`` length of transfer ”h]”(j¯)�”}”(hŒ ``int len``”h]”jS)�”}”(hjàëh]”hŒint len”…”�”}”(hjâëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÞëubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MíhjÚëubjÉ)�”}”(hhh]”jM)�”}”(hŒlength of transfer”h]”hŒlength of transfer”…”�”}”(hjùëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jõëh´Míhjöëubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÚëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jõëh´Míhjëubj©)�”}”(hŒ@``int write`` set to FOLL_WRITE when writing, otherwise reading ”h]”(j¯)�”}”(hŒ ``int write``”h]”jS)�”}”(hjìh]”hŒ int write”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MîhjìubjÉ)�”}”(hhh]”jM)�”}”(hŒ1set to FOLL_WRITE when writing, otherwise reading”h]”hŒ1set to FOLL_WRITE when writing, otherwise reading”…”�”}”(hj2ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j.ìh´Mîhj/ìubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjìubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j.ìh´Mîhjëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjëubjM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MðhjëubjM)�”}”(hŒÈThis is a generic implementation for :c:type:`vm_operations_struct.access ` for an iomem mapping. This callback is used by access_process_vm() when the **vma** is not page based.”h]”(hŒ%This is a generic implementation for ”…”�”}”(hjjìh²hh³Nh´Nubh)�”}”(hŒ<:c:type:`vm_operations_struct.access `”h]”jS)�”}”(hjtìh]”hŒvm_operations_struct.access”…”�”}”(hjvìh²hh³Nh´Nubah}”(h]”h ]”(jjAŒc-type”eh"]”h$]”h&]”uh1jRhjrìubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j(Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jpj.j1Œvm_operations_struct”uh1hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MïhjjìubhŒM for an iomem mapping. This callback is used by access_process_vm() when the ”…”�”}”(hjjìh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hj–ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjjìubhŒ is not page based.”…”�”}”(hjjìh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‘ìh´Mïhjëubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒcopy_remote_vm_str (C function)”Œc.copy_remote_vm_str”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒpint copy_remote_vm_str (struct task_struct *tsk, unsigned long addr, void *buf, int len, unsigned int gup_flags)”h]”hù)�”}”(hŒoint copy_remote_vm_str(struct task_struct *tsk, unsigned long addr, void *buf, int len, unsigned int gup_flags)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjÎìh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÊìh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MôubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝìh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÊìh²hh³jÜìh´Môubhÿ)�”}”(hŒcopy_remote_vm_str”h]”j)�”}”(hŒcopy_remote_vm_str”h]”hŒcopy_remote_vm_str”…”�”}”(hjïìh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjëìubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÊìh²hh³jÜìh´Môubj )�”}”(hŒY(struct task_struct *tsk, unsigned long addr, void *buf, int len, unsigned int gup_flags)”h]”(j )�”}”(hŒstruct task_struct *tsk”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj íh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjíubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjíubh)�”}”(hhh]”j)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hj)íh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj&íubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j+íŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljñìsbŒc.copy_remote_vm_str”†”asbuh1hhjíubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIíh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjíubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjWíh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjíubj)�”}”(hŒtsk”h]”hŒtsk”…”�”}”(hjdíh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjíubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjíubj )�”}”(hŒunsigned long addr”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj}íh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjyíubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹íh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjyíubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj™íh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjyíubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§íh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjyíubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjµíh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjyíubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjíubj )�”}”(hŒ void *buf”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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ÊíubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjêíh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÊíubj)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj÷íh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÊíubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjíubj )�”}”(hŒint len”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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 îubj)�”}”(hŒlen”h]”hŒlen”…”�”}”(hj,îh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj îubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjíubj )�”}”(hŒunsigned int gup_flags”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjEîh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjAîubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSîh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjAîubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjaîh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjAîubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoîh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjAîubj)�”}”(hŒ gup_flags”h]”hŒ gup_flags”…”�”}”(hj}îh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjAîubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjíubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÊìh²hh³jÜìh´Môubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÆìh²hh³jÜìh´Môubah}”(h]”jÁìah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÜìh´MôhjÃìh²hubj4)�”}”(hhh]”jM)�”}”(hŒ3copy a string from another process's address space.”h]”hŒ5copy a string from another process’s address space.”…”�”}”(hj§îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Môhj¤îh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÃìh²hh³jÜìh´Môubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¿îjHj¿îjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``struct task_struct *tsk`` the task of the target address space ``unsigned long addr`` start address to read from ``void *buf`` destination buffer ``int len`` number of bytes to copy ``unsigned int gup_flags`` flags modifying lookup behaviour **Description** The caller must hold a reference on **mm**. **Return** number of bytes copied from **addr** (source) to **buf** (destination); not including the trailing NUL. Always guaranteed to leave NUL-terminated buffer. On any error, return -EFAULT.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÉîh]”hŒ Parameters”…”�”}”(hjËîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÇîubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MøhjÃîubj¤)�”}”(hhh]”(j©)�”}”(hŒA``struct task_struct *tsk`` the task of the target address space ”h]”(j¯)�”}”(hŒ``struct task_struct *tsk``”h]”jS)�”}”(hjèîh]”hŒstruct task_struct *tsk”…”�”}”(hjêîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjæîubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MõhjâîubjÉ)�”}”(hhh]”jM)�”}”(hŒ$the task of the target address space”h]”hŒ$the task of the target address space”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jýîh´Mõhjþîubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjâîubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jýîh´Mõhjßîubj©)�”}”(hŒ2``unsigned long addr`` start address to read from ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hj!ïh]”hŒunsigned long addr”…”�”}”(hj#ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjïubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MöhjïubjÉ)�”}”(hhh]”jM)�”}”(hŒstart address to read from”h]”hŒstart address to read from”…”�”}”(hj:ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j6ïh´Möhj7ïubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjïubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j6ïh´Möhjßîubj©)�”}”(hŒ!``void *buf`` destination buffer ”h]”(j¯)�”}”(hŒ ``void *buf``”h]”jS)�”}”(hjZïh]”hŒ void *buf”…”�”}”(hj\ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjXïubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´M÷hjTïubjÉ)�”}”(hhh]”jM)�”}”(hŒdestination buffer”h]”hŒdestination buffer”…”�”}”(hjsïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³joïh´M÷hjpïubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjTïubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³joïh´M÷hjßîubj©)�”}”(hŒ$``int len`` number of bytes to copy ”h]”(j¯)�”}”(hŒ ``int len``”h]”jS)�”}”(hj“ïh]”hŒint len”…”�”}”(hj•ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‘ïubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´Møhj�ïubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of bytes to copy”h]”hŒnumber of bytes to copy”…”�”}”(hj¬ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¨ïh´Møhj©ïubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�ïubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¨ïh´Møhjßîubj©)�”}”(hŒ<``unsigned int gup_flags`` flags modifying lookup behaviour ”h]”(j¯)�”}”(hŒ``unsigned int gup_flags``”h]”jS)�”}”(hjÌïh]”hŒunsigned int gup_flags”…”�”}”(hjÎïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÊïubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MùhjÆïubjÉ)�”}”(hhh]”jM)�”}”(hŒ flags modifying lookup behaviour”h]”hŒ flags modifying lookup behaviour”…”�”}”(hjåïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jáïh´Mùhjâïubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÆïubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jáïh´Mùhjßîubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÃîubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjðh]”hŒ Description”…”�”}”(hj ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjðubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MûhjÃîubjM)�”}”(hŒ+The caller must hold a reference on **mm**.”h]”(hŒ$The caller must hold a reference on ”…”�”}”(hjðh²hh³Nh´NubjŽ)�”}”(hŒ**mm**”h]”hŒmm”…”�”}”(hj%ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjðubhŒ.”…”�”}”(hjðh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MúhjÃîubjM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.c”h´MühjÃîubjM)�”}”(hŒ·number of bytes copied from **addr** (source) to **buf** (destination); not including the trailing NUL. Always guaranteed to leave NUL-terminated buffer. On any error, return -EFAULT.”h]”(hŒnumber of bytes copied from ”…”�”}”(hjVðh²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hj^ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjVðubhŒ (source) to ”…”�”}”(hjVðh²hh³Nh´NubjŽ)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hjpðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjVðubhŒ (destination); not including the trailing NUL. Always guaranteed to leave NUL-terminated buffer. On any error, return -EFAULT.”…”�”}”(hjVðh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./mm/memory.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”]”(héŒ&__get_pfnblock_flags_mask (C function)”Œc.__get_pfnblock_flags_mask”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒhunsigned long __get_pfnblock_flags_mask (const struct page *page, unsigned long pfn, unsigned long mask)”h]”hù)�”}”(hŒgunsigned long __get_pfnblock_flags_mask(const struct page *page, unsigned long pfn, unsigned long mask)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj©ðh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¥ðh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸ðh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¥ðh²hh³j·ðh´Mubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÆðh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¥ðh²hh³j·ðh´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔðh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¥ðh²hh³j·ðh´Mubhÿ)�”}”(hŒ__get_pfnblock_flags_mask”h]”j)�”}”(hŒ__get_pfnblock_flags_mask”h]”hŒ__get_pfnblock_flags_mask”…”�”}”(hjæðh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjâðubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¥ðh²hh³j·ðh´Mubj )�”}”(hŒ@(const struct page *page, unsigned long pfn, unsigned long mask)”h]”(j )�”}”(hŒconst struct page *page”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjþðubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjþðubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjþðubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*ñh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjþðubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj;ñh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj8ñubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j=ñŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljèðsbŒc.__get_pfnblock_flags_mask”†”asbuh1hhjþðubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[ñh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjþðubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjiñh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjþðubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjvñh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjþðubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjúðubj )�”}”(hŒunsigned long pfn”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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‹ñubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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‹ñubj)�”}”(hŒpfn”h]”hŒpfn”…”�”}”(hjÇñh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‹ñubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjúðubj )�”}”(hŒunsigned long mask”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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Üñubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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Üñubj)�”}”(hŒmask”h]”hŒmask”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÜñubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjúðubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¥ðh²hh³j·ðh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¡ðh²hh³j·ðh´Mubah}”(h]”jœðah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j·ðh´Mhjžðh²hubj4)�”}”(hhh]”jM)�”}”(hŒKReturn the requested group of flags for a pageblock_nr_pages block of pages”h]”hŒKReturn the requested group of flags for a pageblock_nr_pages block of pages”…”�”}”(hjBòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mhj?òh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjžðh²hh³j·ðh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjZòjHjZòjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒó**Parameters** ``const struct page *page`` The page within the block of interest ``unsigned long pfn`` The target page frame number ``unsigned long mask`` mask of bits that the caller is interested in **Return** pageblock_bits flags”h]”(jM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mƒhj^òubj¤)�”}”(hhh]”(j©)�”}”(hŒB``const struct page *page`` The page within the block of interest ”h]”(j¯)�”}”(hŒ``const struct page *page``”h]”jS)�”}”(hjƒòh]”hŒconst struct page *page”…”�”}”(hj…òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�òubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M�hj}òubjÉ)�”}”(hhh]”jM)�”}”(hŒ%The page within the block of interest”h]”hŒ%The page within the block of interest”…”�”}”(hjœòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j˜òh´M�hj™òubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj}òubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j˜òh´M�hjzòubj©)�”}”(hŒ3``unsigned long pfn`` The target page frame number ”h]”(j¯)�”}”(hŒ``unsigned long pfn``”h]”jS)�”}”(hj¼òh]”hŒunsigned long pfn”…”�”}”(hj¾òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjºòubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M‚hj¶òubjÉ)�”}”(hhh]”jM)�”}”(hŒThe target page frame number”h]”hŒThe target page frame number”…”�”}”(hjÕòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÑòh´M‚hjÒòubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¶òubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÑòh´M‚hjzòubj©)�”}”(hŒE``unsigned long mask`` mask of bits that the caller is interested in ”h]”(j¯)�”}”(hŒ``unsigned long mask``”h]”jS)�”}”(hjõòh]”hŒunsigned long mask”…”�”}”(hj÷òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjóòubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MƒhjïòubjÉ)�”}”(hhh]”jM)�”}”(hŒ-mask of bits that the caller is interested in”h]”hŒ-mask of bits that the caller is interested in”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j óh´Mƒhj óubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjïòubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j óh´Mƒhjzòubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj^òubjM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M…hj^òubjM)�”}”(hŒpageblock_bits flags”h]”hŒpageblock_bits flags”…”�”}”(hjFóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.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”]”(héŒget_pfnblock_bit (C function)”Œc.get_pfnblock_bit”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ^bool get_pfnblock_bit (const struct page *page, unsigned long pfn, enum pageblock_bits pb_bit)”h]”hù)�”}”(hŒ]bool get_pfnblock_bit(const struct page *page, unsigned long pfn, enum pageblock_bits pb_bit)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjuóh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjqóh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MšubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒóh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjqóh²hh³j‚óh´Mšubhÿ)�”}”(hŒget_pfnblock_bit”h]”j)�”}”(hŒget_pfnblock_bit”h]”hŒget_pfnblock_bit”…”�”}”(hj•óh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‘óubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjqóh²hh³j‚óh´Mšubj )�”}”(hŒH(const struct page *page, unsigned long pfn, enum pageblock_bits pb_bit)”h]”(j )�”}”(hŒconst struct page *page”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj±óh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj­óubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾óh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj­óubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÌóh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj­óubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙóh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj­óubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjêóh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjçóubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jìóŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj—ósbŒc.get_pfnblock_bit”†”asbuh1hhj­óubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ôh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj­óubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj­óubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj%ôh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj­óubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj©óubj )�”}”(hŒunsigned long pfn”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj>ôh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj:ôubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLôh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj:ôubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjZôh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj:ôubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhôh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj:ôubj)�”}”(hŒpfn”h]”hŒpfn”…”�”}”(hjvôh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj:ôubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj©óubj )�”}”(hŒenum pageblock_bits pb_bit”h]”(j5)�”}”(hŒenum”h]”hŒenum”…”�”}”(hj�ôh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj‹ôubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�ôh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj‹ôubh)�”}”(hhh]”j)�”}”(hŒpageblock_bits”h]”hŒpageblock_bits”…”�”}”(hj®ôh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj«ôubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j°ôŒmodname”NŒ classname”Njpjs)�”}”jv]”jôŒc.get_pfnblock_bit”†”asbuh1hhj‹ôubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌôh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj‹ôubj)�”}”(hŒpb_bit”h]”hŒpb_bit”…”�”}”(hjÚôh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‹ôubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj©óubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjqóh²hh³j‚óh´Mšubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjmóh²hh³j‚óh´Mšubah}”(h]”jhóah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j‚óh´Mšhjjóh²hubj4)�”}”(hhh]”jM)�”}”(hŒ/Check if a standalone bit of a pageblock is set”h]”hŒ/Check if a standalone bit of a pageblock is set”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mšhjõh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjjóh²hh³j‚óh´Mšubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjõjHjõjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ÷**Parameters** ``const struct page *page`` The page within the block of interest ``unsigned long pfn`` The target page frame number ``enum pageblock_bits pb_bit`` pageblock bit to check **Return** true if the bit is set, otherwise false”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj&õh]”hŒ Parameters”…”�”}”(hj(õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj$õubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mžhj õubj¤)�”}”(hhh]”(j©)�”}”(hŒB``const struct page *page`` The page within the block of interest ”h]”(j¯)�”}”(hŒ``const struct page *page``”h]”jS)�”}”(hjEõh]”hŒconst struct page *page”…”�”}”(hjGõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjCõubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M›hj?õubjÉ)�”}”(hhh]”jM)�”}”(hŒ%The page within the block of interest”h]”hŒ%The page within the block of interest”…”�”}”(hj^õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jZõh´M›hj[õubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj?õubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jZõh´M›hj<õubj©)�”}”(hŒ3``unsigned long pfn`` The target page frame number ”h]”(j¯)�”}”(hŒ``unsigned long pfn``”h]”jS)�”}”(hj~õh]”hŒunsigned long pfn”…”�”}”(hj€õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj|õubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MœhjxõubjÉ)�”}”(hhh]”jM)�”}”(hŒThe target page frame number”h]”hŒThe target page frame number”…”�”}”(hj—õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j“õh´Mœhj”õubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjxõubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j“õh´Mœhj<õubj©)�”}”(hŒ6``enum pageblock_bits pb_bit`` pageblock bit to check ”h]”(j¯)�”}”(hŒ``enum pageblock_bits pb_bit``”h]”jS)�”}”(hj·õh]”hŒenum pageblock_bits pb_bit”…”�”}”(hj¹õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjµõubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M�hj±õubjÉ)�”}”(hhh]”jM)�”}”(hŒpageblock bit to check”h]”hŒpageblock bit to check”…”�”}”(hjÐõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÌõh´M�hjÍõubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj±õubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÌõh´M�hj<õubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj õubjM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MŸhj õubjM)�”}”(hŒ'true if the bit is set, otherwise false”h]”hŒ'true if the bit is set, otherwise false”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.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”]”(héŒ%get_pfnblock_migratetype (C function)”Œc.get_pfnblock_migratetype”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒVenum migratetype get_pfnblock_migratetype (const struct page *page, unsigned long pfn)”h]”hù)�”}”(hŒUenum migratetype get_pfnblock_migratetype(const struct page *page, unsigned long pfn)”h]”(j5)�”}”(hj‘ôh]”hŒenum”…”�”}”(hj7öh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj3öh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M°ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEöh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj3öh²hh³jDöh´M°ubh)�”}”(hhh]”j)�”}”(hŒ migratetype”h]”hŒ migratetype”…”�”}”(hjVöh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjSöubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jXöŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒget_pfnblock_migratetype”sbŒc.get_pfnblock_migratetype”†”asbuh1hhj3öh²hh³jDöh´M°ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwöh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj3öh²hh³jDöh´M°ubhÿ)�”}”(hŒget_pfnblock_migratetype”h]”j)�”}”(hjtöh]”hŒget_pfnblock_migratetype”…”�”}”(hj‰öh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj…öubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj3öh²hh³jDöh´M°ubj )�”}”(hŒ,(const struct page *page, unsigned long pfn)”h]”(j )�”}”(hŒconst struct page *page”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj¤öh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj öubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±öh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj öubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¿öh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj öubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌöh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj öubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÝöh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÚöubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jßöŒmodname”NŒ classname”Njpjs)�”}”jv]”jröŒc.get_pfnblock_migratetype”†”asbuh1hhj öubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûöh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj öubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj ÷h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj öubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj öubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjœöubj )�”}”(hŒunsigned long pfn”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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+÷ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjK÷h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj+÷ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY÷h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj+÷ubj)�”}”(hŒpfn”h]”hŒpfn”…”�”}”(hjg÷h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj+÷ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjœöubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj3öh²hh³jDöh´M°ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj/öh²hh³jDöh´M°ubah}”(h]”j*öah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jDöh´M°hj,öh²hubj4)�”}”(hhh]”jM)�”}”(hŒ%Return the migratetype of a pageblock”h]”hŒ%Return the migratetype of a pageblock”…”�”}”(hj‘÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M°hjŽ÷h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj,öh²hh³jDöh´M°ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj©÷jHj©÷jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX9**Parameters** ``const struct page *page`` The page within the block of interest ``unsigned long pfn`` The target page frame number **Return** The migratetype of the pageblock **Description** Use get_pfnblock_migratetype() if caller already has both **page** and **pfn** to save a call to page_to_pfn().”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj³÷h]”hŒ Parameters”…”�”}”(hjµ÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj±÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M´hj­÷ubj¤)�”}”(hhh]”(j©)�”}”(hŒB``const struct page *page`` The page within the block of interest ”h]”(j¯)�”}”(hŒ``const struct page *page``”h]”jS)�”}”(hjÒ÷h]”hŒconst struct page *page”…”�”}”(hjÔ÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÐ÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M±hjÌ÷ubjÉ)�”}”(hhh]”jM)�”}”(hŒ%The page within the block of interest”h]”hŒ%The page within the block of interest”…”�”}”(hjë÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jç÷h´M±hjè÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÌ÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jç÷h´M±hjÉ÷ubj©)�”}”(hŒ3``unsigned long pfn`` The target page frame number ”h]”(j¯)�”}”(hŒ``unsigned long pfn``”h]”jS)�”}”(hj øh]”hŒunsigned long pfn”…”�”}”(hj øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj øubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M²hjøubjÉ)�”}”(hhh]”jM)�”}”(hŒThe target page frame number”h]”hŒThe target page frame number”…”�”}”(hj$øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j øh´M²hj!øubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjøubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j øh´M²hjÉ÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj­÷ubjM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M´hj­÷ubjM)�”}”(hŒ The migratetype of the pageblock”h]”hŒ The migratetype of the pageblock”…”�”}”(hj\øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M´hj­÷ubjM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M¶hj­÷ubjM)�”}”(hŒoUse get_pfnblock_migratetype() if caller already has both **page** and **pfn** to save a call to page_to_pfn().”h]”(hŒ:Use get_pfnblock_migratetype() if caller already has both ”…”�”}”(hjƒøh²hh³Nh´NubjŽ)�”}”(hŒ**page**”h]”hŒpage”…”�”}”(hj‹øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjƒøubhŒ and ”…”�”}”(hjƒøh²hh³Nh´NubjŽ)�”}”(hŒ**pfn**”h]”hŒpfn”…”�”}”(hj�øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjƒøubhŒ! to save a call to page_to_pfn().”…”�”}”(hjƒøh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.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”]”(héŒ&__set_pfnblock_flags_mask (C function)”Œc.__set_pfnblock_flags_mask”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒnvoid __set_pfnblock_flags_mask (struct page *page, unsigned long pfn, unsigned long flags, unsigned long mask)”h]”hù)�”}”(hŒmvoid __set_pfnblock_flags_mask(struct page *page, unsigned long pfn, unsigned long flags, unsigned long mask)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÖøh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÒøh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MÉubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåøh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÒøh²hh³jäøh´MÉubhÿ)�”}”(hŒ__set_pfnblock_flags_mask”h]”j)�”}”(hŒ__set_pfnblock_flags_mask”h]”hŒ__set_pfnblock_flags_mask”…”�”}”(hj÷øh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjóøubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÒøh²hh³jäøh´MÉubj )�”}”(hŒO(struct page *page, unsigned long pfn, unsigned long flags, unsigned long mask)”h]”(j )�”}”(hŒstruct page *page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjùubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ùh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjùubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj1ùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj.ùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j3ùŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljùøsbŒc.__set_pfnblock_flags_mask”†”asbuh1hhjùubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQùh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjùubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj_ùh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjùubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjlùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjùubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj ùubj )�”}”(hŒunsigned long pfn”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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�ùubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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�ùubj)�”}”(hŒpfn”h]”hŒpfn”…”�”}”(hj½ùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ùubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj ùubj )�”}”(hŒunsigned long flags”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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Òùubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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Òùubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÒùubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj ùubj )�”}”(hŒunsigned long mask”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj'úh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj#úubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5úh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj#úubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjCúh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj#úubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQúh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj#úubj)�”}”(hŒmask”h]”hŒmask”…”�”}”(hj_úh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj#úubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj ùubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÒøh²hh³jäøh´MÉubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÎøh²hh³jäøh´MÉubah}”(h]”jÉøah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jäøh´MÉhjËøh²hubj4)�”}”(hhh]”jM)�”}”(hŒHSet the requested group of flags for a pageblock_nr_pages block of pages”h]”hŒHSet the requested group of flags for a pageblock_nr_pages block of pages”…”�”}”(hj‰úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MÉhj†úh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjËøh²hh³jäøh´MÉubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¡újHj¡újI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ÷**Parameters** ``struct page *page`` The page within the block of interest ``unsigned long pfn`` The target page frame number ``unsigned long flags`` The flags to set ``unsigned long mask`` mask of bits that the caller is interested in”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj«úh]”hŒ Parameters”…”�”}”(hj­úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj©úubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MÍhj¥úubj¤)�”}”(hhh]”(j©)�”}”(hŒ<``struct page *page`` The page within the block of interest ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hjÊúh]”hŒstruct page *page”…”�”}”(hjÌúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÈúubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MËhjÄúubjÉ)�”}”(hhh]”jM)�”}”(hŒ%The page within the block of interest”h]”hŒ%The page within the block of interest”…”�”}”(hjãúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jßúh´MËhjàúubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÄúubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jßúh´MËhjÁúubj©)�”}”(hŒ3``unsigned long pfn`` The target page frame number ”h]”(j¯)�”}”(hŒ``unsigned long pfn``”h]”jS)�”}”(hjûh]”hŒunsigned long pfn”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjûubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MÌhjýúubjÉ)�”}”(hhh]”jM)�”}”(hŒThe target page frame number”h]”hŒThe target page frame number”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jûh´MÌhjûubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjýúubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jûh´MÌhjÁúubj©)�”}”(hŒ)``unsigned long flags`` The flags to set ”h]”(j¯)�”}”(hŒ``unsigned long flags``”h]”jS)�”}”(hj<ûh]”hŒunsigned long flags”…”�”}”(hj>ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj:ûubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MÍhj6ûubjÉ)�”}”(hhh]”jM)�”}”(hŒThe flags to set”h]”hŒThe flags to set”…”�”}”(hjUûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jQûh´MÍhjRûubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj6ûubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jQûh´MÍhjÁúubj©)�”}”(hŒD``unsigned long mask`` mask of bits that the caller is interested in”h]”(j¯)�”}”(hŒ``unsigned long mask``”h]”jS)�”}”(hjuûh]”hŒunsigned long mask”…”�”}”(hjwûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjsûubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MÏhjoûubjÉ)�”}”(hhh]”jM)�”}”(hŒ-mask of bits that the caller is interested in”h]”hŒ-mask of bits that the caller is interested in”…”�”}”(hjŽûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MÎhj‹ûubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjoûubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³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”]”(héŒset_pfnblock_bit (C function)”Œc.set_pfnblock_bit”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ^void set_pfnblock_bit (const struct page *page, unsigned long pfn, enum pageblock_bits pb_bit)”h]”hù)�”}”(hŒ]void set_pfnblock_bit(const struct page *page, unsigned long pfn, enum pageblock_bits pb_bit)”•h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÏûh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjËûh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MâubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞûh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjËûh²hh³jÝûh´Mâubhÿ)�”}”(hŒset_pfnblock_bit”h]”j)�”}”(hŒset_pfnblock_bit”h]”hŒset_pfnblock_bit”…”�”}”(hjðûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjìûubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjËûh²hh³jÝûh´Mâubj )�”}”(hŒH(const struct page *page, unsigned long pfn, enum pageblock_bits pb_bit)”h]”(j )�”}”(hŒconst struct page *page”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj üh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjüubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjüubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj'üh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjüubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4üh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjüubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjEüh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjBüubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jGüŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljòûsbŒc.set_pfnblock_bit”†”asbuh1hhjüubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeüh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjüubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjsüh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjüubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj€üh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjüubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjüubj )�”}”(hŒunsigned long pfn”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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•üubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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•üubj)�”}”(hŒpfn”h]”hŒpfn”…”�”}”(hjÑüh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj•üubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjüubj )�”}”(hŒenum pageblock_bits pb_bit”h]”(j5)�”}”(hj‘ôh]”hŒenum”…”�”}”(hjêüh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjæüubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷üh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjæüubh)�”}”(hhh]”j)�”}”(hŒpageblock_bits”h]”hŒpageblock_bits”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjýubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j ýŒmodname”NŒ classname”Njpjs)�”}”jv]”jaüŒc.set_pfnblock_bit”†”asbuh1hhjæüubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&ýh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjæüubj)�”}”(hŒpb_bit”h]”hŒpb_bit”…”�”}”(hj4ýh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjæüubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjüubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjËûh²hh³jÝûh´Mâubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÇûh²hh³jÝûh´Mâubah}”(h]”jÂûah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÝûh´MâhjÄûh²hubj4)�”}”(hhh]”jM)�”}”(hŒ#Set a standalone bit of a pageblock”h]”hŒ#Set a standalone bit of a pageblock”…”�”}”(hj^ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mâhj[ýh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÄûh²hh³jÝûh´Mâubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjvýjHjvýjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒÀ**Parameters** ``const struct page *page`` The page within the block of interest ``unsigned long pfn`` The target page frame number ``enum pageblock_bits pb_bit`` pageblock bit to set”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj€ýh]”hŒ Parameters”…”�”}”(hj‚ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj~ýubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mæhjzýubj¤)�”}”(hhh]”(j©)�”}”(hŒB``const struct page *page`` The page within the block of interest ”h]”(j¯)�”}”(hŒ``const struct page *page``”h]”jS)�”}”(hjŸýh]”hŒconst struct page *page”…”�”}”(hj¡ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�ýubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mãhj™ýubjÉ)�”}”(hhh]”jM)�”}”(hŒ%The page within the block of interest”h]”hŒ%The page within the block of interest”…”�”}”(hj¸ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j´ýh´Mãhjµýubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj™ýubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j´ýh´Mãhj–ýubj©)�”}”(hŒ3``unsigned long pfn`` The target page frame number ”h]”(j¯)�”}”(hŒ``unsigned long pfn``”h]”jS)�”}”(hjØýh]”hŒunsigned long pfn”…”�”}”(hjÚýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÖýubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MähjÒýubjÉ)�”}”(hhh]”jM)�”}”(hŒThe target page frame number”h]”hŒThe target page frame number”…”�”}”(hjñýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jíýh´Mähjîýubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÒýubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jíýh´Mähj–ýubj©)�”}”(hŒ3``enum pageblock_bits pb_bit`` pageblock bit to set”h]”(j¯)�”}”(hŒ``enum pageblock_bits pb_bit``”h]”jS)�”}”(hjþh]”hŒenum pageblock_bits pb_bit”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjþubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mæhj þubjÉ)�”}”(hhh]”jM)�”}”(hŒpageblock bit to set”h]”hŒpageblock bit to set”…”�”}”(hj*þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Måhj'þubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj þubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j&þh´Mæhj–ýubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjzýubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒclear_pfnblock_bit (C function)”Œc.clear_pfnblock_bit”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ`void clear_pfnblock_bit (const struct page *page, unsigned long pfn, enum pageblock_bits pb_bit)”h]”hù)�”}”(hŒ_void clear_pfnblock_bit(const struct page *page, unsigned long pfn, enum pageblock_bits pb_bit)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjkþh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjgþh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MöubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzþh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjgþh²hh³jyþh´Möubhÿ)�”}”(hŒclear_pfnblock_bit”h]”j)�”}”(hŒclear_pfnblock_bit”h]”hŒclear_pfnblock_bit”…”�”}”(hjŒþh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjˆþubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjgþh²hh³jyþh´Möubj )�”}”(hŒH(const struct page *page, unsigned long pfn, enum pageblock_bits pb_bit)”h]”(j )�”}”(hŒconst struct page *page”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj¨þh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¤þubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµþh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¤þubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÃþh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¤þubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐþh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¤þubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjáþh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÞþubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jãþŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljŽþsbŒc.clear_pfnblock_bit”†”asbuh1hhj¤þubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¤þubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¤þubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤þubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj þubj )�”}”(hŒunsigned long pfn”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj5ÿh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj1ÿubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCÿh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj1ÿubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjQÿh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj1ÿubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_ÿh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj1ÿubj)�”}”(hŒpfn”h]”hŒpfn”…”�”}”(hjmÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj1ÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj þubj )�”}”(hŒenum pageblock_bits pb_bit”h]”(j5)�”}”(hj‘ôh]”hŒenum”…”�”}”(hj†ÿh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj‚ÿubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“ÿh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj‚ÿubh)�”}”(hhh]”j)�”}”(hŒpageblock_bits”h]”hŒpageblock_bits”…”�”}”(hj¤ÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¡ÿubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¦ÿŒmodname”NŒ classname”Njpjs)�”}”jv]”jýþŒc.clear_pfnblock_bit”†”asbuh1hhj‚ÿubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂÿh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj‚ÿubj)�”}”(hŒpb_bit”h]”hŒpb_bit”…”�”}”(hjÐÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‚ÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj þubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjgþh²hh³jyþh´Möubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjcþh²hh³jyþh´Möubah}”(h]”j^þah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jyþh´Möhj`þh²hubj4)�”}”(hhh]”jM)�”}”(hŒ%Clear a standalone bit of a pageblock”h]”hŒ%Clear a standalone bit of a pageblock”…”�”}”(hjúÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Möhj÷ÿh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj`þh²hh³jyþh´Möubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjjHjjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒÂ**Parameters** ``const struct page *page`` The page within the block of interest ``unsigned long pfn`` The target page frame number ``enum pageblock_bits pb_bit`` pageblock bit to clear”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Múhjubj¤)�”}”(hhh]”(j©)�”}”(hŒB``const struct page *page`` The page within the block of interest ”h]”(j¯)�”}”(hŒ``const struct page *page``”h]”jS)�”}”(hj;h]”hŒconst struct page *page”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M÷hj5ubjÉ)�”}”(hhh]”jM)�”}”(hŒ%The page within the block of interest”h]”hŒ%The page within the block of interest”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jPh´M÷hjQubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jPh´M÷hj2ubj©)�”}”(hŒ3``unsigned long pfn`` The target page frame number ”h]”(j¯)�”}”(hŒ``unsigned long pfn``”h]”jS)�”}”(hjth]”hŒunsigned long pfn”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjrubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MøhjnubjÉ)�”}”(hhh]”jM)�”}”(hŒThe target page frame number”h]”hŒThe target page frame number”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‰h´MøhjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjnubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‰h´Møhj2ubj©)�”}”(hŒ5``enum pageblock_bits pb_bit`` pageblock bit to clear”h]”(j¯)�”}”(hŒ``enum pageblock_bits pb_bit``”h]”jS)�”}”(hj­h]”hŒenum pageblock_bits pb_bit”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Múhj§ubjÉ)�”}”(hhh]”jM)�”}”(hŒpageblock bit to clear”h]”hŒpageblock bit to clear”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MùhjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÂh´Múhj2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ&set_pageblock_migratetype (C function)”Œc.set_pageblock_migratetype”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒPvoid set_pageblock_migratetype (struct page *page, enum migratetype migratetype)”h]”hù)�”}”(hŒOvoid set_pageblock_migratetype(struct page *page, enum migratetype migratetype)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjh²hh³jh´M ubhÿ)�”}”(hŒset_pageblock_migratetype”h]”j)�”}”(hŒset_pageblock_migratetype”h]”hŒset_pageblock_migratetype”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj$ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjh²hh³jh´M ubj )�”}”(hŒ1(struct page *page, enum migratetype migratetype)”h]”(j )�”}”(hŒstruct page *page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj@ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj@ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj_ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jdŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj*sbŒc.set_pageblock_migratetype”†”asbuh1hhj@ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj@ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj@ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj<ubj )�”}”(hŒenum migratetype migratetype”h]”(j5)�”}”(hj‘ôh]”hŒenum”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj²ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj²ubh)�”}”(hhh]”j)�”}”(hŒ migratetype”h]”hŒ migratetype”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÑubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÖŒmodname”NŒ classname”Njpjs)�”}”jv]”j~Œc.set_pageblock_migratetype”†”asbuh1hhj²ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj²ubj)�”}”(hŒ migratetype”h]”hŒ migratetype”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj²ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj<ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjh²hh³jh´M ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÿh²hh³jh´M ubah}”(h]”júah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jh´M hjüh²hubj4)�”}”(hhh]”jM)�”}”(hŒ"Set the migratetype of a pageblock”h]”hŒ"Set the migratetype of a pageblock”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M hj'h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjüh²hh³jh´M ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjBjHjBjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ„**Parameters** ``struct page *page`` The page within the block of interest ``enum migratetype migratetype`` migratetype to set”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjLh]”hŒ Parameters”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjJubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MhjFubj¤)�”}”(hhh]”(j©)�”}”(hŒ<``struct page *page`` The page within the block of interest ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hjkh]”hŒstruct page *page”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M hjeubjÉ)�”}”(hhh]”jM)�”}”(hŒ%The page within the block of interest”h]”hŒ%The page within the block of interest”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j€h´M hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j€h´M hjbubj©)�”}”(hŒ3``enum migratetype migratetype`` migratetype to set”h]”(j¯)�”}”(hŒ ``enum migratetype migratetype``”h]”jS)�”}”(hj¤h]”hŒenum migratetype migratetype”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M hjžubjÉ)�”}”(hhh]”jM)�”}”(hŒmigratetype to set”h]”hŒmigratetype to set”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M hjºubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjžubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¹h´M hjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjFubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ+__move_freepages_block_isolate (C function)”Œ c.__move_freepages_block_isolate”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒXbool __move_freepages_block_isolate (struct zone *zone, struct page *page, bool isolate)”h]”hù)�”}”(hŒWbool __move_freepages_block_isolate(struct zone *zone, struct page *page, bool isolate)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjúh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M-ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjúh²hh³j h´M-ubhÿ)�”}”(hŒ__move_freepages_block_isolate”h]”j)�”}”(hŒ__move_freepages_block_isolate”h]”hŒ__move_freepages_block_isolate”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjúh²hh³j h´M-ubj )�”}”(hŒ4(struct zone *zone, struct page *page, bool isolate)”h]”(j )�”}”(hŒstruct zone *zone”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj6ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj6ubh)�”}”(hhh]”j)�”}”(hŒzone”h]”hŒzone”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjUubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jZŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj sbŒ c.__move_freepages_block_isolate”†”asbuh1hhj6ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj6ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj6ubj)�”}”(hŒzone”h]”hŒzone”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj2ubj )�”}”(hŒstruct page *page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¨ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¨ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÇubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÌŒmodname”NŒ classname”Njpjs)�”}”jv]”jtŒ c.__move_freepages_block_isolate”†”asbuh1hhj¨ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¨ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¨ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¨ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj2ubj )�”}”(hŒ bool isolate”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubj)�”}”(hŒisolate”h]”hŒisolate”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj2ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjúh²hh³j h´M-ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjöh²hh³j h´M-ubah}”(h]”jñah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j h´M-hjóh²hubj4)�”}”(hhh]”jM)�”}”(hŒ+move free pages in block for page isolation”h]”hŒ+move free pages in block for page isolation”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M-hj^h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjóh²hh³j h´M-ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjyjHjyjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXö**Parameters** ``struct zone *zone`` the zone ``struct page *page`` the pageblock page ``bool isolate`` to isolate the given pageblock or unisolate it **Description** This is similar to move_freepages_block(), but handles the special case encountered in page isolation, where the block of interest might be part of a larger buddy spanning multiple pageblocks. Unlike the regular page allocator path, which moves pages while stealing buddies off the freelist, page isolation is interested in arbitrary pfn ranges that may have overlapping buddies on both ends. This function handles that. Straddling buddies are split into individual pageblocks. Only the block of interest is moved. Returns ``true`` if pages could be moved, ``false`` otherwise.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjƒh]”hŒ Parameters”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M1hj}ubj¤)�”}”(hhh]”(j©)�”}”(hŒ``struct zone *zone`` the zone ”h]”(j¯)�”}”(hŒ``struct zone *zone``”h]”jS)�”}”(hj¢h]”hŒstruct zone *zone”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M.hjœubjÉ)�”}”(hhh]”jM)�”}”(hŒthe zone”h]”hŒthe zone”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j·h´M.hj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjœubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j·h´M.hj™ubj©)�”}”(hŒ)``struct page *page`` the pageblock page ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hjÛh]”hŒstruct page *page”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M/hjÕubjÉ)�”}”(hhh]”jM)�”}”(hŒthe pageblock page”h]”hŒthe pageblock page”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jðh´M/hjñubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jðh´M/hj™ubj©)�”}”(hŒ@``bool isolate`` to isolate the given pageblock or unisolate it ”h]”(j¯)�”}”(hŒ``bool isolate``”h]”jS)�”}”(hjh]”hŒ bool isolate”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M0hjubjÉ)�”}”(hhh]”jM)�”}”(hŒ.to isolate the given pageblock or unisolate it”h]”hŒ.to isolate the given pageblock or unisolate it”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j)h´M0hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j)h´M0hj™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj}ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjOh]”hŒ Description”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M2hj}ubjM)�”}”(hŒÀThis is similar to move_freepages_block(), but handles the special case encountered in page isolation, where the block of interest might be part of a larger buddy spanning multiple pageblocks.”h]”hŒÀThis is similar to move_freepages_block(), but handles the special case encountered in page isolation, where the block of interest might be part of a larger buddy spanning multiple pageblocks.”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M1hj}ubjM)�”}”(hŒÇUnlike the regular page allocator path, which moves pages while stealing buddies off the freelist, page isolation is interested in arbitrary pfn ranges that may have overlapping buddies on both ends.”h]”hŒÇUnlike the regular page allocator path, which moves pages while stealing buddies off the freelist, page isolation is interested in arbitrary pfn ranges that may have overlapping buddies on both ends.”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M5hj}ubjM)�”}”(hŒyThis function handles that. Straddling buddies are split into individual pageblocks. Only the block of interest is moved.”h]”hŒyThis function handles that. Straddling buddies are split into individual pageblocks. Only the block of interest is moved.”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M9hj}ubjM)�”}”(hŒ>Returns ``true`` if pages could be moved, ``false`` otherwise.”h]”(hŒReturns ”…”�”}”(hj’h²hh³Nh´NubjS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj’ubhŒ if pages could be moved, ”…”�”}”(hj’h²hh³Nh´NubjS)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj’ubhŒ otherwise.”…”�”}”(hj’h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.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”]”(héŒ$__putback_isolated_page (C function)”Œc.__putback_isolated_page”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒLvoid __putback_isolated_page (struct page *page, unsigned int order, int mt)”h]”hù)�”}”(hŒKvoid __putback_isolated_page(struct page *page, unsigned int order, int mt)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjáh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mf ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjáh²hh³jóh´Mf ubhÿ)�”}”(hŒ__putback_isolated_page”h]”j)�”}”(hŒ__putback_isolated_page”h]”hŒ__putback_isolated_page”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjáh²hh³jóh´Mf ubj )�”}”(hŒ/(struct page *page, unsigned int order, int mt)”h]”(j )�”}”(hŒstruct page *page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj=ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jBŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljsbŒc.__putback_isolated_page”†”asbuh1hhjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjubj )�”}”(hŒunsigned int order”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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�ubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(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�ubj)�”}”(hŒorder”h]”hŒorder”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjubj )�”}”(hŒint mt”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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áubj)�”}”(hŒmt”h]”hŒmt”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjáubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjáh²hh³jóh´Mf ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÝh²hh³jóh´Mf ubah}”(h]”jØah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jóh´Mf hjÚh²hubj4)�”}”(hhh]”jM)�”}”(hŒ/Return a now-isolated page back where we got it”h]”hŒ/Return a now-isolated page back where we got it”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mf hj(h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÚh²hh³jóh´Mf ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjCjHjCjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX?**Parameters** ``struct page *page`` Page that was isolated ``unsigned int order`` Order of the isolated page ``int mt`` The page's pageblock's migratetype **Description** This function is meant to return a page pulled from the free lists via __isolate_free_page back to the free lists they were pulled from.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjMh]”hŒ Parameters”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjKubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mj hjGubj¤)�”}”(hhh]”(j©)�”}”(hŒ-``struct page *page`` Page that was isolated ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hjlh]”hŒstruct page *page”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mg hjfubjÉ)�”}”(hhh]”jM)�”}”(hŒPage that was isolated”h]”hŒPage that was isolated”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�h´Mg hj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjfubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�h´Mg hjcubj©)�”}”(hŒ2``unsigned int order`` Order of the isolated page ”h]”(j¯)�”}”(hŒ``unsigned int order``”h]”jS)�”}”(hj¥h]”hŒunsigned int order”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mh hjŸubjÉ)�”}”(hhh]”jM)�”}”(hŒOrder of the isolated page”h]”hŒOrder of the isolated page”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jºh´Mh hj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jºh´Mh hjcubj©)�”}”(hŒ.``int mt`` The page's pageblock's migratetype ”h]”(j¯)�”}”(hŒ ``int mt``”h]”jS)�”}”(hjÞh]”hŒint mt”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mi hjØubjÉ)�”}”(hhh]”jM)�”}”(hŒ"The page's pageblock's migratetype”h]”hŒ&The page’s pageblock’s migratetype”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jóh´Mi hjôubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjØubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jóh´Mi hjcubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjGubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mk hjGubjM)�”}”(hŒˆThis function is meant to return a page pulled from the free lists via __isolate_free_page back to the free lists they were pulled from.”h]”hŒˆThis function is meant to return a page pulled from the free lists via __isolate_free_page back to the free lists they were pulled from.”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mj hjGubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ__free_pages (C function)”Œc.__free_pages”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ9void __free_pages (struct page *page, unsigned int order)”h]”hù)�”}”(hŒ8void __free_pages(struct page *page, unsigned int order)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjZh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MªubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjZh²hh³jlh´Mªubhÿ)�”}”(hŒ __free_pages”h]”j)�”}”(hŒ __free_pages”h]”hŒ __free_pages”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj{ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjZh²hh³jlh´Mªubj )�”}”(hŒ'(struct page *page, unsigned int order)”h]”(j )�”}”(hŒstruct page *page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj—ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj—ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¶ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j»Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj�sbŒc.__free_pages”†”asbuh1hhj—ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj—ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj—ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj“ubj )�”}”(hŒunsigned int order”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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 ubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj) h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7 h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj ubj)�”}”(hŒorder”h]”hŒorder”…”�”}”(hjE h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj“ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjZh²hh³jlh´Mªubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjVh²hh³jlh´Mªubah}”(h]”jQah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jlh´MªhjSh²hubj4)�”}”(hhh]”jM)�”}”(hŒ(Free pages allocated with alloc_pages().”h]”hŒ(Free pages allocated with alloc_pages().”…”�”}”(hjo h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mªhjl h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjSh²hh³jlh´Mªubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj‡ jHj‡ jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX½**Parameters** ``struct page *page`` The page pointer returned from alloc_pages(). ``unsigned int order`` The order of the allocation. **Description** This function can free multi-page allocations that are not compound pages. It does not check that the **order** passed in matches that of the allocation, so it is easy to leak memory. Freeing more memory than was allocated will probably emit a warning. If the last reference to this page is speculative, it will be released by put_page() which only frees the first page of a non-compound allocation. To prevent the remaining pages from being leaked, we free the subsequent pages here. If you want to use the page's reference count to decide when to free the allocation, you should allocate a compound page, and use put_page() instead of __free_pages(). **Context** May be called in interrupt context or while holding a normal spinlock, but not in NMI context or while holding a raw spinlock.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj‘ h]”hŒ Parameters”…”�”}”(hj“ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M®hj‹ ubj¤)�”}”(hhh]”(j©)�”}”(hŒD``struct page *page`` The page pointer returned from alloc_pages(). ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hj° h]”hŒstruct page *page”…”�”}”(hj² h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj® ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M«hjª ubjÉ)�”}”(hhh]”jM)�”}”(hŒ-The page pointer returned from alloc_pages().”h]”hŒ-The page pointer returned from alloc_pages().”…”�”}”(hjÉ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÅ h´M«hjÆ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjª ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÅ h´M«hj§ ubj©)�”}”(hŒ4``unsigned int order`` The order of the allocation. ”h]”(j¯)�”}”(hŒ``unsigned int order``”h]”jS)�”}”(hjé h]”hŒunsigned int order”…”�”}”(hjë h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjç ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M¬hjã ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe order of the allocation.”h]”hŒThe order of the allocation.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jþ h´M¬hjÿ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjã ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jþ h´M¬hj§ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj‹ ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj$ h]”hŒ Description”…”�”}”(hj& h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj" ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M®hj‹ ubjM)�”}”(hŒþThis function can free multi-page allocations that are not compound pages. It does not check that the **order** passed in matches that of the allocation, so it is easy to leak memory. Freeing more memory than was allocated will probably emit a warning.”h]”(hŒgThis function can free multi-page allocations that are not compound pages. It does not check that the ”…”�”}”(hj: h²hh³Nh´NubjŽ)�”}”(hŒ **order**”h]”hŒorder”…”�”}”(hjB h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj: ubhŒŽ passed in matches that of the allocation, so it is easy to leak memory. Freeing more memory than was allocated will probably emit a warning.”…”�”}”(hj: h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M­hj‹ ubjM)�”}”(hX‘If the last reference to this page is speculative, it will be released by put_page() which only frees the first page of a non-compound allocation. To prevent the remaining pages from being leaked, we free the subsequent pages here. If you want to use the page's reference count to decide when to free the allocation, you should allocate a compound page, and use put_page() instead of __free_pages().”h]”hX“If the last reference to this page is speculative, it will be released by put_page() which only frees the first page of a non-compound allocation. To prevent the remaining pages from being leaked, we free the subsequent pages here. If you want to use the page’s reference count to decide when to free the allocation, you should allocate a compound page, and use put_page() instead of __free_pages().”…”�”}”(hj[ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M²hj‹ ubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjl h]”hŒContext”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M¹hj‹ ubjM)�”}”(hŒ~May be called in interrupt context or while holding a normal spinlock, but not in NMI context or while holding a raw spinlock.”h]”hŒ~May be called in interrupt context or while holding a normal spinlock, but not in NMI context or while holding a raw spinlock.”…”�”}”(hj‚ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.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”]”(héŒfree_pages (C function)”Œ c.free_pages”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ8void free_pages (unsigned long addr, unsigned int order)”h]”hù)�”}”(hŒ7void free_pages(unsigned long addr, unsigned int order)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj± h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj­ h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MÍubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀ h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj­ h²hh³j¿ h´MÍubhÿ)�”}”(hŒ free_pages”h]”j)�”}”(hŒ free_pages”h]”hŒ free_pages”…”�”}”(hjÒ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÎ ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj­ h²hh³j¿ h´MÍubj )�”}”(hŒ((unsigned long addr, unsigned int order)”h]”(j )�”}”(hŒunsigned long addr”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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ê ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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ê ubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj& h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjê ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjæ ubj )�”}”(hŒunsigned int order”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj? h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj; ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjM h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj; ubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj[ h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj; ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hji h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj; ubj)�”}”(hŒorder”h]”hŒorder”…”�”}”(hjw h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj; ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjæ ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj­ h²hh³j¿ h´MÍubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj© h²hh³j¿ h´MÍubah}”(h]”j¤ ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¿ h´MÍhj¦ h²hubj4)�”}”(hhh]”jM)�”}”(hŒ-Free pages allocated with __get_free_pages().”h]”hŒ-Free pages allocated with __get_free_pages().”…”�”}”(hj¡ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MÍhjž h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¦ h²hh³j¿ h´MÍubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¹ jHj¹ jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXg**Parameters** ``unsigned long addr`` The virtual address tied to a page returned from __get_free_pages(). ``unsigned int order`` The order of the allocation. **Description** This function behaves the same as __free_pages(). Use this function to free pages when you only have a valid virtual address. If you have the page, call __free_pages() instead.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjà h]”hŒ Parameters”…”�”}”(hjÅ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÁ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MÑhj½ ubj¤)�”}”(hhh]”(j©)�”}”(hŒ\``unsigned long addr`` The virtual address tied to a page returned from __get_free_pages(). ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hjâ h]”hŒunsigned long addr”…”�”}”(hjä h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjà ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MÎhjÜ ubjÉ)�”}”(hhh]”jM)�”}”(hŒDThe virtual address tied to a page returned from __get_free_pages().”h]”hŒDThe virtual address tied to a page returned from __get_free_pages().”…”�”}”(hjû h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j÷ h´MÎhjø ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÜ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j÷ h´MÎhjÙ ubj©)�”}”(hŒ4``unsigned int order`` The order of the allocation. ”h]”(j¯)�”}”(hŒ``unsigned int order``”h]”jS)�”}”(hj h]”hŒunsigned int order”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MÏhj ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe order of the allocation.”h]”hŒThe order of the allocation.”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j0 h´MÏhj1 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j0 h´MÏhjÙ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj½ ubjM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MÑhj½ ubjM)�”}”(hŒ°This function behaves the same as __free_pages(). Use this function to free pages when you only have a valid virtual address. If you have the page, call __free_pages() instead.”h]”hŒ°This function behaves the same as __free_pages(). Use this function to free pages when you only have a valid virtual address. If you have the page, call __free_pages() instead.”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.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”]”(héŒalloc_pages_exact (C function)”Œc.alloc_pages_exact”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ6void * alloc_pages_exact (size_t size, gfp_t gfp_mask)”h]”hù)�”}”(hŒ4void *alloc_pages_exact(size_t size, gfp_t gfp_mask)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj› h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj— h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MóubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj— h²hh³j© h´MóubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¸ h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj— h²hh³j© h´Móubhÿ)�”}”(hŒalloc_pages_exact”h]”j)�”}”(hŒalloc_pages_exact”h]”hŒalloc_pages_exact”…”�”}”(hjÉ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÅ ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj— h²hh³j© h´Móubj )�”}”(hŒ(size_t size, gfp_t gfp_mask)”h]”(j )�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjè h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjå ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jê Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljË sbŒc.alloc_pages_exact”†”asbuh1hhjá ubjÇ)�”}”(hŒ ”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 ]”jah"]”h$]”h&]”uh1jhjá ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÝ ubj )�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj2 h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj/ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j4 Œmodname”NŒ classname”Njpjs)�”}”jv]”j Œc.alloc_pages_exact”†”asbuh1hhj+ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjP h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj+ ubj)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hj^ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj+ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÝ ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj— h²hh³j© h´Móubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj“ h²hh³j© h´Móubah}”(h]”jŽ ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j© h´Móhj� h²hubj4)�”}”(hhh]”jM)�”}”(hŒ5allocate an exact number physically-contiguous pages.”h]”hŒ5allocate an exact number physically-contiguous pages.”…”�”}”(hjˆ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Móhj… h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj� h²hh³j© h´Móubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj  jHj  jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX **Parameters** ``size_t size`` the number of bytes to allocate ``gfp_t gfp_mask`` GFP flags for the allocation, must not contain __GFP_COMP **Description** This function is similar to alloc_pages(), except that it allocates the minimum number of pages to satisfy the request. alloc_pages() can only allocate memory in power-of-two pages. This function is also limited by MAX_PAGE_ORDER. Memory allocated by this function must be released by free_pages_exact(). **Return** pointer to the allocated area or ``NULL`` in case of error.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjª h]”hŒ Parameters”…”�”}”(hj¬ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¨ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M÷hj¤ ubj¤)�”}”(hhh]”(j©)�”}”(hŒ0``size_t size`` the number of bytes to allocate ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hjÉ h]”hŒ size_t size”…”�”}”(hjË h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÇ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Môhjà ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe number of bytes to allocate”h]”hŒthe number of bytes to allocate”…”�”}”(hjâ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÞ h´Môhjß ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjà ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÞ h´MôhjÀ ubj©)�”}”(hŒM``gfp_t gfp_mask`` GFP flags for the allocation, must not contain __GFP_COMP ”h]”(j¯)�”}”(hŒ``gfp_t gfp_mask``”h]”jS)�”}”(hjh]”hŒgfp_t gfp_mask”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mõhjü ubjÉ)�”}”(hhh]”jM)�”}”(hŒ9GFP flags for the allocation, must not contain __GFP_COMP”h]”hŒ9GFP flags for the allocation, must not contain __GFP_COMP”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jh´Mõhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjü ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jh´MõhjÀ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¤ ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj=h]”hŒ Description”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M÷hj¤ ubjM)�”}”(hŒ¶This function is similar to alloc_pages(), except that it allocates the minimum number of pages to satisfy the request. alloc_pages() can only allocate memory in power-of-two pages.”h]”hŒ¶This function is similar to alloc_pages(), except that it allocates the minimum number of pages to satisfy the request. alloc_pages() can only allocate memory in power-of-two pages.”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Möhj¤ ubjM)�”}”(hŒ0This function is also limited by MAX_PAGE_ORDER.”h]”hŒ0This function is also limited by MAX_PAGE_ORDER.”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Múhj¤ ubjM)�”}”(hŒIMemory allocated by this function must be released by free_pages_exact().”h]”hŒIMemory allocated by this function must be released by free_pages_exact().”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mühj¤ ubjM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mþhj¤ ubjM)�”}”(hŒ;pointer to the allocated area or ``NULL`` in case of error.”h]”(hŒ!pointer to the allocated area or ”…”�”}”(hj˜h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj˜ubhŒ in case of error.”…”�”}”(hj˜h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.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”]”(héŒ"alloc_pages_exact_nid (C function)”Œc.alloc_pages_exact_nid”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒCvoid * alloc_pages_exact_nid (int nid, size_t size, gfp_t gfp_mask)”h]”hù)�”}”(hŒAvoid *alloc_pages_exact_nid(int nid, size_t size, gfp_t gfp_mask)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÕh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÕh²hh³jçh´MubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÕh²hh³jçh´Mubhÿ)�”}”(hŒalloc_pages_exact_nid”h]”j)�”}”(hŒalloc_pages_exact_nid”h]”hŒalloc_pages_exact_nid”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÕh²hh³jçh´Mubj )�”}”(hŒ&(int nid, size_t size, gfp_t gfp_mask)”h]”(j )�”}”(hŒint nid”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubj)�”}”(hŒnid”h]”hŒnid”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjubj )�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjXubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j]Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj sbŒc.alloc_pages_exact_nid”†”asbuh1hhjTubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjTubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjTubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjubj )�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¢ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j§Œmodname”NŒ classname”Njpjs)�”}”jv]”jwŒc.alloc_pages_exact_nid”†”asbuh1hhjžubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjžubj)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjžubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÕh²hh³jçh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÑh²hh³jçh´Mubah}”(h]”jÌah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jçh´MhjÎh²hubj4)�”}”(hhh]”jM)�”}”(hŒBallocate an exact number of physically-contiguous pages on a node.”h]”hŒBallocate an exact number of physically-contiguous pages on a node.”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mhjøh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÎh²hh³jçh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjjHjjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX‡**Parameters** ``int nid`` the preferred node ID where memory should be allocated ``size_t size`` the number of bytes to allocate ``gfp_t gfp_mask`` GFP flags for the allocation, must not contain __GFP_COMP **Description** Like alloc_pages_exact(), but try to allocate on node nid first before falling back. **Return** pointer to the allocated area or ``NULL`` in case of error.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mhjubj¤)�”}”(hhh]”(j©)�”}”(hŒC``int nid`` the preferred node ID where memory should be allocated ”h]”(j¯)�”}”(hŒ ``int nid``”h]”jS)�”}”(hj<h]”hŒint nid”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mhj6ubjÉ)�”}”(hhh]”jM)�”}”(hŒ6the preferred node ID where memory should be allocated”h]”hŒ6the preferred node ID where memory should be allocated”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jQh´MhjRubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jQh´Mhj3ubj©)�”}”(hŒ0``size_t size`` the number of bytes to allocate ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hjuh]”hŒ size_t size”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjsubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MhjoubjÉ)�”}”(hhh]”jM)�”}”(hŒthe number of bytes to allocate”h]”hŒthe number of bytes to allocate”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jŠh´Mhj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjoubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŠh´Mhj3ubj©)�”}”(hŒM``gfp_t gfp_mask`` GFP flags for the allocation, must not contain __GFP_COMP ”h]”(j¯)�”}”(hŒ``gfp_t gfp_mask``”h]”jS)�”}”(hj®h]”hŒgfp_t gfp_mask”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mhj¨ubjÉ)�”}”(hhh]”jM)�”}”(hŒ9GFP flags for the allocation, must not contain __GFP_COMP”h]”hŒ9GFP flags for the allocation, must not contain __GFP_COMP”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÃh´MhjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÃh´Mhj3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjéh]”hŒ Description”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjçubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MhjubjM)�”}”(hŒTLike alloc_pages_exact(), but try to allocate on node nid first before falling back.”h]”hŒTLike alloc_pages_exact(), but try to allocate on node nid first before falling back.”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MhjubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjh]”hŒReturn”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MhjubjM)�”}”(hŒ;pointer to the allocated area or ``NULL`` in case of error.”h]”(hŒ!pointer to the allocated area or ”…”�”}”(hj&h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj&ubhŒ in case of error.”…”�”}”(hj&h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mhjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfree_pages_exact (C function)”Œc.free_pages_exact”h•Nt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ/void free_pages_exact (void *virt, size_t size)”h]”hù)�”}”(hŒ.void free_pages_exact(void *virt, size_t size)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjch²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M)ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjch²hh³juh´M)ubhÿ)�”}”(hŒfree_pages_exact”h]”j)�”}”(hŒfree_pages_exact”h]”hŒfree_pages_exact”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj„ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjch²hh³juh´M)ubj )�”}”(hŒ(void *virt, size_t size)”h]”(j )�”}”(hŒ void *virt”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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 ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj ubj)�”}”(hŒvirt”h]”hŒvirt”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjœubj )�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjæubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jëŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljŠsbŒc.free_pages_exact”†”asbuh1hhjâubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjâubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjâubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjœubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjch²hh³juh´M)ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj_h²hh³juh´M)ubah}”(h]”jZah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³juh´M)hj\h²hubj4)�”}”(hhh]”jM)�”}”(hŒ0release memory allocated via alloc_pages_exact()”h]”hŒ0release memory allocated via alloc_pages_exact()”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M)hj>h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj\h²hh³juh´M)ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjYjHjYjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒõ**Parameters** ``void *virt`` the value returned by alloc_pages_exact. ``size_t size`` size of allocation, same value as passed to alloc_pages_exact(). **Description** Release the memory allocated by a previous call to alloc_pages_exact.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjch]”hŒ Parameters”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjaubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M-hj]ubj¤)�”}”(hhh]”(j©)�”}”(hŒ8``void *virt`` the value returned by alloc_pages_exact. ”h]”(j¯)�”}”(hŒ``void *virt``”h]”jS)�”}”(hj‚h]”hŒ void *virt”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M*hj|ubjÉ)�”}”(hhh]”jM)�”}”(hŒ(the value returned by alloc_pages_exact.”h]”hŒ(the value returned by alloc_pages_exact.”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j—h´M*hj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j—h´M*hjyubj©)�”}”(hŒQ``size_t size`` size of allocation, same value as passed to alloc_pages_exact(). ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hj»h]”hŒ size_t size”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M+hjµubjÉ)�”}”(hhh]”jM)�”}”(hŒ@size of allocation, same value as passed to alloc_pages_exact().”h]”hŒ@size of allocation, same value as passed to alloc_pages_exact().”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÐh´M+hjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjµubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÐh´M+hjyubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj]ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjöh]”hŒ Description”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjôubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M-hj]ubjM)�”}”(hŒERelease the memory allocated by a previous call to alloc_pages_exact.”h]”hŒERelease the memory allocated by a previous call to alloc_pages_exact.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.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”]”(héŒnr_free_zone_pages (C function)”Œc.nr_free_zone_pages”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ-unsigned long nr_free_zone_pages (int offset)”h]”hù)�”}”(hŒ,unsigned long nr_free_zone_pages(int offset)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj7h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M<ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj7h²hh³jIh´M<ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj7h²hh³jIh´M<ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj7h²hh³jIh´M<ubhÿ)�”}”(hŒnr_free_zone_pages”h]”j)�”}”(hŒnr_free_zone_pages”h]”hŒnr_free_zone_pages”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjtubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj7h²hh³jIh´M<ubj )�”}”(hŒ (int offset)”h]”j )�”}”(hŒ int offset”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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�ubj)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjŒubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj7h²hh³jIh´M<ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj3h²hh³jIh´M<ubah}”(h]”j.ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jIh´M<hj0h²hubj4)�”}”(hhh]”jM)�”}”(hŒ+count number of pages beyond high watermark”h]”hŒ+count number of pages beyond high watermark”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M<hj×h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj0h²hh³jIh´M<ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjòjHjòjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXy**Parameters** ``int offset`` The zone index of the highest zone **Description** nr_free_zone_pages() counts the number of pages which are beyond the high watermark within all zones at or below a given zone index. For each zone, the number of pages is calculated as: nr_free_zone_pages = managed_pages - high_pages **Return** number of pages beyond high watermark.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjüh]”hŒ Parameters”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjúubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M@hjöubj¤)�”}”(hhh]”j©)�”}”(hŒ2``int offset`` The zone index of the highest zone ”h]”(j¯)�”}”(hŒ``int offset``”h]”jS)�”}”(hjh]”hŒ int offset”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M=hjubjÉ)�”}”(hhh]”jM)�”}”(hŒ"The zone index of the highest zone”h]”hŒ"The zone index of the highest zone”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j0h´M=hj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j0h´M=hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjöubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjVh]”hŒ Description”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjTubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M?hjöubjM)�”}”(hŒºnr_free_zone_pages() counts the number of pages which are beyond the high watermark within all zones at or below a given zone index. For each zone, the number of pages is calculated as:”h]”hŒºnr_free_zone_pages() counts the number of pages which are beyond the high watermark within all zones at or below a given zone index. For each zone, the number of pages is calculated as:”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M>hjöubji)�”}”(hŒ0nr_free_zone_pages = managed_pages - high_pages ”h]”jM)�”}”(hŒ/nr_free_zone_pages = managed_pages - high_pages”h]”hŒ/nr_free_zone_pages = managed_pages - high_pages”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MBhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j�h´MBhjöubjM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MDhjöubjM)�”}”(hŒ&number of pages beyond high watermark.”h]”hŒ&number of pages beyond high watermark.”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MEhjöubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!nr_free_buffer_pages (C function)”Œc.nr_free_buffer_pages”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ)unsigned long nr_free_buffer_pages (void)”h]”hù)�”}”(hŒ(unsigned long nr_free_buffer_pages(void)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj×h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M\ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj×h²hh³jéh´M\ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj×h²hh³jéh´M\ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj×h²hh³jéh´M\ubhÿ)�”}”(hŒnr_free_buffer_pages”h]”j)�”}”(hŒnr_free_buffer_pages”h]”hŒnr_free_buffer_pages”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj×h²hh³jéh´M\ubj )�”}”(hŒ(void)”h]”j )�”}”(hŒvoid”h]”jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj0ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj,ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj×h²hh³jéh´M\ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÓh²hh³jéh´M\ubah}”(h]”jÎah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jéh´M\hjÐh²hubj4)�”}”(hhh]”jM)�”}”(hŒ+count number of pages beyond high watermark”h]”hŒ+count number of pages beyond high watermark”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M\hj[h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÐh²hh³jéh´M\ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjvjHjvjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``void`` no arguments **Description** nr_free_buffer_pages() counts the number of pages which are beyond the high watermark within ZONE_DMA and ZONE_NORMAL. **Return** number of pages beyond high watermark within ZONE_DMA and ZONE_NORMAL.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj€h]”hŒ Parameters”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M`hjzubj¤)�”}”(hhh]”j©)�”}”(hŒ``void`` no arguments ”h]”(j¯)�”}”(hŒ``void``”h]”jS)�”}”(hjŸh]”hŒvoid”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Khj™ubjÉ)�”}”(hhh]”jM)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j´h´Khjµubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j´h´Khj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjzubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÚh]”hŒ Description”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjØubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´KhjzubjM)�”}”(hŒvnr_free_buffer_pages() counts the number of pages which are beyond the high watermark within ZONE_DMA and ZONE_NORMAL.”h]”hŒvnr_free_buffer_pages() counts the number of pages which are beyond the high watermark within ZONE_DMA and ZONE_NORMAL.”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M]hjzubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjh]”hŒReturn”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M`hjzubjM)�”}”(hŒFnumber of pages beyond high watermark within ZONE_DMA and ZONE_NORMAL.”h]”hŒFnumber of pages beyond high watermark within ZONE_DMA and ZONE_NORMAL.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mahjzubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ find_next_best_node (C function)”Œc.find_next_best_node”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ>int find_next_best_node (int node, nodemask_t *used_node_mask)”h]”hù)�”}”(hŒ=int find_next_best_node(int node, nodemask_t *used_node_mask)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjBh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M¨ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjBh²hh³jTh´M¨ubhÿ)�”}”(hŒfind_next_best_node”h]”j)�”}”(hŒfind_next_best_node”h]”hŒfind_next_best_node”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjcubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjBh²hh³jTh´M¨ubj )�”}”(hŒ&(int node, nodemask_t *used_node_mask)”h]”(j )�”}”(hŒint node”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubj)�”}”(hŒnode”h]”hŒnode”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj{ubj )�”}”(hŒnodemask_t *used_node_mask”h]”(h)�”}”(hhh]”j)�”}”(hŒ nodemask_t”h]”hŒ nodemask_t”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¸ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j½Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljisbŒc.find_next_best_node”†”asbuh1hhj´ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj´ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj´ubj)�”}”(hŒused_node_mask”h]”hŒused_node_mask”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj´ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj{ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjBh²hh³jTh´M¨ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj>h²hh³jTh´M¨ubah}”(h]”j9ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jTh´M¨hj;h²hubj4)�”}”(hhh]”jM)�”}”(hŒEfind the next node that should appear in a given node's fallback list”h]”hŒGfind the next node that should appear in a given node’s fallback list”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M¨hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj;h²hh³jTh´M¨ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj8jHj8jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXÀ**Parameters** ``int node`` node whose fallback list we're appending ``nodemask_t *used_node_mask`` nodemask_t of already used nodes **Description** We use a number of factors to determine which is the next node that should appear on a given node's fallback list. The node should not have appeared already in **node**'s fallback list, and it should be the next closest node according to the distance array (which contains arbitrary distance values from each node to each node in the system), and should also prefer nodes with no CPUs, since presumably they'll have very little allocation pressure on them otherwise. **Return** node id of the found node or ``NUMA_NO_NODE`` if no node is found.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjBh]”hŒ Parameters”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M¬hj<ubj¤)�”}”(hhh]”(j©)�”}”(hŒ6``int node`` node whose fallback list we're appending ”h]”(j¯)�”}”(hŒ ``int node``”h]”jS)�”}”(hjah]”hŒint node”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M©hj[ubjÉ)�”}”(hhh]”jM)�”}”(hŒ(node whose fallback list we're appending”h]”hŒ*node whose fallback list we’re appending”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jvh´M©hjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jvh´M©hjXubj©)�”}”(hŒ@``nodemask_t *used_node_mask`` nodemask_t of already used nodes ”h]”(j¯)�”}”(hŒ``nodemask_t *used_node_mask``”h]”jS)�”}”(hjšh]”hŒnodemask_t *used_node_mask”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mªhj”ubjÉ)�”}”(hhh]”jM)�”}”(hŒ nodemask_t of already used nodes”h]”hŒ nodemask_t of already used nodes”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¯h´Mªhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¯h´MªhjXubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj<ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÕh]”hŒ Description”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M¬hj<ubjM)�”}”(hXÓWe use a number of factors to determine which is the next node that should appear on a given node's fallback list. The node should not have appeared already in **node**'s fallback list, and it should be the next closest node according to the distance array (which contains arbitrary distance values from each node to each node in the system), and should also prefer nodes with no CPUs, since presumably they'll have very little allocation pressure on them otherwise.”h]”(hŒ£We use a number of factors to determine which is the next node that should appear on a given node’s fallback list. The node should not have appeared already in ”…”�”}”(hjëh²hh³Nh´NubjŽ)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjëubhX.’s fallback list, and it should be the next closest node according to the distance array (which contains arbitrary distance values from each node to each node in the system), and should also prefer nodes with no CPUs, since presumably they’ll have very little allocation pressure on them otherwise.”…”�”}”(hjëh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M«hj<ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjh]”hŒReturn”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M³hj<ubjM)�”}”(hŒBnode id of the found node or ``NUMA_NO_NODE`` if no node is found.”h]”(hŒnode id of the found node or ”…”�”}”(hj$h²hh³Nh´NubjS)�”}”(hŒ``NUMA_NO_NODE``”h]”hŒ NUMA_NO_NODE”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj$ubhŒ if no node is found.”…”�”}”(hj$h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.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”]”(héŒ free_reserved_pages (C function)”Œc.free_reserved_pages”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ@void free_reserved_pages (struct page *page, unsigned int order)”h]”hù)�”}”(hŒ?void free_reserved_pages(struct page *page, unsigned int order)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjah²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M#ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjah²hh³jsh´M#ubhÿ)�”}”(hŒfree_reserved_pages”h]”j)�”}”(hŒfree_reserved_pages”h]”hŒfree_reserved_pages”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‚ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjah²hh³jsh´M#ubj )�”}”(hŒ'(struct page *page, unsigned int order)”h]”(j )�”}”(hŒstruct page *page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjžubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjžubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj½ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÂŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljˆsbŒc.free_reserved_pages”†”asbuh1hhjžubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjžubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjžubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjžubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjšubj )�”}”(hŒunsigned int order”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubj)�”}”(hŒorder”h]”hŒorder”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjšubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjah²hh³jsh´M#ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj]h²hh³jsh´M#ubah}”(h]”jXah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jsh´M#hjZh²hubj4)�”}”(hhh]”jM)�”}”(hŒfree reserved pages”h]”hŒfree reserved pages”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M#hjsh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjZh²hh³jsh´M#ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjŽjHjŽjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXX**Parameters** ``struct page *page`` First page to free. ``unsigned int order`` The page order to free. **Description** Free pages allocated through memblock during boot, letting the buddy manage them from now on. **page** must be naturally aligned to the order and the order must not exceed MAX_PAGE_ORDER. All pages must be reserved.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj˜h]”hŒ Parameters”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M'hj’ubj¤)�”}”(hhh]”(j©)�”}”(hŒ*``struct page *page`` First page to free. ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hj·h]”hŒstruct page *page”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjµubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M$hj±ubjÉ)�”}”(hhh]”jM)�”}”(hŒFirst page to free.”h]”hŒFirst page to free.”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÌh´M$hjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÌh´M$hj®ubj©)�”}”(hŒ/``unsigned int order`` The page order to free. ”h]”(j¯)�”}”(hŒ``unsigned int order``”h]”jS)�”}”(hjðh]”hŒunsigned int order”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjîubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M%hjêubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page order to free.”h]”hŒThe page order to free.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jh´M%hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjêubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jh´M%hj®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj’ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj+h]”hŒ Description”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M'hj’ubjM)�”}”(hŒ]Free pages allocated through memblock during boot, letting the buddy manage them from now on.”h]”hŒ]Free pages allocated through memblock during boot, letting the buddy manage them from now on.”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M&hj’ubjM)�”}”(hŒy**page** must be naturally aligned to the order and the order must not exceed MAX_PAGE_ORDER. All pages must be reserved.”h]”(jŽ)�”}”(hŒ**page**”h]”hŒpage”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjPubhŒq must be naturally aligned to the order and the order must not exceed MAX_PAGE_ORDER. All pages must be reserved.”…”�”}”(hjPh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.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”]”(héŒ"setup_per_zone_wmarks (C function)”Œc.setup_per_zone_wmarks”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ!void setup_per_zone_wmarks (void)”h]”hù)�”}”(hŒ void setup_per_zone_wmarks(void)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj‰h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj‰h²hh³j›h´Mubhÿ)�”}”(hŒsetup_per_zone_wmarks”h]”j)�”}”(hŒsetup_per_zone_wmarks”h]”hŒsetup_per_zone_wmarks”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjªubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj‰h²hh³j›h´Mubj )�”}”(hŒ(void)”h]”j )�”}”(hŒvoid”h]”jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÆubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÂubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj‰h²hh³j›h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj…h²hh³j›h´Mubah}”(h]”j€ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j›h´Mhj‚h²hubj4)�”}”(hhh]”jM)�”}”(hŒIcalled when min_free_kbytes changes or when memory is hot-{added|removed}”h]”hŒIcalled when min_free_kbytes changes or when memory is hot-{added|removed}”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mhjñh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj‚h²hh³j›h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj jHj jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒª**Parameters** ``void`` no arguments **Description** Ensures that the watermark[min,low,high] values for each zone are set correctly with respect to min_free_kbytes.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mhjubj¤)�”}”(hhh]”j©)�”}”(hŒ``void`` no arguments ”h]”(j¯)�”}”(hŒ``void``”h]”jS)�”}”(hj5h]”hŒvoid”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Khj/ubjÉ)�”}”(hhh]”jM)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jJh´KhjKubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jJh´Khj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjph]”hŒ Description”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjnubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´KhjubjM)�”}”(hŒpEnsures that the watermark[min,low,high] values for each zone are set correctly with respect to min_free_kbytes.”h]”hŒpEnsures that the watermark[min,low,high] values for each zone are set correctly with respect to min_free_kbytes.”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mhjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ __free_contig_range (C function)”Œc.__free_contig_range”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒDvoid __free_contig_range (unsigned long pfn, unsigned long nr_pages)”h]”hù)�”}”(hŒCvoid __free_contig_range(unsigned long pfn, unsigned long nr_pages)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj±h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M»ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj±h²hh³jÃh´M»ubhÿ)�”}”(hŒ__free_contig_range”h]”j)�”}”(hŒ__free_contig_range”h]”hŒ__free_contig_range”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÒubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj±h²hh³jÃh´M»ubj )�”}”(hŒ+(unsigned long pfn, unsigned long nr_pages)”h]”(j )�”}”(hŒunsigned long pfn”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjîubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjîubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjîubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjîubj)�”}”(hŒpfn”h]”hŒpfn”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjîubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjêubj )�”}”(hŒunsigned long nr_pages”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj?ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj?ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj?ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj?ubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjêubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj±h²hh³jÃh´M»ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj­h²hh³jÃh´M»ubah}”(h]”j¨ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÃh´M»hjªh²hubj4)�”}”(hhh]”jM)�”}”(hŒ'Free contiguous range of order-0 pages.”h]”hŒ'Free contiguous range of order-0 pages.”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M»hj¢h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjªh²hh³jÃh´M»ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj½jHj½jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXë**Parameters** ``unsigned long pfn`` Page frame number of the first page in the range. ``unsigned long nr_pages`` Number of pages to free. **Description** For each order-0 struct page in the physically contiguous range, put a reference. Free any page who's reference count falls to zero. The implementation is functionally equivalent to, but significantly faster than calling __free_page() for each struct page in a loop. Memory allocated with alloc_pages(order>=1) then subsequently split to order-0 with split_page() is an example of appropriate contiguous pages that can be freed with this API. **Context** May be called in interrupt context or while holding a normal spinlock, but not in NMI context or while holding a raw spinlock.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÇh]”hŒ Parameters”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M¿hjÁubj¤)�”}”(hhh]”(j©)�”}”(hŒH``unsigned long pfn`` Page frame number of the first page in the range. ”h]”(j¯)�”}”(hŒ``unsigned long pfn``”h]”jS)�”}”(hjæh]”hŒunsigned long pfn”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjäubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M¼hjàubjÉ)�”}”(hhh]”jM)�”}”(hŒ1Page frame number of the first page in the range.”h]”hŒ1Page frame number of the first page in the range.”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jûh´M¼hjüubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjàubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jûh´M¼hjÝubj©)�”}”(hŒ4``unsigned long nr_pages`` Number of pages to free. ”h]”(j¯)�”}”(hŒ``unsigned long nr_pages``”h]”jS)�”}”(hjh]”hŒunsigned long nr_pages”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M½hjubjÉ)�”}”(hhh]”jM)�”}”(hŒNumber of pages to free.”h]”hŒNumber of pages to free.”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j4h´M½hj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j4h´M½hjÝubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÁubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjZh]”hŒ Description”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjXubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M¿hjÁubjM)�”}”(hX For each order-0 struct page in the physically contiguous range, put a reference. Free any page who's reference count falls to zero. The implementation is functionally equivalent to, but significantly faster than calling __free_page() for each struct page in a loop.”h]”hX For each order-0 struct page in the physically contiguous range, put a reference. Free any page who’s reference count falls to zero. The implementation is functionally equivalent to, but significantly faster than calling __free_page() for each struct page in a loop.”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M¾hjÁubjM)�”}”(hŒ¯Memory allocated with alloc_pages(order>=1) then subsequently split to order-0 with split_page() is an example of appropriate contiguous pages that can be freed with this API.”h]”hŒ¯Memory allocated with alloc_pages(order>=1) then subsequently split to order-0 with split_page() is an example of appropriate contiguous pages that can be freed with this API.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MÃhjÁubjM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MÇhjÁubjM)�”}”(hŒ~May be called in interrupt context or while holding a normal spinlock, but not in NMI context or while holding a raw spinlock.”h]”hŒ~May be called in interrupt context or while holding a normal spinlock, but not in NMI context or while holding a raw spinlock.”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.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”]”(héŒ&alloc_contig_frozen_range (C function)”Œc.alloc_contig_frozen_range”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒoint alloc_contig_frozen_range (unsigned long start, unsigned long end, acr_flags_t alloc_flags, gfp_t gfp_mask)”h]”hù)�”}”(hŒnint alloc_contig_frozen_range(unsigned long start, unsigned long end, acr_flags_t alloc_flags, gfp_t gfp_mask)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÑh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M]ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÑh²hh³jãh´M]ubhÿ)�”}”(hŒalloc_contig_frozen_range”h]”j)�”}”(hŒalloc_contig_frozen_range”h]”hŒalloc_contig_frozen_range”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjòubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÑh²hh³jãh´M]ubj )�”}”(hŒQ(unsigned long start, unsigned long end, acr_flags_t alloc_flags, gfp_t gfp_mask)”h]”(j )�”}”(hŒunsigned long start”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj ubj )�”}”(hŒunsigned long end”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj_ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj_ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjh²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_ubj)�”}”(hŒend”h]”hŒend”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj_ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj ubj )�”}”(hŒacr_flags_t alloc_flags”h]”(h)�”}”(hhh]”j)�”}”(hŒ acr_flags_t”h]”hŒ acr_flags_t”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj´ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¹Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljøsbŒc.alloc_contig_frozen_range”†”asbuh1hhj°ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj°ubj)�”}”(hŒ alloc_flags”h]”hŒ alloc_flags”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj°ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj ubj )�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjþubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jŒmodname”NŒ classname”Njpjs)�”}”jv]”jÓŒc.alloc_contig_frozen_range”†”asbuh1hhjúubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjúubj)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjúubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÑh²hh³jãh´M]ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÍh²hh³jãh´M]ubah}”(h]”jÈah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jãh´M]hjÊh²hubj4)�”}”(hhh]”jaW)�”}”(hhh]”jÕ/)�”}”(hŒ-tries to allocate given range of frozen pages”h]”jM)�”}”(hj\h]”hŒ-tries to allocate given range of frozen pages”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M]hjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjWh²hh³jkh´Nubah}”(h]”h ]”h"]”h$]”h&]”jƒWj„Wuh1j`Wh³jkh´M]hjTh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÊh²hh³jãh´M]ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj�jHj�jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX **Parameters** ``unsigned long start`` start PFN to allocate ``unsigned long end`` one-past-the-last PFN to allocate ``acr_flags_t alloc_flags`` allocation information ``gfp_t gfp_mask`` GFP mask. Node/zone/placement hints are ignored; only some action and reclaim modifiers are supported. Reclaim modifiers control allocation behavior during compaction/migration/reclaim. **Description** The PFN range does not have to be pageblock aligned. The PFN range must belong to a single zone. The first thing this routine does is attempt to MIGRATE_ISOLATE all pageblocks in the range. Once isolated, the pageblocks should not be modified by others. All frozen pages which PFN is in [start, end) are allocated for the caller, and they could be freed with free_contig_frozen_range(), free_frozen_pages() also could be used to free compound frozen pages directly. **Return** zero on success or negative error code.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj‹h]”hŒ Parameters”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mahj…ubj¤)�”}”(hhh]”(j©)�”}”(hŒ.``unsigned long start`` start PFN to allocate ”h]”(j¯)�”}”(hŒ``unsigned long start``”h]”jS)�”}”(hjªh]”hŒunsigned long start”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M^hj¤ubjÉ)�”}”(hhh]”jM)�”}”(hŒstart PFN to allocate”h]”hŒstart PFN to allocate”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¿h´M^hjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¿h´M^hj¡ubj©)�”}”(hŒ8``unsigned long end`` one-past-the-last PFN to allocate ”h]”(j¯)�”}”(hŒ``unsigned long end``”h]”jS)�”}”(hjãh]”hŒunsigned long end”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjáubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M_hjÝubjÉ)�”}”(hhh]”jM)�”}”(hŒ!one-past-the-last PFN to allocate”h]”hŒ!one-past-the-last PFN to allocate”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jøh´M_hjùubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÝubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jøh´M_hj¡ubj©)�”}”(hŒ3``acr_flags_t alloc_flags`` allocation information ”h]”(j¯)�”}”(hŒ``acr_flags_t alloc_flags``”h]”jS)�”}”(hj h]”hŒacr_flags_t alloc_flags”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M`hj ubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation information”h]”hŒallocation information”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j1 h´M`hj2 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j1 h´M`hj¡ubj©)�”}”(hŒÍ``gfp_t gfp_mask`` GFP mask. Node/zone/placement hints are ignored; only some action and reclaim modifiers are supported. Reclaim modifiers control allocation behavior during compaction/migration/reclaim. ”h]”(j¯)�”}”(hŒ``gfp_t gfp_mask``”h]”jS)�”}”(hjU h]”hŒgfp_t gfp_mask”…”�”}”(hjW h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjS ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MchjO ubjÉ)�”}”(hhh]”jM)�”}”(hŒ¹GFP mask. Node/zone/placement hints are ignored; only some action and reclaim modifiers are supported. Reclaim modifiers control allocation behavior during compaction/migration/reclaim.”h]”hŒ¹GFP mask. Node/zone/placement hints are ignored; only some action and reclaim modifiers are supported. Reclaim modifiers control allocation behavior during compaction/migration/reclaim.”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mahjk ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjO ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jj h´Mchj¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj…ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj‘ h]”hŒ Description”…”�”}”(hj“ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mehj…ubjM)�”}”(hŒ`The PFN range does not have to be pageblock aligned. The PFN range must belong to a single zone.”h]”hŒ`The PFN range does not have to be pageblock aligned. The PFN range must belong to a single zone.”…”�”}”(hj§ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mdhj…ubjM)�”}”(hŒ�The first thing this routine does is attempt to MIGRATE_ISOLATE all pageblocks in the range. Once isolated, the pageblocks should not be modified by others.”h]”hŒ�The first thing this routine does is attempt to MIGRATE_ISOLATE all pageblocks in the range. Once isolated, the pageblocks should not be modified by others.”…”�”}”(hj¶ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mghj…ubjM)�”}”(hŒÓAll frozen pages which PFN is in [start, end) are allocated for the caller, and they could be freed with free_contig_frozen_range(), free_frozen_pages() also could be used to free compound frozen pages directly.”h]”hŒÓAll frozen pages which PFN is in [start, end) are allocated for the caller, and they could be freed with free_contig_frozen_range(), free_frozen_pages() also could be used to free compound frozen pages directly.”…”�”}”(hjÅ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mkhj…ubjM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mphj…ubjM)�”}”(hŒ'zero on success or negative error code.”h]”hŒ'zero on success or negative error code.”…”�”}”(hjì h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mqhj…ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒalloc_contig_range (C function)”Œc.alloc_contig_range”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒhint alloc_contig_range (unsigned long start, unsigned long end, acr_flags_t alloc_flags, gfp_t gfp_mask)”h]”hù)�”}”(hŒgint alloc_contig_range(unsigned long start, unsigned long end, acr_flags_t alloc_flags, gfp_t gfp_mask)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj!h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*!h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj!h²hh³j)!h´Mubhÿ)�”}”(hŒalloc_contig_range”h]”j)�”}”(hŒalloc_contig_range”h]”hŒalloc_contig_range”…”�”}”(hj!sbŒc.alloc_contig_range”†”asbuh1hhjö!ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjö!ubj)�”}”(hŒ alloc_flags”h]”hŒ alloc_flags”…”�”}”(hj+"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjö!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjP!ubj )�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjG"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjD"ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jI"Œmodname”NŒ classname”Njpjs)�”}”jv]”j"Œc.alloc_contig_range”†”asbuh1hhj@"ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hje"h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj@"ubj)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hjs"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj@"ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjP!ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj!h²hh³j)!h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj!h²hh³j)!h´Mubah}”(h]”j!ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j)!h´Mhj!h²hubj4)�”}”(hhh]”jaW)�”}”(hhh]”jÕ/)�”}”(hŒ&tries to allocate given range of pages”h]”jM)�”}”(hj¢"h]”hŒ&tries to allocate given range of pages”…”�”}”(hj¤"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mhj "ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hj�"h²hh³j±"h´Nubah}”(h]”h ]”h"]”h$]”h&]”jƒWj„Wuh1j`Wh³j±"h´Mhjš"h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj!h²hh³j)!h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÇ"jHjÇ"jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXj**Parameters** ``unsigned long start`` start PFN to allocate ``unsigned long end`` one-past-the-last PFN to allocate ``acr_flags_t alloc_flags`` allocation information ``gfp_t gfp_mask`` GFP mask. **Description** This routine is a wrapper around alloc_contig_frozen_range(), it can't be used to allocate compound pages, the refcount of each allocated page will be set to one. All pages which PFN is in [start, end) are allocated for the caller, and should be freed with free_contig_range() or by manually calling __free_page() on each allocated page. **Return** zero on success or negative error code.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÑ"h]”hŒ Parameters”…”�”}”(hjÓ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÏ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MhjË"ubj¤)�”}”(hhh]”(j©)�”}”(hŒ.``unsigned long start`` start PFN to allocate ”h]”(j¯)�”}”(hŒ``unsigned long start``”h]”jS)�”}”(hjð"h]”hŒunsigned long start”…”�”}”(hjò"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjî"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mhjê"ubjÉ)�”}”(hhh]”jM)�”}”(hŒstart PFN to allocate”h]”hŒstart PFN to allocate”…”�”}”(hj #h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j#h´Mhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjê"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j#h´Mhjç"ubj©)�”}”(hŒ8``unsigned long end`` one-past-the-last PFN to allocate ”h]”(j¯)�”}”(hŒ``unsigned long end``”h]”jS)�”}”(hj)#h]”hŒunsigned long end”…”�”}”(hj+#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj'#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mhj##ubjÉ)�”}”(hhh]”jM)�”}”(hŒ!one-past-the-last PFN to allocate”h]”hŒ!one-past-the-last PFN to allocate”…”�”}”(hjB#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j>#h´Mhj?#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj##ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j>#h´Mhjç"ubj©)�”}”(hŒ3``acr_flags_t alloc_flags`` allocation information ”h]”(j¯)�”}”(hŒ``acr_flags_t alloc_flags``”h]”jS)�”}”(hjb#h]”hŒacr_flags_t alloc_flags”…”�”}”(hjd#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj`#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mhj\#ubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation information”h]”hŒallocation information”…”�”}”(hj{#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jw#h´Mhjx#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj\#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jw#h´Mhjç"ubj©)�”}”(hŒ``gfp_t gfp_mask`` GFP mask. ”h]”(j¯)�”}”(hŒ``gfp_t gfp_mask``”h]”jS)�”}”(hj›#h]”hŒgfp_t gfp_mask”…”�”}”(hj�#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj™#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mhj•#ubjÉ)�”}”(hhh]”jM)�”}”(hŒ GFP mask.”h]”hŒ GFP mask.”…”�”}”(hj´#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j°#h´Mhj±#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj•#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j°#h´Mhjç"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjË"ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÖ#h]”hŒ Description”…”�”}”(hjØ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÔ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MhjË"ubjM)�”}”(hŒ¢This routine is a wrapper around alloc_contig_frozen_range(), it can't be used to allocate compound pages, the refcount of each allocated page will be set to one.”h]”hŒ¤This routine is a wrapper around alloc_contig_frozen_range(), it can’t be used to allocate compound pages, the refcount of each allocated page will be set to one.”…”�”}”(hjì#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MhjË"ubjM)�”}”(hŒ®All pages which PFN is in [start, end) are allocated for the caller, and should be freed with free_contig_range() or by manually calling __free_page() on each allocated page.”h]”hŒ®All pages which PFN is in [start, end) are allocated for the caller, and should be freed with free_contig_range() or by manually calling __free_page() on each allocated page.”…”�”}”(hjû#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M hjË"ubjM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M hjË"ubjM)�”}”(hŒ'zero on success or negative error code.”h]”hŒ'zero on success or negative error code.”…”�”}”(hj"$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MhjË"ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ&alloc_contig_frozen_pages (C function)”Œc.alloc_contig_frozen_pages”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒostruct page * alloc_contig_frozen_pages (unsigned long nr_pages, gfp_t gfp_mask, int nid, nodemask_t *nodemask)”h]”hù)�”}”(hŒmstruct page *alloc_contig_frozen_pages(unsigned long nr_pages, gfp_t gfp_mask, int nid, nodemask_t *nodemask)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjQ$h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjM$h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MZubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_$h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjM$h²hh³j^$h´MZubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjp$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjm$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jr$Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒalloc_contig_frozen_pages”sbŒc.alloc_contig_frozen_pages”†”asbuh1hhjM$h²hh³j^$h´MZubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘$h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjM$h²hh³j^$h´MZubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjŸ$h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjM$h²hh³j^$h´MZubhÿ)�”}”(hŒalloc_contig_frozen_pages”h]”j)�”}”(hjŽ$h]”hŒalloc_contig_frozen_pages”…”�”}”(hj°$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¬$ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjM$h²hh³j^$h´MZubj )�”}”(hŒG(unsigned long nr_pages, gfp_t gfp_mask, int nid, nodemask_t *nodemask)”h]”(j )�”}”(hŒunsigned long nr_pages”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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Ç$ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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Ç$ubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÇ$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j 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 ]”jah"]”h$]”h&]”uh1jhj%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j!%Œmodname”NŒ classname”Njpjs)�”}”jv]”jŒ$Œc.alloc_contig_frozen_pages”†”asbuh1hhj%ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=%h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj%ubj)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hjK%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÃ$ubj )�”}”(hŒint nid”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjd%h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj`%ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjr%h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj`%ubj)�”}”(hŒnid”h]”hŒnid”…”�”}”(hj€%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj`%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÃ$ubj )�”}”(hŒnodemask_t *nodemask”h]”(h)�”}”(hhh]”j)�”}”(hŒ nodemask_t”h]”hŒ nodemask_t”…”�”}”(hjœ%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jž%Œmodname”NŒ classname”Njpjs)�”}”jv]”jŒ$Œc.alloc_contig_frozen_pages”†”asbuh1hhj•%ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjº%h²hh³Nh´•Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj•%ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÈ%h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj•%ubj)�”}”(hŒnodemask”h]”hŒnodemask”…”�”}”(hjÕ%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj•%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÃ$ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjM$h²hh³j^$h´MZubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjI$h²hh³j^$h´MZubah}”(h]”jD$ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j^$h´MZhjF$h²hubj4)�”}”(hhh]”jaW)�”}”(hhh]”jÕ/)�”}”(hŒ;tries to find and allocate contiguous range of frozen pages”h]”jM)�”}”(hj&h]”hŒ;tries to find and allocate contiguous range of frozen pages”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MZhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjÿ%h²hh³j&h´Nubah}”(h]”h ]”h"]”h$]”h&]”jƒWj„Wuh1j`Wh³j&h´MZhjü%h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjF$h²hh³j^$h´MZubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj)&jHj)&jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXÜ**Parameters** ``unsigned long nr_pages`` Number of contiguous pages to allocate ``gfp_t gfp_mask`` GFP mask. Node/zone/placement hints limit the search; only some action and reclaim modifiers are supported. Reclaim modifiers control allocation behavior during compaction/migration/reclaim. ``int nid`` Target node ``nodemask_t *nodemask`` Mask for other possible nodes **Description** This routine is a wrapper around alloc_contig_frozen_range(). It scans over zones on an applicable zonelist to find a contiguous pfn range which can then be tried for allocation with alloc_contig_frozen_range(). This routine is intended for allocation requests which can not be fulfilled with the buddy allocator. The allocated memory is always aligned to a page boundary. If nr_pages is a power of two, then allocated range is also guaranteed to be aligned to same nr_pages (e.g. 1GB request would be aligned to 1GB). Allocated frozen pages need be freed with free_contig_frozen_range(), or by manually calling free_frozen_pages() on each allocated frozen non-compound page, for compound frozen pages could be freed with free_frozen_pages() directly. **Return** pointer to contiguous frozen pages on success, or NULL if not successful.”h]”(jM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M^hj-&ubj¤)�”}”(hhh]”(j©)�”}”(hŒB``unsigned long nr_pages`` Number of contiguous pages to allocate ”h]”(j¯)�”}”(hŒ``unsigned long nr_pages``”h]”jS)�”}”(hjR&h]”hŒunsigned long nr_pages”…”�”}”(hjT&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjP&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M[hjL&ubjÉ)�”}”(hhh]”jM)�”}”(hŒ&Number of contiguous pages to allocate”h]”hŒ&Number of contiguous pages to allocate”…”�”}”(hjk&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jg&h´M[hjh&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjL&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jg&h´M[hjI&ubj©)�”}”(hŒÒ``gfp_t gfp_mask`` GFP mask. Node/zone/placement hints limit the search; only some action and reclaim modifiers are supported. Reclaim modifiers control allocation behavior during compaction/migration/reclaim. ”h]”(j¯)�”}”(hŒ``gfp_t gfp_mask``”h]”jS)�”}”(hj‹&h]”hŒgfp_t gfp_mask”…”�”}”(hj�&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‰&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M^hj…&ubjÉ)�”}”(hhh]”jM)�”}”(hŒ¾GFP mask. Node/zone/placement hints limit the search; only some action and reclaim modifiers are supported. Reclaim modifiers control allocation behavior during compaction/migration/reclaim.”h]”hŒ¾GFP mask. Node/zone/placement hints limit the search; only some action and reclaim modifiers are supported. Reclaim modifiers control allocation behavior during compaction/migration/reclaim.”…”�”}”(hj¤&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M\hj¡&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj…&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j &h´M^hjI&ubj©)�”}”(hŒ``int nid`` Target node ”h]”(j¯)�”}”(hŒ ``int nid``”h]”jS)�”}”(hjÅ&h]”hŒint nid”…”�”}”(hjÇ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÃ&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M_hj¿&ubjÉ)�”}”(hhh]”jM)�”}”(hŒ Target node”h]”hŒ Target node”…”�”}”(hjÞ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÚ&h´M_hjÛ&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¿&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÚ&h´M_hjI&ubj©)�”}”(hŒ7``nodemask_t *nodemask`` Mask for other possible nodes ”h]”(j¯)�”}”(hŒ``nodemask_t *nodemask``”h]”jS)�”}”(hjþ&h]”hŒnodemask_t *nodemask”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjü&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M`hjø&ubjÉ)�”}”(hhh]”jM)�”}”(hŒMask for other possible nodes”h]”hŒMask for other possible nodes”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j'h´M`hj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjø&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j'h´M`hjI&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj-&ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj9'h]”hŒ Description”…”�”}”(hj;'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj7'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mbhj-&ubjM)�”}”(hX9This routine is a wrapper around alloc_contig_frozen_range(). It scans over zones on an applicable zonelist to find a contiguous pfn range which can then be tried for allocation with alloc_contig_frozen_range(). This routine is intended for allocation requests which can not be fulfilled with the buddy allocator.”h]”hX9This routine is a wrapper around alloc_contig_frozen_range(). It scans over zones on an applicable zonelist to find a contiguous pfn range which can then be tried for allocation with alloc_contig_frozen_range(). This routine is intended for allocation requests which can not be fulfilled with the buddy allocator.”…”�”}”(hjO'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mahj-&ubjM)�”}”(hŒÌThe allocated memory is always aligned to a page boundary. If nr_pages is a power of two, then allocated range is also guaranteed to be aligned to same nr_pages (e.g. 1GB request would be aligned to 1GB).”h]”hŒÌThe allocated memory is always aligned to a page boundary. If nr_pages is a power of two, then allocated range is also guaranteed to be aligned to same nr_pages (e.g. 1GB request would be aligned to 1GB).”…”�”}”(hj^'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mghj-&ubjM)�”}”(hŒèAllocated frozen pages need be freed with free_contig_frozen_range(), or by manually calling free_frozen_pages() on each allocated frozen non-compound page, for compound frozen pages could be freed with free_frozen_pages() directly.”h]”hŒèAllocated frozen pages need be freed with free_contig_frozen_range(), or by manually calling free_frozen_pages() on each allocated frozen non-compound page, for compound frozen pages could be freed with free_frozen_pages() directly.”…”�”}”(hjm'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mkhj-&ubjM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mphj-&ubjM)�”}”(hŒIpointer to contiguous frozen pages on success, or NULL if not successful.”h]”hŒIpointer to contiguous frozen pages on success, or NULL if not successful.”…”�”}”(hj”'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mqhj-&ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒalloc_contig_pages (C function)”Œc.alloc_contig_pages”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒhstruct page * alloc_contig_pages (unsigned long nr_pages, gfp_t gfp_mask, int nid, nodemask_t *nodemask)”h]”hù)�”}”(hŒfstruct page *alloc_contig_pages(unsigned long nr_pages, gfp_t gfp_mask, int nid, nodemask_t *nodemask)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÃ'h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¿'h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M¬ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑ'h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¿'h²hh³jÐ'h´M¬ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjâ'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjß'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jä'Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒalloc_contig_pages”sbŒc.alloc_contig_pages”†”asbuh1hhj¿'h²hh³jÐ'h´M¬ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¿'h²hh³jÐ'h´M¬ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¿'h²hh³jÐ'h´M¬ubhÿ)�”}”(hŒalloc_contig_pages”h]”j)�”}”(hj(h]”hŒalloc_contig_pages”…”�”}”(hj"(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj(ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¿'h²hh³jÐ'h´M¬ubj )�”}”(hŒG(unsigned long nr_pages, gfp_t gfp_mask, int nid, nodemask_t *nodemask)”h]”(j )�”}”(hŒunsigned long nr_pages”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj=(h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj9(ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjK(h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj9(ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjY(h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj9(ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjg(h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj9(ubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hju(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj9(ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj5(ubj )�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj‘(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŽ(ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j“(Œmodname”NŒ classname”Njpjs)�”}”jv]”jþ'Œc.alloc_contig_pages”†”asbuh1hhjŠ(ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯(h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŠ(ubj)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hj½(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŠ(ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj5(ubj )�”}”(hŒint nid”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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Ò(ubj)�”}”(hŒnid”h]”hŒnid”…”�”}”(hjò(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÒ(ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj5(ubj )�”}”(hŒnodemask_t *nodemask”h]”(h)�”}”(hhh]”j)�”}”(hŒ nodemask_t”h]”hŒ nodemask_t”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj )ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j)Œmodname”NŒ classname”Njpjs)�”}”jv]”jþ'Œc.alloc_contig_pages”†”asbuh1hhj)ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,)h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj)ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj:)h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj)ubj)�”}”(hŒnodemask”h]”hŒnodemask”…”�”}”(hjG)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj5(ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¿'h²hh³jÐ'h´M¬ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj»'h²hh³jÐ'h´M¬ubah}”(h]”j¶'ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÐ'h´M¬hj¸'h²hubj4)�”}”(hhh]”jaW)�”}”(hhh]”jÕ/)�”}”(hŒ4tries to find and allocate contiguous range of pages”h]”jM)�”}”(hjv)h]”hŒ4tries to find and allocate contiguous range of pages”…”�”}”(hjx)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M¬hjt)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjq)h²hh³j…)h´Nubah}”(h]”h ]”h"]”h$]”h&]”jƒWj„Wuh1j`Wh³j…)h´M¬hjn)h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¸'h²hh³jÐ'h´M¬ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj›)jHj›)jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXA**Parameters** ``unsigned long nr_pages`` Number of contiguous pages to allocate ``gfp_t gfp_mask`` GFP mask. ``int nid`` Target node ``nodemask_t *nodemask`` Mask for other possible nodes **Description** This routine is a wrapper around alloc_contig_frozen_pages(), it can't be used to allocate compound pages, the refcount of each allocated page will be set to one. Allocated pages can be freed with free_contig_range() or by manually calling __free_page() on each allocated page. **Return** pointer to contiguous pages on success, or NULL if not successful.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¥)h]”hŒ Parameters”…”�”}”(hj§)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj£)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M°hjŸ)ubj¤)�”}”(hhh]”(j©)�”}”(hŒB``unsigned long nr_pages`` Number of contiguous pages to allocate ”h]”(j¯)�”}”(hŒ``unsigned long nr_pages``”h]”jS)�”}”(hjÄ)h]”hŒunsigned long nr_pages”…”�”}”(hjÆ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÂ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M­hj¾)ubjÉ)�”}”(hhh]”jM)�”}”(hŒ&Number of contiguous pages to allocate”h]”hŒ&Number of contiguous pages to allocate”…”�”}”(hjÝ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÙ)h´M­hjÚ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¾)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÙ)h´M­hj»)ubj©)�”}”(hŒ``gfp_t gfp_mask`` GFP mask. ”h]”(j¯)�”}”(hŒ``gfp_t gfp_mask``”h]”jS)�”}”(hjý)h]”hŒgfp_t gfp_mask”…”�”}”(hjÿ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjû)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M®hj÷)ubjÉ)�”}”(hhh]”jM)�”}”(hŒ GFP mask.”h]”hŒ GFP mask.”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j*h´M®hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj÷)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j*h´M®hj»)ubj©)�”}”(hŒ``int nid`` Target node ”h]”(j¯)�”}”(hŒ ``int nid``”h]”jS)�”}”(hj6*h]”hŒint nid”…”�”}”(hj8*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj4*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M¯hj0*ubjÉ)�”}”(hhh]”jM)�”}”(hŒ Target node”h]”hŒ Target node”…”�”}”(hjO*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jK*h´M¯hjL*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj0*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jK*h´M¯hj»)ubj©)�”}”(hŒ7``nodemask_t *nodemask`` Mask for other possible nodes ”h]”(j¯)�”}”(hŒ``nodemask_t *nodemask``”h]”jS)�”}”(hjo*h]”hŒnodemask_t *nodemask”…”�”}”(hjq*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjm*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M°hji*ubjÉ)�”}”(hhh]”jM)�”}”(hŒMask for other possible nodes”h]”hŒMask for other possible nodes”…”�”}”(hjˆ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j„*h´M°hj…*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhji*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j„*h´M°hj»)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjŸ)ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjª*h]”hŒ Description”…”�”}”(hj¬*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¨*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M²hjŸ)ubjM)�”}”(hŒ¢This routine is a wrapper around alloc_contig_frozen_pages(), it can't be used to allocate compound pages, the refcount of each allocated page will be set to one.”h]”hŒ¤This routine is a wrapper around alloc_contig_frozen_pages(), it can’t be used to allocate compound pages, the refcount of each allocated page will be set to one.”…”�”}”(hjÀ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M±hjŸ)ubjM)�”}”(hŒrAllocated pages can be freed with free_contig_range() or by manually calling __free_page() on each allocated page.”h]”hŒrAllocated pages can be freed with free_contig_range() or by manually calling __free_page() on each allocated page.”…”�”}”(hjÏ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MµhjŸ)ubjM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M¸hjŸ)ubjM)�”}”(hŒBpointer to contiguous pages on success, or NULL if not successful.”h]”hŒBpointer to contiguous pages on success, or NULL if not successful.”…”�”}”(hjö*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.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”]”(héŒ%free_contig_frozen_range (C function)”Œc.free_contig_frozen_range”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒIvoid free_contig_frozen_range (unsigned long pfn, unsigned long nr_pages)”h]”hù)�”}”(hŒHvoid free_contig_frozen_range(unsigned long pfn, unsigned long nr_pages)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj%+h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj!+h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MÍubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4+h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj!+h²hh³j3+h´MÍubhÿ)�”}”(hŒfree_contig_frozen_range”h]”j)�”}”(hŒfree_contig_frozen_range”h]”hŒfree_contig_frozen_range”…”�”}”(hjF+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjB+ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj!+h²hh³j3+h´MÍubj )�”}”(hŒ+(unsigned long pfn, unsigned long nr_pages)”h]”(j )�”}”(hŒunsigned long pfn”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjb+h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj^+ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjp+h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj^+ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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^+ubj)�”}”(hŒpfn”h]”hŒpfn”…”�”}”(hjš+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj^+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjZ+ubj )�”}”(hŒunsigned long nr_pages”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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¯+ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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¯+ubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hjë+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¯+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjZ+ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj!+h²hh³j3+h´MÍubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj+h²hh³j3+h´MÍubah}”(h]”j+ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j3+h´MÍhj+h²hubj4)�”}”(hhh]”jaW)�”}”(hhh]”jÕ/)�”}”(hŒ)free the contiguous range of frozen pages”h]”jM)�”}”(hj,h]”hŒ)free the contiguous range of frozen pages”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MÍhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hj,h²hh³j),h´Nubah}”(h]”h ]”h"]”h$]”h&]”jƒWj„Wuh1j`Wh³j),h´MÍhj,h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj+h²hh³j3+h´MÍubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj?,jHj?,jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒÞ**Parameters** ``unsigned long pfn`` start PFN to free ``unsigned long nr_pages`` Number of contiguous frozen pages to free **Description** This can be used to free the allocated compound/non-compound frozen pages.”h]”(jM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MÑhjC,ubj¤)�”}”(hhh]”(j©)�”}”(hŒ(``unsigned long pfn`` start PFN to free ”h]”(j¯)�”}”(hŒ``unsigned long pfn``”h]”jS)�”}”(hjh,h]”hŒunsigned long pfn”…”�”}”(hjj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjf,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MÎhjb,ubjÉ)�”}”(hhh]”jM)�”}”(hŒstart PFN to free”h]”hŒstart PFN to free”…”�”}”(hj�,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j},h´MÎhj~,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjb,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j},h´MÎhj_,ubj©)�”}”(hŒE``unsigned long nr_pages`` Number of contiguous frozen pages to free ”h]”(j¯)�”}”(hŒ``unsigned long nr_pages``”h]”jS)�”}”(hj¡,h]”hŒunsigned long nr_pages”…”�”}”(hj£,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjŸ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MÏhj›,ubjÉ)�”}”(hhh]”jM)�”}”(hŒ)Number of contiguous frozen pages to free”h]”hŒ)Number of contiguous frozen pages to free”…”�”}”(hjº,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¶,h´MÏhj·,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj›,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¶,h´MÏhj_,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjC,ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÜ,h]”hŒ Description”…”�”}”(hjÞ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÚ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MÑhjC,ubjM)�”}”(hŒJThis can be used to free the allocated compound/non-compound frozen pages.”h]”hŒJThis can be used to free the allocated compound/non-compound frozen pages.”…”�”}”(hjò,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MÐhjC,ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfree_contig_range (C function)”Œc.free_contig_range”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒBvoid free_contig_range (unsigned long pfn, unsigned long nr_pages)”h]”hù)�”}”(hŒAvoid free_contig_range(unsigned long pfn, unsigned long nr_pages)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj!-h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj-h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MæubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0-h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj-h²hh³j/-h´Mæubhÿ)�”}”(hŒfree_contig_range”h]”j)�”}”(hŒfree_contig_range”h]”hŒfree_contig_range”…”�”}”(hjB-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>-ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj-h²hh³j/-h´Mæubj )�”}”(hŒ+(unsigned long pfn, unsigned long nr_pages)”h]”(j )�”}”(hŒunsigned long pfn”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj^-h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjZ-ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl-h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjZ-ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjz-h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjZ-ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ-h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjZ-ubj)�”}”(hŒpfn”h]”hŒpfn”…”�”}”(hj–-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjZ-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjV-ubj )�”}”(hŒunsigned long nr_pages”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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«-ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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«-ubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hjç-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj«-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjV-ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj-h²hh³j/-h´Mæubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj-h²hh³j/-h´Mæubah}”(h]”j-ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j/-h´Mæhj-h²hubj4)�”}”(hhh]”jaW)�”}”(hhh]”jÕ/)�”}”(hŒ"free the contiguous range of pages”h]”jM)�”}”(hj.h]”hŒ"free the contiguous range of pages”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mæhj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hj.h²hh³j%.h´Nubah}”(h]”h ]”h"]”h$]”h&]”jƒWj„Wuh1j`Wh³j%.h´Mæhj.h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj-h²hh³j/-h´Mæubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj;.jHj;.jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒÌ**Parameters** ``unsigned long pfn`` start PFN to free ``unsigned long nr_pages`` Number of contiguous pages to free **Description** This can be only used to free the allocated non-compound pages.”h]”(jM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mêhj?.ubj¤)�”}”(hhh]”(j©)�”}”(hŒ(``unsigned long pfn`` start PFN to free ”h]”(j¯)�”}”(hŒ``unsigned long pfn``”h]”jS)�”}”(hjd.h]”hŒunsigned long pfn”…”�”}”(hjf.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjb.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mçhj^.ubjÉ)�”}”(hhh]”jM)�”}”(hŒstart PFN to free”h]”hŒstart PFN to free”…”�”}”(hj}.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jy.h´Mçhjz.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj^.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jy.h´Mçhj[.ubj©)�”}”(hŒ>``unsigned long nr_pages`` Number of contiguous pages to free ”h]”(j¯)�”}”(hŒ``unsigned long nr_pages``”h]”jS)�”}”(hj�.h]”hŒunsigned long nr_pages”…”�”}”(hjŸ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj›.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mèhj—.ubjÉ)�”}”(hhh]”jM)�”}”(hŒ"Number of contiguous pages to free”h]”hŒ"Number of contiguous pages to free”…”�”}”(hj¶.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j².h´Mèhj³.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj—.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j².h´Mèhj[.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj?.ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjØ.h]”hŒ Description”…”�”}”(hjÚ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÖ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mêhj?.ubjM)�”}”(hŒ?This can be only used to free the allocated non-compound pages.”h]”hŒ?This can be only used to free the allocated non-compound pages.”…”�”}”(hjî.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.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”]”(héŒalloc_pages_nolock (C function)”Œc.alloc_pages_nolock”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒOstruct page * alloc_pages_nolock (gfp_t gfp_flags, int nid, unsigned int order)”h]”hù)�”}”(hŒMstruct page *alloc_pages_nolock(gfp_t gfp_flags, int nid, unsigned int order)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj/h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MqubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+/h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj/h²hh³j*/h´Mqubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj/Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒalloc_pages_nolock”sbŒc.alloc_pages_nolock”†”asbuh1hhj/h²hh³j*/h´MqubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]/h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj/h²hh³j*/h´MqubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjk/h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj/h²hh³j*/h´Mqubhÿ)�”}”(hŒalloc_pages_nolock”h]”j)�”}”(hjZ/h]”hŒalloc_pages_nolock”…”�”}”(hj|/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjx/ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj/h²hh³j*/h´Mqubj )�”}”(hŒ.(gfp_t gfp_flags, int nid, unsigned int order)”h]”(j )�”}”(hŒgfp_t gfp_flags”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjš/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj—/ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jœ/Œmodname”NŒ classname”Njpjs)�”}”jv]”jX/Œc.alloc_pages_nolock”†”asbuh1hhj“/ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸/h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj“/ubj)�”}”(hŒ gfp_flags”h]”hŒ gfp_flags”…”�”}”(hjÆ/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj“/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj�/ubj )�”}”(hŒint nid”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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Û/ubj)�”}”(hŒnid”h]”hŒnid”…”�”}”(hjû/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÛ/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj�/ubj )�”}”(hŒunsigned int order”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj0ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"0h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj0ubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj00h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj0ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>0h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj0ubj)�”}”(hŒorder”h]”hŒorder”…”�”}”(hjL0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj�/ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj/h²hh³j*/h´Mqubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj/h²hh³j*/h´Mqubah}”(h]”j/ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j*/h´Mqhj/h²hubj4)�”}”(hhh]”jM)�”}”(hŒ3opportunistic reentrant allocation from any context”h]”hŒ3opportunistic reentrant allocation from any context”…”�”}”(hjv0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mqhjs0h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj/h²hh³j*/h´Mqubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjŽ0jHjŽ0jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``gfp_t gfp_flags`` GFP flags. Only __GFP_ACCOUNT, plus some flags that get set internally regardless (see ``gfp_nolock``) are allowed. ``int nid`` node to allocate from ``unsigned int order`` allocation order size **Description** Allocates pages of a given order from the given node. This is safe to call from any context where RCU is watching (from atomic, NMI, and also reentrant allocator -> tracepoint -> alloc_pages_nolock_noprof). Allocation is best effort and to be expected to fail easily so nobody should rely on the success. Failures are not reported via warn_alloc(). See always fail conditions below. **Return** allocated page or NULL on failure. NULL does not mean EBUSY or EAGAIN. It means ENOMEM. There is no reason to call it again and expect !NULL.”h]”(jM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Muhj’0ubj¤)�”}”(hhh]”(j©)�”}”(hŒˆ``gfp_t gfp_flags`` GFP flags. Only __GFP_ACCOUNT, plus some flags that get set internally regardless (see ``gfp_nolock``) are allowed. ”h]”(j¯)�”}”(hŒ``gfp_t gfp_flags``”h]”jS)�”}”(hj·0h]”hŒgfp_t gfp_flags”…”�”}”(hj¹0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjµ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mshj±0ubjÉ)�”}”(hhh]”jM)�”}”(hŒsGFP flags. Only __GFP_ACCOUNT, plus some flags that get set internally regardless (see ``gfp_nolock``) are allowed.”h]”(hŒWGFP flags. Only __GFP_ACCOUNT, plus some flags that get set internally regardless (see ”…”�”}”(hjÐ0h²hh³Nh´NubjS)�”}”(hŒ``gfp_nolock``”h]”hŒ gfp_nolock”…”�”}”(hjØ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÐ0ubhŒ) are allowed.”…”�”}”(hjÐ0h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´MrhjÍ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj±0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÌ0h´Mshj®0ubj©)�”}”(hŒ"``int nid`` node to allocate from ”h]”(j¯)�”}”(hŒ ``int nid``”h]”jS)�”}”(hj1h]”hŒint nid”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mthjý0ubjÉ)�”}”(hhh]”jM)�”}”(hŒnode to allocate from”h]”hŒnode to allocate from”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j1h´Mthj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjý0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j1h´Mthj®0ubj©)�”}”(hŒ-``unsigned int order`` allocation order size ”h]”(j¯)�”}”(hŒ``unsigned int order``”h]”jS)�”}”(hj<1h]”hŒunsigned int order”…”�”}”(hj>1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj:1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Muhj61ubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation order size”h]”hŒallocation order size”…”�”}”(hjU1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jQ1h´MuhjR1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj61ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jQ1h´Muhj®0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj’0ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjw1h]”hŒ Description”…”�”}”(hjy1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hju1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mwhj’0ubjM)�”}”(hX~Allocates pages of a given order from the given node. This is safe to call from any context where RCU is watching (from atomic, NMI, and also reentrant allocator -> tracepoint -> alloc_pages_nolock_noprof). Allocation is best effort and to be expected to fail easily so nobody should rely on the success. Failures are not reported via warn_alloc(). See always fail conditions below.”h]”hX~Allocates pages of a given order from the given node. This is safe to call from any context where RCU is watching (from atomic, NMI, and also reentrant allocator -> tracepoint -> alloc_pages_nolock_noprof). Allocation is best effort and to be expected to fail easily so nobody should rely on the success. Failures are not reported via warn_alloc(). See always fail conditions below.”…”�”}”(hj�1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´Mvhj’0ubjM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M}hj’0ubjM)�”}”(hŒ�allocated page or NULL on failure. NULL does not mean EBUSY or EAGAIN. It means ENOMEM. There is no reason to call it again and expect !NULL.”h]”hŒ�allocated page or NULL on failure. NULL does not mean EBUSY or EAGAIN. It means ENOMEM. There is no reason to call it again and expect !NULL.”…”�”}”(hj´1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:101: ./mm/page_alloc.c”h´M~hj’0ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒnuma_nearest_node (C function)”Œc.numa_nearest_node”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ4int numa_nearest_node (int node, unsigned int state)”h]”hù)�”}”(hŒ3int numa_nearest_node(int node, unsigned int state)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjã1h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjß1h²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjò1h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjß1h²hh³jñ1h´Mubhÿ)�”}”(hŒnuma_nearest_node”h]”j)�”}”(hŒnuma_nearest_node”h]”hŒnuma_nearest_node”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjß1h²hh³jñ1h´Mubj )�”}”(hŒ(int node, unsigned int state)”h]”(j )�”}”(hŒint node”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj 2h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj2ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.2h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj2ubj)�”}”(hŒnode”h]”hŒnode”…”�”}”(hj<2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj2ubj )�”}”(hŒunsigned int state”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjU2h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjQ2ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc2h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjQ2ubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjq2h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjQ2ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjQ2ubj)�”}”(hŒstate”h]”hŒstate”…”�”}”(hj�2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjQ2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj2ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjß1h²hh³jñ1h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÛ1h²hh³jñ1h´Mubah}”(h]”jÖ1ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jñ1h´MhjØ1h²hubj4)�”}”(hhh]”jM)�”}”(hŒFind nearest node by state”h]”hŒFind nearest node by state”…”�”}”(hj·2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´Mhj´2h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjØ1h²hh³jñ1h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÏ2jHjÏ2jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``int node`` Node id to start the search ``unsigned int state`` State to filter the search **Description** Lookup the closest node by distance if **nid** is not in state. **Return** this **node** if it is in state, otherwise the closest node by distance”h]”(jM)�”}”(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&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MhjÓ2ubj¤)�”}”(hhh]”(j©)�”}”(hŒ)``int node`` Node id to start the search ”h]”(j¯)�”}”(hŒ ``int node``”h]”jS)�”}”(hjø2h]”hŒint node”…”�”}”(hjú2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjö2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´Mhjò2ubjÉ)�”}”(hhh]”jM)�”}”(hŒNode id to start the search”h]”hŒNode id to start the search”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j 3h´Mhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjò2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j 3h´Mhjï2ubj©)�”}”(hŒ2``unsigned int state`` State to filter the search ”h]”(j¯)�”}”(hŒ``unsigned int state``”h]”jS)�”}”(hj13h]”hŒunsigned int state”…”�”}”(hj33h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj/3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´Mhj+3ubjÉ)�”}”(hhh]”jM)�”}”(hŒState to filter the search”h]”hŒState to filter the search”…”�”}”(hjJ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jF3h´MhjG3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj+3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jF3h´Mhjï2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÓ2ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjl3h]”hŒ Description”…”�”}”(hjn3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MhjÓ2ubjM)�”}”(hŒ?Lookup the closest node by distance if **nid** is not in state.”h]”(hŒ'Lookup the closest node by distance if ”…”�”}”(hj‚3h²hh³Nh´NubjŽ)�”}”(hŒ**nid**”h]”hŒnid”…”�”}”(hjŠ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‚3ubhŒ is not in state.”…”�”}”(hj‚3h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MhjÓ2ubjM)�”}”(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&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MhjÓ2ubjM)�”}”(hŒGthis **node** if it is in state, otherwise the closest node by distance”h]”(hŒthis ”…”�”}”(hj»3h²hh³Nh´NubjŽ)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hjÃ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj»3ubhŒ: if it is in state, otherwise the closest node by distance”…”�”}”(hj»3h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MhjÓ2ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"nearest_node_nodemask (C function)”Œc.nearest_node_nodemask”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ6int nearest_node_nodemask (int node, nodemask_t *mask)”h]”hù)�”}”(hŒ5int nearest_node_nodemask(int node, nodemask_t *mask)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjü3h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjø3h²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M7ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 4h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjø3h²hh³j 4h´M7ubhÿ)�”}”(hŒnearest_node_nodemask”h]”j)�”}”(hŒnearest_node_nodemask”h]”hŒnearest_node_nodemask”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjø3h²hh³j 4h´M7ubj )�”}”(hŒ(int node, nodemask_t *mask)”h]”(j )�”}”(hŒint node”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj94h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj54ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjG4h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj54ubj)�”}”(hŒnode”h]”hŒnode”…”�”}”(hjU4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj54ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj14ubj )�”}”(hŒnodemask_t *mask”h]”(h)�”}”(hhh]”j)�”}”(hŒ nodemask_t”h]”hŒ nodemask_t”…”�”}”(hjq4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjn4ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”js4Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj4sbŒc.nearest_node_nodemask”†”asbuh1hhjj4ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘4h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjj4ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjŸ4h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjj4ubj)�”}”(hŒmask”h]”hŒmask”…”�”}”(hj¬4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjj4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj14ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjø3h²hh³j 4h´M7ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjô3h²hh³j 4h´M7ubah}”(h]”jï3ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j 4h´M7hjñ3h²hubj4)�”}”(hhh]”jM)�”}”(hŒ@Find the node in **mask** at the nearest distance from **node**.”h]”(hŒFind the node in ”…”�”}”(hjÖ4h²hh³Nh´NubjŽ)�”}”(hŒ**mask**”h]”hŒmask”…”�”}”(hjÞ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÖ4ubhŒ at the nearest distance from ”…”�”}”(hjÖ4h²hh³Nh´NubjŽ)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hjð4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÖ4ubhŒ.”…”�”}”(hjÖ4h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M7hjÓ4h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjñ3h²hh³j 4h´M7ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj5jHj5jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``int node`` a valid node ID to start the search from. ``nodemask_t *mask`` a pointer to a nodemask representing the allowed nodes. **Description** This function iterates over all nodes in **mask** and calculates the distance from the starting **node**, then it returns the node ID that is the closest to **node**, or MAX_NUMNODES if no node is found. Note that **node** must be a valid node ID usable with node_distance(), providing an invalid node ID (e.g., NUMA_NO_NODE) may result in crashes or unexpected behavior.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj5h]”hŒ Parameters”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M;hj5ubj¤)�”}”(hhh]”(j©)�”}”(hŒ7``int node`` a valid node ID to start the search from. ”h]”(j¯)�”}”(hŒ ``int node``”h]”jS)�”}”(hj;5h]”hŒint node”…”�”}”(hj=5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj95ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M:hj55ubjÉ)�”}”(hhh]”jM)�”}”(hŒ)a valid node ID to start the search from.”h]”hŒ)a valid node ID to start the search from.”…”�”}”(hjT5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jP5h´M:hjQ5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj55ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jP5h´M:hj25ubj©)�”}”(hŒM``nodemask_t *mask`` a pointer to a nodemask representing the allowed nodes. ”h]”(j¯)�”}”(hŒ``nodemask_t *mask``”h]”jS)�”}”(hjt5h]”hŒnodemask_t *mask”…”�”}”(hjv5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjr5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M;hjn5ubjÉ)�”}”(hhh]”jM)�”}”(hŒ7a pointer to a nodemask representing the allowed nodes.”h]”hŒ7a pointer to a nodemask representing the allowed nodes.”…”�”}”(hj�5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‰5h´M;hjŠ5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjn5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‰5h´M;hj25ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj5ubjM)�”}”(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&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M=hj5ubjM)�”}”(hŒËThis function iterates over all nodes in **mask** and calculates the distance from the starting **node**, then it returns the node ID that is the closest to **node**, or MAX_NUMNODES if no node is found.”h]”(hŒ)This function iterates over all nodes in ”…”�”}”(hjÅ5h²hh³Nh´NubjŽ)�”}”(hŒ**mask**”h]”hŒmask”…”�”}”(hjÍ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÅ5ubhŒ/ and calculates the distance from the starting ”…”�”}”(hjÅ5h²hh³Nh´NubjŽ)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hjß5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÅ5ubhŒ5, then it returns the node ID that is the closest to ”…”�”}”(hjÅ5h²hh³Nh´NubjŽ)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hjñ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÅ5ubhŒ&, or MAX_NUMNODES if no node is found.”…”�”}”(hjÅ5h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M<hj5ubjM)�”}”(hŒ§Note that **node** must be a valid node ID usable with node_distance(), providing an invalid node ID (e.g., NUMA_NO_NODE) may result in crashes or unexpected behavior.”h]”(hŒ Note that ”…”�”}”(hj 6h²hh³Nh´NubjŽ)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj 6ubhŒ• must be a valid node ID usable with node_distance(), providing an invalid node ID (e.g., NUMA_NO_NODE) may result in crashes or unexpected behavior.”…”�”}”(hj 6h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M@hj5ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$folio_can_map_prot_numa (C function)”Œc.folio_can_map_prot_numa”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒobool folio_can_map_prot_numa (struct folio *folio, struct vm_area_struct *vma, bool is_private_single_threaded)”h]”hù)�”}”(hŒnbool folio_can_map_prot_numa(struct folio *folio, struct vm_area_struct *vma, bool is_private_single_threaded)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjK6h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjG6h²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M:ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY6h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjG6h²hh³jX6h´M:ubhÿ)�”}”(hŒfolio_can_map_prot_numa”h]”j)�”}”(hŒfolio_can_map_prot_numa”h]”hŒfolio_can_map_prot_numa”…”�”}”(hjk6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjg6ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjG6h²hh³jX6h´M:ubj )�”}”(hŒR(struct folio *folio, struct vm_area_struct *vma, bool is_private_single_threaded)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj‡6h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjƒ6ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”6h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjƒ6ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj¥6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¢6ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j§6Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljm6sbŒc.folio_can_map_prot_numa”†”asbuh1hhjƒ6ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅ6h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjƒ6ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÓ6h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjƒ6ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjà6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjƒ6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj6ubj )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjù6h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjõ6ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjõ6ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j7Œmodname”NŒ classname”Njpjs)�”}”jv]”jÁ6Œc.folio_can_map_prot_numa”†”asbuh1hhjõ6ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj57h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjõ6ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjC7h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjõ6ubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjP7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjõ6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj6ubj )�”}”(hŒbool is_private_single_threaded”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hji7h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hje7ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv7h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhje7ubj)�”}”(hŒis_private_single_threaded”h]”hŒis_private_single_threaded”…”�”}”(hj„7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhje7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj6ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjG6h²hh³jX6h´M:ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjC6h²hh³jX6h´M:ubah}”(h]”j>6ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jX6h´M:hj@6h²hubj4)�”}”(hhh]”jM)�”}”(hŒ)check whether the folio can map prot numa”h]”hŒ)check whether the folio can map prot numa”…”�”}”(hj®7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M:hj«7h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj@6h²hh³jX6h´M:ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÆ7jHjÆ7jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXn**Parameters** ``struct folio *folio`` The folio whose mapping considered for being made NUMA hintable ``struct vm_area_struct *vma`` The VMA that the folio belongs to. ``bool is_private_single_threaded`` Is this a single-threaded private VMA or not **Description** This function checks to see if the folio actually indicates that we need to make the mapping one which causes a NUMA hinting fault, as there are cases where it's simply unnecessary, and the folio's access time is adjusted for memory tiering if prot numa needed. **Return** True if the mapping of the folio needs to be changed, false otherwise.”h]”(jM)�”}”(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&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M>hjÊ7ubj¤)�”}”(hhh]”(j©)�”}”(hŒX``struct folio *folio`` The folio whose mapping considered for being made NUMA hintable ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjï7h]”hŒstruct folio *folio”…”�”}”(hjñ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjí7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M;hjé7ubjÉ)�”}”(hhh]”jM)�”}”(hŒ?The folio whose mapping considered for being made NUMA hintable”h]”hŒ?The folio whose mapping considered for being made NUMA hintable”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j8h´M;hj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjé7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j8h´M;hjæ7ubj©)�”}”(hŒB``struct vm_area_struct *vma`` The VMA that the folio belongs to. ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hj(8h]”hŒstruct vm_area_struct *vma”…”�”}”(hj*8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj&8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M<hj"8ubjÉ)�”}”(hhh]”jM)�”}”(hŒ"The VMA that the folio belongs to.”h]”hŒ"The VMA that the folio belongs to.”…”�”}”(hjA8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j=8h´M<hj>8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj"8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j=8h´M<hjæ7ubj©)�”}”(hŒQ``bool is_private_single_threaded`` Is this a single-threaded private VMA or not ”h]”(j¯)�”}”(hŒ#``bool is_private_single_threaded``”h]”jS)�”}”(hja8h]”hŒbool is_private_single_threaded”…”�”}”(hjc8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj_8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M=hj[8ubjÉ)�”}”(hhh]”jM)�”}”(hŒ,Is this a single-threaded private VMA or not”h]”hŒ,Is this a single-threaded private VMA or not”…”�”}”(hjz8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jv8h´M=hjw8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj[8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jv8h´M=hjæ7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÊ7ubjM)�”}”(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&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M?hjÊ7ubjM)�”}”(hXThis function checks to see if the folio actually indicates that we need to make the mapping one which causes a NUMA hinting fault, as there are cases where it's simply unnecessary, and the folio's access time is adjusted for memory tiering if prot numa needed.”h]”hX This function checks to see if the folio actually indicates that we need to make the mapping one which causes a NUMA hinting fault, as there are cases where it’s simply unnecessary, and the folio’s access time is adjusted for memory tiering if prot numa needed.”…”�”}”(hj²8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M>hjÊ7ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjÃ8h]”hŒReturn”…”�”}”(hjÅ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÁ8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MChjÊ7ubjM)�”}”(hŒFTrue if the mapping of the folio needs to be changed, false otherwise.”h]”hŒFTrue if the mapping of the folio needs to be changed, false otherwise.”…”�”}”(hjÙ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MDhjÊ7ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒalloc_pages_mpol (C function)”Œc.alloc_pages_mpol”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒkstruct page * alloc_pages_mpol (gfp_t gfp, unsigned int order, struct mempolicy *pol, pgoff_t ilx, int nid)”h]”hù)�”}”(hŒistruct page *alloc_pages_mpol(gfp_t gfp, unsigned int order, struct mempolicy *pol, pgoff_t ilx, int nid)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj9h²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M€ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj9h²hh³j9h´M€ ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj'9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj$9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j)9Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒalloc_pages_mpol”sbŒc.alloc_pages_mpol”†”asbuh1hhj9h²hh³j9h´M€ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjH9h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj9h²hh³j9h´M€ ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjV9h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj9h²hh³j9h´M€ ubhÿ)�”}”(hŒalloc_pages_mpol”h]”j)�”}”(hjE9h]”hŒalloc_pages_mpol”…”�”}”(hjg9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjc9ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj9h²hh³j9h´M€ ubj )�”}”(hŒL(gfp_t gfp, unsigned int order, struct mempolicy *pol, pgoff_t ilx, int nid)”h]”(j )�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj…9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‚9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j‡9Œmodname”NŒ classname”Njpjs)�”}”jv]”jC9Œc.alloc_pages_mpol”†”asbuh1hhj~9ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£9h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj~9ubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj±9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj~9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjz9ubj )�”}”(hŒunsigned int order”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÊ9h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÆ9ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØ9h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÆ9ubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjæ9h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÆ9ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjô9h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÆ9ubj)�”}”(hŒorder”h]”hŒorder”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÆ9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjz9ubj )�”}”(hŒstruct mempolicy *pol”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj:ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(:h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj:ubh)�”}”(hhh]”j)�”}”(hŒ mempolicy”h]”hŒ mempolicy”…”�”}”(hj9:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj6:ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j;:Œmodname”NŒ classname”Njpjs)�”}”jv]”jC9Œc.alloc_pages_mpol”†”asbuh1hhj:ubjÇ)�”}”(hŒ ”h]”•½hŒ ”…”�”}”(hjW:h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj:ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hje:h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj:ubj)�”}”(hŒpol”h]”hŒpol”…”�”}”(hjr:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjz9ubj )�”}”(hŒ pgoff_t ilx”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjŽ:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‹:ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j�:Œmodname”NŒ classname”Njpjs)�”}”jv]”jC9Œc.alloc_pages_mpol”†”asbuh1hhj‡:ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬:h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj‡:ubj)�”}”(hŒilx”h]”hŒilx”…”�”}”(hjº:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‡:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjz9ubj )�”}”(hŒint nid”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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Ï:ubj)�”}”(hŒnid”h]”hŒnid”…”�”}”(hjï:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÏ:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjz9ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj9h²hh³j9h´M€ ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj9h²hh³j9h´M€ ubah}”(h]”jû8ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j9h´M€ hjý8h²hubj4)�”}”(hhh]”jM)�”}”(hŒ+Allocate pages according to NUMA mempolicy.”h]”hŒ+Allocate pages according to NUMA mempolicy.”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M€ hj;h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjý8h²hh³j9h´M€ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj1;jHj1;jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX‡**Parameters** ``gfp_t gfp`` GFP flags. ``unsigned int order`` Order of the page allocation. ``struct mempolicy *pol`` Pointer to the NUMA mempolicy. ``pgoff_t ilx`` Index for interleave mempolicy (also distinguishes alloc_pages()). ``int nid`` Preferred node (usually numa_node_id() but **mpol** may override it). **Return** The page on success or NULL if allocation fails.”h]”(jM)�”}”(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&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M„ hj5;ubj¤)�”}”(hhh]”(j©)�”}”(hŒ``gfp_t gfp`` GFP flags. ”h]”(j¯)�”}”(hŒ ``gfp_t gfp``”h]”jS)�”}”(hjZ;h]”hŒ gfp_t gfp”…”�”}”(hj\;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjX;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M� hjT;ubjÉ)�”}”(hhh]”jM)�”}”(hŒ GFP flags.”h]”hŒ GFP flags.”…”�”}”(hjs;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jo;h´M� hjp;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjT;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jo;h´M� hjQ;ubj©)�”}”(hŒ5``unsigned int order`` Order of the page allocation. ”h]”(j¯)�”}”(hŒ``unsigned int order``”h]”jS)�”}”(hj“;h]”hŒunsigned int order”…”�”}”(hj•;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‘;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M‚ hj�;ubjÉ)�”}”(hhh]”jM)�”}”(hŒOrder of the page allocation.”h]”hŒOrder of the page allocation.”…”�”}”(hj¬;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¨;h´M‚ hj©;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¨;h´M‚ hjQ;ubj©)�”}”(hŒ9``struct mempolicy *pol`` Pointer to the NUMA mempolicy. ”h]”(j¯)�”}”(hŒ``struct mempolicy *pol``”h]”jS)�”}”(hjÌ;h]”hŒstruct mempolicy *pol”…”�”}”(hjÎ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÊ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´Mƒ hjÆ;ubjÉ)�”}”(hhh]”jM)�”}”(hŒPointer to the NUMA mempolicy.”h]”hŒPointer to the NUMA mempolicy.”…”�”}”(hjå;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³já;h´Mƒ hjâ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÆ;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³já;h´Mƒ hjQ;ubj©)�”}”(hŒS``pgoff_t ilx`` Index for interleave mempolicy (also distinguishes alloc_pages()). ”h]”(j¯)�”}”(hŒ``pgoff_t ilx``”h]”jS)�”}”(hj<h]”hŒ pgoff_t ilx”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M„ hjÿ;ubjÉ)�”}”(hhh]”jM)�”}”(hŒBIndex for interleave mempolicy (also distinguishes alloc_pages()).”h]”hŒBIndex for interleave mempolicy (also distinguishes alloc_pages()).”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j<h´M„ hj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÿ;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j<h´M„ hjQ;ubj©)�”}”(hŒR``int nid`` Preferred node (usually numa_node_id() but **mpol** may override it). ”h]”(j¯)�”}”(hŒ ``int nid``”h]”jS)�”}”(hj><h]”hŒint nid”…”�”}”(hj@<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj<<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M… hj8<ubjÉ)�”}”(hhh]”jM)�”}”(hŒEPreferred node (usually numa_node_id() but **mpol** may override it).”h]”(hŒ+Preferred node (usually numa_node_id() but ”…”�”}”(hjW<h²hh³Nh´NubjŽ)�”}”(hŒ**mpol**”h]”hŒmpol”…”�”}”(hj_<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjW<ubhŒ may override it).”…”�”}”(hjW<h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jS<h´M… hjT<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj8<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jS<h´M… hjQ;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj5;ubjM)�”}”(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&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M‡ hj5;ubjM)�”}”(hŒ0The page on success or NULL if allocation fails.”h]”hŒ0The page on success or NULL if allocation fails.”…”�”}”(hj¡<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.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”]”(héŒvma_alloc_folio (C function)”Œc.vma_alloc_folio”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒestruct folio * vma_alloc_folio (gfp_t gfp, int order, struct vm_area_struct *vma, unsigned long addr)”h]”hù)�”}”(hŒcstruct folio *vma_alloc_folio(gfp_t gfp, int order, struct vm_area_struct *vma, unsigned long addr)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÐ<h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÌ<h²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MÓ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ<h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÌ<h²hh³jÝ<h´MÓ ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjï<h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjì<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jñ<Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒvma_alloc_folio”sbŒc.vma_alloc_folio”†”asbuh1hhjÌ<h²hh³jÝ<h´MÓ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÌ<h²hh³jÝ<h´MÓ ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÌ<h²hh³jÝ<h´MÓ ubhÿ)�”}”(hŒvma_alloc_folio”h]”j)�”}”(hj =h]”hŒvma_alloc_folio”…”�”}”(hj/=h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj+=ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÌ<h²hh³jÝ<h´MÓ ubj )�”}”(hŒF(gfp_t gfp, int order, struct vm_area_struct *vma, unsigned long addr)”h]”(j )�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjM=h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjJ=ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jO=Œmodname”NŒ classname”Njpjs)�”}”jv]”j =Œc.vma_alloc_folio”†”asbuh1hhjF=ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjk=h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjF=ubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjy=h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjF=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjB=ubj )�”}”(hŒ int order”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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Ž=ubj)�”}”(hŒorder”h]”hŒorder”…”�”}”(hj®=h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŽ=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjB=ubj )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÇ=h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÃ=ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ=h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÃ=ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjå=h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjâ=ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jç=Œmodname”NŒ classname”Njpjs)�”}”jv]”j =Œc.vma_alloc_folio”†”asbuh1hhjÃ=ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÃ=ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÃ=ubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÃ=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjB=ubj )�”}”(hŒunsigned long addr”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj7>h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj3>ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjE>h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj3>ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjS>h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj3>ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hja>h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj3>ubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjo>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3>ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjB=ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÌ<h²hh³jÝ<h´MÓ ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÈ<h²hh³jÝ<h´MÓ ubah}”(h]”jÃ<ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÝ<h´MÓ hjÅ<h²hubj4)�”}”(hhh]”jM)�”}”(hŒAllocate a folio for a VMA.”h]”hŒAllocate a folio for a VMA.”…”�”}”(hj™>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MÓ hj–>h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÅ<h²hh³jÝ<h´MÓ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj±>jHj±>jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX‘**Parameters** ``gfp_t gfp`` GFP flags. ``int order`` Order of the folio. ``struct vm_area_struct *vma`` Pointer to VMA. ``unsigned long addr`` Virtual address of the allocation. Must be inside **vma**. **Description** Allocate a folio for a specific address in **vma**, using the appropriate NUMA policy. The caller must hold the mmap_lock of the mm_struct of the VMA to prevent it from going away. Should be used for all allocations for folios that will be mapped into user space, excepting hugetlbfs, and excepting where direct use of folio_alloc_mpol() is more appropriate. **Return** The folio on success or NULL if allocation fails.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj»>h]”hŒ Parameters”…”�”}”(hj½>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¹>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M× hjµ>ubj¤)�”}”(hhh]”(j©)�”}”(hŒ``gfp_t gfp`` GFP flags. ”h]”(j¯)�”}”(hŒ ``gfp_t gfp``”h]”jS)�”}”(hjÚ>h]”hŒ gfp_t gfp”…”�”}”(hjÜ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjØ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MÔ hjÔ>ubjÉ)�”}”(hhh]”jM)�”}”(hŒ GFP flags.”h]”hŒ GFP flags.”…”�”}”(hjó>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jï>h´MÔ hjð>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÔ>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jï>h´MÔ hjÑ>ubj©)�”}”(hŒ"``int order`` Order of the folio. ”h]”(j¯)�”}”(hŒ ``int order``”h]”jS)�”}”(hj?h]”hŒ int order”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MÕ hj ?ubjÉ)�”}”(hhh]”jM)�”}”(hŒOrder of the folio.”h]”hŒOrder of the folio.”…”�”}”(hj,?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j(?h´MÕ hj)?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j(?h´MÕ hjÑ>ubj©)�”}”(hŒ/``struct vm_area_struct *vma`` Pointer to VMA. ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hjL?h]”hŒstruct vm_area_struct *vma”…”�”}”(hjN?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjJ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MÖ hjF?ubjÉ)�”}”(hhh]”jM)�”}”(hŒPointer to VMA.”h]”hŒPointer to VMA.”…”�”}”(hje?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ja?h´MÖ hjb?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjF?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³ja?h´MÖ hjÑ>ubj©)�”}”(hŒS``unsigned long addr`` Virtual address of the allocation. Must be inside **vma**. ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hj…?h]”hŒunsigned long addr”…”�”}”(hj‡?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjƒ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M× hj?ubjÉ)�”}”(hhh]”jM)�”}”(hŒ;Virtual address of the allocation. Must be inside **vma**.”h]”(hŒ3Virtual address of the allocation. Must be inside ”…”�”}”(hjž?h²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hj¦?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjž?ubhŒ.”…”�”}”(hjž?h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jš?h´M× hj›?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jš?h´M× hjÑ>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjµ>ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÒ?h]”hŒ Description”…”�”}”(hjÔ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÐ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MÙ hjµ>ubjM)�”}”(hXhAllocate a folio for a specific address in **vma**, using the appropriate NUMA policy. The caller must hold the mmap_lock of the mm_struct of the VMA to prevent it from going away. Should be used for all allocations for folios that will be mapped into user space, excepting hugetlbfs, and excepting where direct use of folio_alloc_mpol() is more appropriate.”h]”(hŒ+Allocate a folio for a specific address in ”…”�”}”(hjè?h²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjð?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjè?ubhX6, using the appropriate NUMA policy. The caller must hold the mmap_lock of the mm_struct of the VMA to prevent it from going away. Should be used for all allocations for folios that will be mapped into user space, excepting hugetlbfs, and excepting where direct use of folio_alloc_mpol() is more appropriate.”…”�”}”(hjè?h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MØ hjµ>ubjM)�”}”(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&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MÞ hjµ>ubjM)�”}”(hŒ1The folio on success or NULL if allocation fails.”h]”hŒ1The folio on success or NULL if allocation fails.”…”�”}”(hj!@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.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”]”(héŒalloc_pages (C function)”Œ c.alloc_pages”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ9struct page * alloc_pages (gfp_t gfp, unsigned int order)”h]”hù)�”}”(hŒ7struct page *alloc_pages(gfp_t gfp, unsigned int order)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjP@h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjL@h²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^@h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjL@h²hh³j]@h´M ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjo@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjl@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jq@Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒ alloc_pages”sbŒ c.alloc_pages”†”asbuh1hhjL@h²hh³j]@h´M ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�@h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjL@h²hh³j]@h´M ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjž@h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjL@h²hh³j]@h´M ubhÿ)�”}”(hŒ alloc_pages”h]”j)�”}”(hj�@h]”hŒ alloc_pages”…”�”}”(hj¯@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj«@ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjL@h²hh³j]@h´M ubj )�”}”(hŒ(gfp_t gfp, unsigned int order)”h]”(j )�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjÍ@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÊ@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÏ@Œmodname”NŒ classname”Njpjs)�”}”jv]”j‹@Œ c.alloc_pages”†”asbuh1hhjÆ@ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjë@h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÆ@ubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjù@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÆ@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÂ@ubj )�”}”(hŒunsigned int order”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjAubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Ah²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjAubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj.Ah²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjAubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHubj )�”}”(hŒstruct mempolicy **mpol”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjˆHh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj„HubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•Hh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj„Hubh)�”}”(hhh]”j)�”}”(hŒ mempolicy”h]”hŒ mempolicy”…”�”}”(hj¦Hh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj£Hubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¨HŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj,HsbŒc.mpol_parse_str”†”asbuh1hhj„HubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆHh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj„HubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÔHh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj„HubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjáHh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj„Hubj)�”}”(hŒmpol”h]”hŒmpol”…”�”}”(hjîHh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj„Hubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj>Hubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjHh²hh³jHh´MO ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjHh²hh³jHh´MO ubah}”(h]”jüGah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jHh´MO hjþGh²hubj4)�”}”(hhh]”jM)�”}”(hŒ7parse string to mempolicy, for tmpfs mpol mount option.”h]”hŒ7parse string to mempolicy, for tmpfs mpol mount option.”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MO hjIh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjþGh²hh³jHh´MO ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj0IjHj0IjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX **Parameters** ``char *str`` string containing mempolicy to parse ``struct mempolicy **mpol`` pointer to struct mempolicy pointer, returned on success. **Description** Format of input: [=][:] **Return** ``0`` on success, else ``1``”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj:Ih]”hŒ Parameters”…”�”}”(hj[=][:] ”h]”(j¯)�”}”(hŒFormat of input:”h]”hŒFormat of input:”…”�”}”(hjêIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MS hjæIubjÉ)�”}”(hhh]”jM)�”}”(hŒ[=][:]”h]”hŒ[=][:]”…”�”}”(hjüIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jøIh´MS hjùIubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjæIubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jøIh´MS hjãIubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj4IubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjJh]”hŒReturn”…”�”}”(hj Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjJubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MU hj4IubjM)�”}”(hŒ``0`` on success, else ``1``”h]”(jS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hj8Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj4JubhŒ on success, else ”…”�”}”(hj4Jh²hh³Nh´NubjS)�”}”(hŒ``1``”h]”hŒ1”…”�”}”(hjJJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj4Jubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MV hj4Iubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmpol_to_str (C function)”Œ c.mpol_to_str”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒBvoid mpol_to_str (char *buffer, int maxlen, struct mempolicy *pol)”h]”hù)�”}”(hŒAvoid mpol_to_str(char *buffer, int maxlen, struct mempolicy *pol)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj{Jh²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MÖ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽJh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj{Jh²hh³j�Jh´MÖ ubhÿ)�”}”(hŒ mpol_to_str”h]”j)�”}”(hŒ mpol_to_str”h]”hŒ mpol_to_str”…”�”}”(hj Jh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjœJubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj{Jh²hh³j�Jh´MÖ ubj )�”}”(hŒ1(char *buffer, int maxlen, struct mempolicy *pol)”h]”(j )�”}”(hŒ char *buffer”h]”(jµ)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj¼Jh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¸JubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊJh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¸JubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjØJh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¸Jubj)�”}”(hŒbuffer”h]”hŒbuffer”…”�”}”(hjåJh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¸Jubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj´Jubj )�”}”(hŒ int maxlen”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjþJh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjúJubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Kh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjúJubj)�”}”(hŒmaxlen”h]”hŒmaxlen”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjúJubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj´Jubj )�”}”(hŒstruct mempolicy *pol”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj3Kh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj/KubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@Kh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj/Kubh)�”}”(hhh]”j)�”}”(hŒ mempolicy”h]”hŒ mempolicy”…”�”}”(hjQKh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjNKubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jSKŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj¢JsbŒ c.mpol_to_str”†”asbuh1hhj/KubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqKh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj/KubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj/Kubj)�”}”(hŒpol”h]”hŒpol”…”�”}”(hjŒKh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj/Kubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj´Jubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj{Jh²hh³j�Jh´MÖ ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjwJh²hh³j�Jh´MÖ ubah}”(h]”jrJah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j�Jh´MÖ hjtJh²hubj4)�”}”(hhh]”jM)�”}”(hŒ)format a mempolicy structure for printing”h]”hŒ)format a mempolicy structure for printing”…”�”}”(hj¶Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MÖ hj³Kh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjtJh²hh³j�Jh´MÖ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÎKjHjÎKjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXÂ**Parameters** ``char *buffer`` to contain formatted mempolicy string ``int maxlen`` length of **buffer** ``struct mempolicy *pol`` pointer to mempolicy to be formatted **Description** Convert **pol** into a string. If **buffer** is too short, truncate the string. Recommend a **maxlen** of at least 51 for the longest mode, "weighted interleave", plus the longest flag flags, "relative|balancing", and to display at least a few node ids.”h]”(jM)�”}”(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&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MÚ hjÒKubj¤)�”}”(hhh]”(j©)�”}”(hŒ7``char *buffer`` to contain formatted mempolicy string ”h]”(j¯)�”}”(hŒ``char *buffer``”h]”jS)�”}”(hj÷Kh]”hŒ char *buffer”…”�”}”(hjùKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjõKubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´M× hjñKubjÉ)�”}”(hhh]”jM)�”}”(hŒ%to contain formatted mempolicy string”h]”hŒ%to contain formatted mempolicy string”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j Lh´M× hj Lubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjñKubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j Lh´M× hjîKubj©)�”}”(hŒ$``int maxlen`` length of **buffer** ”h]”(j¯)�”}”(hŒ``int maxlen``”h]”jS)�”}”(hj0Lh]”hŒ int maxlen”…”�”}”(hj2Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj.Lubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MØ hj*LubjÉ)�”}”(hhh]”jM)�”}”(hŒlength of **buffer**”h]”(hŒ length of ”…”�”}”(hjILh²hh³Nh´NubjŽ)�”}”(hŒ **buffer**”h]”hŒbuffer”…”�”}”(hjQLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjILubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jELh´MØ hjFLubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj*Lubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jELh´MØ hjîKubj©)�”}”(hŒ?``struct mempolicy *pol`` pointer to mempolicy to be formatted ”h]”(j¯)�”}”(hŒ``struct mempolicy *pol``”h]”jS)�”}”(hjwLh]”hŒstruct mempolicy *pol”…”�”}”(hjyLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjuLubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MÙ hjqLubjÉ)�”}”(hhh]”jM)�”}”(hŒ$pointer to mempolicy to be formatted”h]”hŒ$pointer to mempolicy to be formatted”…”�”}”(hj�Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jŒLh´MÙ hj�Lubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjqLubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŒLh´MÙ hjîKubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÒKubjM)�”}”(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&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MÛ hjÒKubjM)�”}”(hŒþConvert **pol** into a string. If **buffer** is too short, truncate the string. Recommend a **maxlen** of at least 51 for the longest mode, "weighted interleave", plus the longest flag flags, "relative|balancing", and to display at least a few node ids.”h]”(hŒConvert ”…”�”}”(hjÈLh²hh³Nh´NubjŽ)�”}”(hŒ**pol**”h]”hŒpol”…”�”}”(hjÐLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÈLubhŒ into a string. If ”…”�”}”(hjÈLh²hh³Nh´NubjŽ)�”}”(hŒ **buffer**”h]”hŒbuffer”…”�”}”(hjâLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÈLubhŒ0 is too short, truncate the string. Recommend a ”…”�”}”(hjÈLh²hh³Nh´NubjŽ)�”}”(hŒ **maxlen**”h]”hŒmaxlen”…”�”}”(hjôLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÈLubhŒŸ of at least 51 for the longest mode, “weighted interleaveâ€�, plus the longest flag flags, “relative|balancingâ€�, and to display at least a few node ids.”…”�”}”(hjÈLh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:102: ./mm/mempolicy.c”h´MÚ hjÒKubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒsoftleaf_t (C type)”Œ c.softleaf_t”hNt”auh1hÜhjÞÁh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ softleaf_t”h]”hù)�”}”(hŒtype softleaf_t”h]”(j5)�”}”(hj¾Uh]”hŒtype”…”�”}”(hj.Mh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj*Mh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´KubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPh´MmhjOubj©)�”}”(hŒ``{unnamed_union}`` anonymous ”h]”(j¯)�”}”(hŒ``{unnamed_union}``”h]”jS)�”}”(hjcPh]”hŒ{unnamed_union}”…”�”}”(hjePh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjaPubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´Khj]PubjÉ)�”}”(hhh]”jM)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(hj|Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jxPh´KhjyPubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj]Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jxPh´KhjOubj©)�”}”(hŒ~``index`` Offset within the file, in units of pages. For anonymous memory, this is the index from the beginning of the mmap. ”h]”(j¯)�”}”(hŒ ``index``”h]”jS)�”}”(hjœPh]”hŒindex”…”�”}”(hjžPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjšPubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´Mohj–PubjÉ)�”}”(hhh]”jM)�”}”(hŒsOffset within the file, in units of pages. For anonymous memory, this is the index from the beginning of the mmap.”h]”hŒsOffset within the file, in units of pages. For anonymous memory, this is the index from the beginning of the mmap.”…”�”}”(hjµPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´Mnhj²Pubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj–Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j±Ph´MohjOubj©)�”}”(hŒU``share`` number of DAX mappings that reference this folio. See dax_associate_entry. ”h]”(j¯)�”}”(hŒ ``share``”h]”jS)�”}”(hjÖPh]”hŒshare”…”�”}”(hjØPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÔPubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MqhjÐPubjÉ)�”}”(hhh]”jM)�”}”(hŒJnumber of DAX mappings that reference this folio. See dax_associate_entry.”h]”hŒJnumber of DAX mappings that reference this folio. See dax_associate_entry.”…”�”}”(hjïPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MphjìPubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÐPubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jëPh´MqhjOubj©)�”}”(hŒ``{unnamed_union}`` anonymous ”h]”(j¯)�”}”(hŒ``{unnamed_union}``”h]”jS)�”}”(hjQh]”hŒ{unnamed_union}”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´Khj QubjÉ)�”}”(hhh]”jM)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(hj)Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j%Qh´Khj&Qubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj Qubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j%Qh´KhjOubj©)�”}”(hŒD``private`` Filesystem per-folio data (see folio_attach_private()). ”h]”(j¯)�”}”(hŒ ``private``”h]”jS)�”}”(hjIQh]”hŒprivate”…”�”}”(hjKQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjGQubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MrhjCQubjÉ)�”}”(hhh]”jM)�”}”(hŒ7Filesystem per-folio data (see folio_attach_private()).”h]”hŒ7Filesystem per-folio data (see folio_attach_private()).”…”�”}”(hjbQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j^Qh´Mrhj_Qubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjCQubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j^Qh´MrhjOubj©)�”}”(hŒ9``swap`` Used for swp_entry_t if folio_test_swapcache(). ”h]”(j¯)�”}”(hŒ``swap``”h]”jS)�”}”(hj‚Qh]”hŒswap”…”�”}”(hj„Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj€Qubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´Mshj|QubjÉ)�”}”(hhh]”jM)�”}”(hŒ/Used for swp_entry_t if folio_test_swapcache().”h]”hŒ/Used for swp_entry_t if folio_test_swapcache().”…”�”}”(hj›Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j—Qh´Mshj˜Qubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj|Qubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j—Qh´MshjOubj©)�”}”(hŒT``migrate_info`` Stores migration state (anon_vma pointer and FOLIO_WAS_* markers). ”h]”(j¯)�”}”(hŒ``migrate_info``”h]”jS)�”}”(hj»Qh]”hŒ migrate_info”…”�”}”(hj½Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¹Qubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MuhjµQubjÉ)�”}”(hhh]”jM)�”}”(hŒBStores migration state (anon_vma pointer and FOLIO_WAS_* markers).”h]”hŒBStores migration state (anon_vma pointer and FOLIO_WAS_* markers).”…”�”}”(hjÔQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MthjÑQubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjµQubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÐQh´MuhjOubj©)�”}”(hŒ†``_mapcount`` Do not access this member directly. Use folio_mapcount() to find out how many times this folio is mapped by userspace. ”h]”(j¯)�”}”(hŒ ``_mapcount``”h]”jS)�”}”(hjõQh]”hŒ _mapcount”…”�”}”(hj÷Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjóQubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MwhjïQubjÉ)�”}”(hhh]”jM)�”}”(hŒwDo not access this member directly. Use folio_mapcount() to find out how many times this folio is mapped by userspace.”h]”hŒwDo not access this member directly. Use folio_mapcount() to find out how many times this folio is mapped by userspace.”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´Mvhj Rubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjïQubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j Rh´MwhjOubj©)�”}”(hŒ~``_refcount`` Do not access this member directly. Use folio_ref_count() to find how many references there are to this folio. ”h]”(j¯)�”}”(hŒ ``_refcount``”h]”jS)�”}”(hj/Rh]”hŒ _refcount”…”�”}”(hj1Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj-Rubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´Myhj)RubjÉ)�”}”(hhh]”jM)�”}”(hŒoDo not access this member directly. Use folio_ref_count() to find how many references there are to this folio.”h]”hŒoDo not access this member directly. Use folio_ref_count() to find how many references there are to this folio.”…”�”}”(hjHRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MxhjERubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj)Rubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jDRh´MyhjOubj©)�”}”(hŒ*``memcg_data`` Memory Control Group data. ”h]”(j¯)�”}”(hŒ``memcg_data``”h]”jS)�”}”(hjiRh]”hŒ memcg_data”…”�”}”(hjkRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjgRubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MzhjcRubjÉ)�”}”(hhh]”jM)�”}”(hŒMemory Control Group data.”h]”hŒMemory Control Group data.”…”�”}”(hj‚Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j~Rh´MzhjRubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjcRubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j~Rh´MzhjOubj©)�”}”(hŒH``_unused_slab_obj_exts`` Placeholder to match obj_exts in struct slab. ”h]”(j¯)�”}”(hŒ``_unused_slab_obj_exts``”h]”jS)�”}”(hj¢Rh]”hŒ_unused_slab_obj_exts”…”�”}”(hj¤Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj Rubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M‹hjœRubjÉ)�”}”(hhh]”jM)�”}”(hŒ-Placeholder to match obj_exts in struct slab.”h]”hŒ-Placeholder to match obj_exts in struct slab.”…”�”}”(hj»Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j·Rh´M‹hj¸Rubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjœRubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j·Rh´M‹hjOubj©)�”}”(hŒ6``virtual`` Virtual address in the kernel direct map. ”h]”(j¯)�”}”(hŒ ``virtual``”h]”jS)�”}”(hjÛRh]”hŒvirtual”…”�”}”(hjÝRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÙRubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M|hjÕRubjÉ)�”}”(hhh]”jM)�”}”(hŒ)Virtual address in the kernel direct map.”h]”hŒ)Virtual address in the kernel direct map.”…”�”}”(hjôRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jðRh´M|hjñRubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÕRubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jðRh´M|hjOubj©)�”}”(hŒK``_last_cpupid`` IDs of last CPU and last process that accessed the folio. ”h]”(j¯)�”}”(hŒ``_last_cpupid``”h]”jS)�”}”(hjSh]”hŒ _last_cpupid”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjSubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M}hjSubjÉ)�”}”(hhh]”jM)�”}”(hŒ9IDs of last CPU and last process that accessed the folio.”h]”hŒ9IDs of last CPU and last process that accessed the folio.”…”�”}”(hj-Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j)Sh´M}hj*Subah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjSubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j)Sh´M}hjOubj©)�”}”(hŒ@``_large_mapcount`` Do not use directly, call folio_mapcount(). ”h]”(j¯)�”}”(hŒ``_large_mapcount``”h]”jS)�”}”(hjMSh]”hŒ_large_mapcount”…”�”}”(hjOSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjKSubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MhjGSubjÉ)�”}”(hhh]”jM)�”}”(hŒ+Do not use directly, call folio_mapcount().”h]”hŒ+Do not use directly, call folio_mapcount().”…”�”}”(hjfSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jbSh´MhjcSubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjGSubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jbSh´MhjOubj©)�”}”(hŒ@``_nr_pages_mapped`` Do not use outside of rmap and debug code. ”h]”(j¯)�”}”(hŒ``_nr_pages_mapped``”h]”jS)�”}”(hj†Sh]”hŒ_nr_pages_mapped”…”�”}”(hjˆSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj„Subah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M€hj€SubjÉ)�”}”(hhh]”jM)�”}”(hŒ*Do not use outside of rmap and debug code.”h]”hŒ*Do not use outside of rmap and debug code.”…”�”}”(hjŸSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j›Sh´M€hjœSubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj€Subeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j›Sh´M€hjOubj©)�”}”(hŒH``_entire_mapcount`` Do not use directly, call folio_entire_mapcount(). ”h]”(j¯)�”}”(hŒ``_entire_mapcount``”h]”jS)�”}”(hj¿Sh]”hŒ_entire_mapcount”…”�”}”(hjÁSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj½Subah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M~hj¹SubjÉ)�”}”(hhh]”jM)�”}”(hŒ2Do not use directly, call folio_entire_mapcount().”h]”hŒ2Do not use directly, call folio_entire_mapcount().”…”�”}”(hjØSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÔSh´M~hjÕSubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¹Subeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÔSh´M~hjOubj©)�”}”(hŒB``_pincount`` Do not use directly, call folio_maybe_dma_pinned(). ”h]”(j¯)�”}”(hŒ ``_pincount``”h]”jS)�”}”(hjøSh]”hŒ _pincount”…”�”}”(hjúSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjöSubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M�hjòSubjÉ)�”}”(hhh]”jM)�”}”(hŒ3Do not use directly, call folio_maybe_dma_pinned().”h]”hŒ3Do not use directly, call folio_maybe_dma_pinned().”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j Th´M�hjTubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjòSubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j Th´M�hjOubj©)�”}”(hŒ5``_mm_id_mapcount`` Do not use outside of rmap code. ”h]”(j¯)�”}”(hŒ``_mm_id_mapcount``”h]”jS)�”}”(hj1Th]”hŒ_mm_id_mapcount”…”�”}”(hj3Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj/Tubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M…hj+TubjÉ)�”}”(hhh]”jM)�”}”(hŒ Do not use outside of rmap code.”h]”hŒ Do not use outside of rmap code.”…”�”}”(hjJTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jFTh´M…hjGTubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj+Tubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jFTh´M…hjOubj©)�”}”(hŒ``{unnamed_union}`` anonymous ”h]”(j¯)�”}”(hŒ``{unnamed_union}``”h]”jS)�”}”(hjjTh]”hŒ{unnamed_union}”…”�”}”(hjlTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjhTubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´KhjdTubjÉ)�”}”(hhh]”jM)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(hjƒTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jTh´Khj€Tubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjdTubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jTh´KhjOubj©)�”}”(hŒ,``_mm_id`` Do not use outside of rmap code. ”h]”(j¯)�”}”(hŒ ``_mm_id``”h]”jS)�”}”(hj£Th]”hŒ_mm_id”…”�”}”(hj¥Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¡Tubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´Mƒhj�TubjÉ)�”}”(hhh]”jM)�”}”(hŒ Do not use outside of rmap code.”h]”hŒ Do not use outside of rmap code.”…”�”}”(hj¼Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¸Th´Mƒhj¹Tubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�Tubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¸Th´MƒhjOubj©)�”}”(hŒ-``_mm_ids`` Do not use outside of rmap code. ”h]”(j¯)�”}”(hŒ ``_mm_ids``”h]”jS)�”}”(hjÜTh]”hŒ_mm_ids”…”�”}”(hjÞTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÚTubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M„hjÖTubjÉ)�”}”(hhh]”jM)�”}”(hŒ Do not use outside of rmap code.”h]”hŒ Do not use outside of rmap code.”…”�”}”(hjõTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jñTh´M„hjòTubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÖTubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jñTh´M„hjOubj©)�”}”(hŒ:``_nr_pages`` Do not use directly, call folio_nr_pages(). ”h]”(j¯)�”}”(hŒ ``_nr_pages``”h]”jS)�”}”(hjUh]”hŒ _nr_pages”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjUubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M‚hjUubjÉ)�”}”(hhh]”jM)�”}”(hŒ+Do not use directly, call folio_nr_pages().”h]”hŒ+Do not use directly, call folio_nr_pages().”…”�”}”(hj.Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j*Uh´M‚hj+Uubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjUubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j*Uh´M‚hjOubj©)�”}”(hŒ=``_deferred_list`` Folios to be split under memory pressure. ”h]”(j¯)�”}”(hŒ``_deferred_list``”h]”jS)�”}”(hjNUh]”hŒ_deferred_list”…”�”}”(hjPUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjLUubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MŠhjHUubjÉ)�”}”(hhh]”jM)�”}”(hŒ)Folios to be split under memory pressure.”h]”hŒ)Folios to be split under memory pressure.”…”�”}”(hjgUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jcUh´MŠhjdUubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjHUubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jcUh´MŠhjOubj©)�”}”(hŒH``_entire_mapcount`` Do not use directly, call folio_entire_mapcount(). ”h]”(j¯)�”}”(hŒ``_entire_mapcount``”h]”jS)�”}”(hj‡Uh]”hŒ_entire_mapcount”…”�”}”(hj‰Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj…Uubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M~hj�UubjÉ)�”}”(hhh]”jM)�”}”(hŒ2Do not use directly, call folio_entire_mapcount().”h]”hŒ2Do not use directly, call folio_entire_mapcount().”…”�”}”(hj Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jœUh´M~hj�Uubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�Uubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jœUh´M~hjOubj©)�”}”(hŒB``_pincount`` Do not use directly, call folio_maybe_dma_pinned(). ”h]”(j¯)�”}”(hŒ ``_pincount``”h]”jS)�”}”(hjÀUh]”hŒ _pincount”…”�”}”(hjÂUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¾Uubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M�hjºUubjÉ)�”}”(hhh]”jM)�”}”(hŒ3Do not use directly, call folio_maybe_dma_pinned().”h]”hŒ3Do not use directly, call folio_maybe_dma_pinned().”…”�”}”(hjÙUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÕUh´M�hjÖUubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjºUubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÕUh´M�hjOubj©)�”}”(hŒE``_hugetlb_subpool`` Do not use directly, use accessor in hugetlb.h. ”h]”(j¯)�”}”(hŒ``_hugetlb_subpool``”h]”jS)�”}”(hjùUh]”hŒ_hugetlb_subpool”…”�”}”(hjûUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj÷Uubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M†hjóUubjÉ)�”}”(hhh]”jM)�”}”(hŒ/Do not use directly, use accessor in hugetlb.h.”h]”hŒ/Do not use directly, use accessor in hugetlb.h.”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jVh´M†hjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjóUubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jVh´M†hjOubj©)�”}”(hŒK``_hugetlb_cgroup`` Do not use directly, use accessor in hugetlb_cgroup.h. ”h]”(j¯)�”}”(hŒ``_hugetlb_cgroup``”h]”jS)�”}”(hj2Vh]”hŒ_hugetlb_cgroup”…”�”}”(hj4Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj0Vubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M‡hj,VubjÉ)�”}”(hhh]”jM)�”}”(hŒ6Do not use directly, use accessor in hugetlb_cgroup.h.”h]”hŒ6Do not use directly, use accessor in hugetlb_cgroup.h.”…”�”}”(hjKVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jGVh´M‡hjHVubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj,Vubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jGVh´M‡hjOubj©)�”}”(hŒP``_hugetlb_cgroup_rsvd`` Do not use directly, use accessor in hugetlb_cgroup.h. ”h]”(j¯)�”}”(hŒ``_hugetlb_cgroup_rsvd``”h]”jS)�”}”(hjkVh]”hŒ_hugetlb_cgroup_rsvd”…”�”}”(hjmVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjiVubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MˆhjeVubjÉ)�”}”(hhh]”jM)�”}”(hŒ6Do not use directly, use accessor in hugetlb_cgroup.h.”h]”hŒ6Do not use directly, use accessor in hugetlb_cgroup.h.”…”�”}”(hj„Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j€Vh´Mˆhj�Vubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjeVubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j€Vh´MˆhjOubj©)�”}”(hŒD``_hugetlb_hwpoison`` Do not use directly, call raw_hwp_list_head().”h]”(j¯)�”}”(hŒ``_hugetlb_hwpoison``”h]”jS)�”}”(hj¤Vh]”hŒ_hugetlb_hwpoison”…”�”}”(hj¦Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¢Vubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MˆhjžVubjÉ)�”}”(hhh]”jM)�”}”(hŒ.Do not use directly, call raw_hwp_list_head().”h]”hŒ.Do not use directly, call raw_hwp_list_head().”…”�”}”(hj½Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M‰hjºVubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjžVubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¹Vh´MˆhjOubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj»Nubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³j"Mh´NubjM)�”}”(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&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MŒhjÞÁh²hubjM)�”}”(hXªA folio is a physically, virtually and logically contiguous set of bytes. It is a power-of-two in size, and it is aligned to that same power-of-two. It is at least as large as ``PAGE_SIZE``. If it is in the page cache, it is at a file offset which is a multiple of that power-of-two. It may be mapped into userspace at an address which is at an arbitrary page offset, but its kernel virtual address is aligned to its size.”h]”(hŒ²A folio is a physically, virtually and logically contiguous set of bytes. It is a power-of-two in size, and it is aligned to that same power-of-two. It is at least as large as ”…”�”}”(hjýVh²hh³Nh´NubjS)�”}”(hŒ ``PAGE_SIZE``”h]”hŒ PAGE_SIZE”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjýVubhŒë. If it is in the page cache, it is at a file offset which is a multiple of that power-of-two. It may be mapped into userspace at an address which is at an arbitrary page offset, but its kernel virtual address is aligned to its size.”…”�”}”(hjýVh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M‹hjÞÁh²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒptdesc (C struct)”Œc.ptdesc”hNt”auh1hÜhjÞÁh²hh³j"Mh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒptdesc”h]”hù)�”}”(hŒ struct ptdesc”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj7Wh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj3Wh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M–ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEWh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj3Wh²hh³jDWh´M–ubhÿ)�”}”(hŒptdesc”h]”j)�”}”(hj1Wh]”hŒptdesc”…”�”}”(hjWWh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjSWubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj3Wh²hh³jDWh´M–ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj/Wh²hh³jDWh´M–ubah}”(h]”j*Wah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jDWh´M–hj,Wh²hubj4)�”}”(hhh]”jM)�”}”(hŒ"Memory descriptor for page tables.”h]”hŒ"Memory descriptor for page tables.”…”�”}”(hjyWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M*hjvWh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj,Wh²hh³jDWh´M–ubeh}”(h]”h ]”(jAŒstruct”eh"]”h$]”h&]”jFjAjGj‘WjHj‘WjI‰jJ‰jK‰uh1híh²hhjÞÁh³j"Mh´Nubj„)�”}”(hX€**Definition**:: struct ptdesc { memdesc_flags_t pt_flags; union { struct rcu_head pt_rcu_head; struct list_head pt_list; struct { unsigned long _pt_pad_1; pgtable_t pmd_huge_pte; }; }; unsigned long __page_mapping; union { pgoff_t pt_index; struct mm_struct *pt_mm; atomic_t pt_frag_refcount; #ifdef CONFIG_HUGETLB_PMD_PAGE_TABLE_SHARING; atomic_t pt_share_count; #endif; }; union { unsigned long _pt_pad_2; #if ALLOC_SPLIT_PTLOCKS; spinlock_t *ptl; #else; spinlock_t ptl; #endif; }; unsigned int __page_type; atomic_t __page_refcount; #ifdef CONFIG_MEMCG; unsigned long pt_memcg_data; #endif; }; **Members** ``pt_flags`` enum pt_flags plus zone/node/section. ``{unnamed_union}`` anonymous ``pt_rcu_head`` For freeing page table pages. ``pt_list`` List of used page tables. Used for s390 gmap shadow pages (which are not linked into the user page tables) and x86 pgds. ``{unnamed_struct}`` anonymous ``_pt_pad_1`` Padding that aliases with page's compound head. ``pmd_huge_pte`` Protected by ptdesc->ptl, used for THPs. ``__page_mapping`` Aliases with page->mapping. Unused for page tables. ``{unnamed_union}`` anonymous ``pt_index`` Used for s390 gmap. ``pt_mm`` Used for x86 pgds. ``pt_frag_refcount`` For fragmented page table tracking. Powerpc only. ``pt_share_count`` Used for HugeTLB PMD page table share count. ``{unnamed_union}`` anonymous ``_pt_pad_2`` Padding to ensure proper alignment. ``ptl`` Lock for the page table. ``ptl`` Lock for the page table. ``__page_type`` Same as page->page_type. Unused for page tables. ``__page_refcount`` Same as page refcount. ``pt_memcg_data`` Memcg data. Tracked for page tables here.”h]”(jM)�”}”(hŒ**Definition**::”h]”(jŽ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj�Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj™WubhŒ:”…”�”}”(hj™Wh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M.hj•Wubj )�”}”(hXàstruct ptdesc { memdesc_flags_t pt_flags; union { struct rcu_head pt_rcu_head; struct list_head pt_list; struct { unsigned long _pt_pad_1; pgtable_t pmd_huge_pte; }; }; unsigned long __page_mapping; union { pgoff_t pt_index; struct mm_struct *pt_mm; atomic_t pt_frag_refcount; #ifdef CONFIG_HUGETLB_PMD_PAGE_TABLE_SHARING; atomic_t pt_share_count; #endif; }; union { unsigned long _pt_pad_2; #if ALLOC_SPLIT_PTLOCKS; spinlock_t *ptl; #else; spinlock_t ptl; #endif; }; unsigned int __page_type; atomic_t __page_refcount; #ifdef CONFIG_MEMCG; unsigned long pt_memcg_data; #endif; };”h]”hXàstruct ptdesc { memdesc_flags_t pt_flags; union { struct rcu_head pt_rcu_head; struct list_head pt_list; struct { unsigned long _pt_pad_1; pgtable_t pmd_huge_pte; }; }; unsigned long __page_mapping; union { pgoff_t pt_index; struct mm_struct *pt_mm; atomic_t pt_frag_refcount; #ifdef CONFIG_HUGETLB_PMD_PAGE_TABLE_SHARING; atomic_t pt_share_count; #endif; }; union { unsigned long _pt_pad_2; #if ALLOC_SPLIT_PTLOCKS; spinlock_t *ptl; #else; spinlock_t ptl; #endif; }; unsigned int __page_type; atomic_t __page_refcount; #ifdef CONFIG_MEMCG; unsigned long pt_memcg_data; #endif; };”…”�”}”hj¶Wsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M0hj•WubjM)�”}”(hŒ **Members**”h]”jŽ)�”}”(hjÇWh]”hŒMembers”…”�”}”(hjÉWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÅWubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MRhj•Wubj¤)�”}”(hhh]”(j©)�”}”(hŒ3``pt_flags`` enum pt_flags plus zone/node/section. ”h]”(j¯)�”}”(hŒ ``pt_flags``”h]”jS)�”}”(hjæWh]”hŒpt_flags”…”�”}”(hjèWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjäWubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M,hjàWubjÉ)�”}”(hhh]”jM)�”}”(hŒ%enum pt_flags plus zone/node/section.”h]”hŒ%enum pt_flags plus zone/node/section.”…”�”}”(hjÿWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jûWh´M,hjüWubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjàWubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jûWh´M,hjÝWubj©)�”}”(hŒ``{unnamed_union}`` anonymous ”h]”(j¯)�”}”(hŒ``{unnamed_union}``”h]”jS)�”}”(hjXh]”hŒ{unnamed_union}”…”�”}”(hj!Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjXubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´KhjXubjÉ)�”}”(hhh]”jM)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(hj8Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j4Xh´Khj5Xubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjXubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j4Xh´KhjÝWubj©)�”}”(hŒ.``pt_rcu_head`` For freeing page table pages. ”h]”(j¯)�”}”(hŒ``pt_rcu_head``”h]”jS)�”}”(hjXXh]”hŒ pt_rcu_head”…”�”}”(hjZXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjVXubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M-hjRXubjÉ)�”}”(hhh]”jM)�”}”(hŒFor freeing page table pages.”h]”hŒFor freeing page table pages.”…”�”}”(hjqXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jmXh´M-hjnXubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjRXubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jmXh´M-hjÝWubj©)�”}”(hŒ…``pt_list`` List of used page tables. Used for s390 gmap shadow pages (which are not linked into the user page tables) and x86 pgds. ”h]”(j¯)�”}”(hŒ ``pt_list``”h]”jS)�”}”(hj‘Xh]”hŒpt_list”…”�”}”(hj“Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�Xubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M0hj‹XubjÉ)�”}”(hhh]”jM)�”}”(hŒxList of used page tables. Used for s390 gmap shadow pages (which are not linked into the user page tables) and x86 pgds.”h]”hŒxList of used page tables. Used for s390 gmap shadow pages (which are not linked into the user page tables) and x86 pgds.”…”�”}”(hjªXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M.hj§Xubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‹Xubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¦Xh´M0hjÝWubj©)�”}”(hŒ``{unnamed_struct}`` anonymous ”h]”(j¯)�”}”(hŒ``{unnamed_struct}``”h]”jS)�”}”(hjËXh]”hŒ{unnamed_struct}”…”�”}”(hjÍXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÉXubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´KhjÅXubjÉ)�”}”(hhh]”jM)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(hjäXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jàXh´KhjáXubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÅXubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jàXh´KhjÝWubj©)�”}”(hŒ>``_pt_pad_1`` Padding that aliases with page's compound head. ”h]”(j¯)�”}”(hŒ ``_pt_pad_1``”h]”jS)�”}”(hjYh]”hŒ _pt_pad_1”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjYubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M1hjþXubjÉ)�”}”(hhh]”jM)�”}”(hŒ/Padding that aliases with page's compound head.”h]”hŒ1Padding that aliases with page’s compound head.”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jYh´M1hjYubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjþXubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jYh´M1hjÝWubj©)�”}”(hŒ:``pmd_huge_pte`` Protected by ptdesc->ptl, used for THPs. ”h]”(j¯)�”}”(hŒ``pmd_huge_pte``”h]”jS)�”}”(hj=Yh]”hŒ pmd_huge_pte”…”�”}”(hj?Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj;Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M2hj7YubjÉ)�”}”(hhh]”jM)�”}”(hŒ(Protected by ptdesc->ptl, used for THPs.”h]”hŒ(Protected by ptdesc->ptl, used for THPs.”…”�”}”(hjVYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jRYh´M2hjSYubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj7Yubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jRYh´M2hjÝWubj©)�”}”(hŒG``__page_mapping`` Aliases with page->mapping. Unused for page tables. ”h]”(j¯)�”}”(hŒ``__page_mapping``”h]”jS)�”}”(hjvYh]”hŒ__page_mapping”…”�”}”(hjxYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjtYubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M3hjpYubjÉ)�”}”(hhh]”jM)�”}”(hŒ3Aliases with page->mapping. Unused for page tables.”h]”hŒ3Aliases with page->mapping. Unused for page tables.”…”�”}”(hj�Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‹Yh´M3hjŒYubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjpYubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‹Yh´M3hjÝWubj©)�”}”(hŒ``{unnamed_union}`` anonymous ”h]”(j¯)�”}”(hŒ``{unnamed_union}``”h]”jS)�”}”(hj¯Yh]”hŒ{unnamed_union}”…”�”}”(hj±Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj­Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´Khj©YubjÉ)�”}”(hhh]”jM)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(hjÈYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÄYh´KhjÅYubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj©Yubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÄYh´KhjÝWubj©)�”}”(hŒ!``pt_index`` Used for s390 gmap. ”h]”(j¯)�”}”(hŒ ``pt_index``”h]”jS)�”}”(hjèYh]”hŒpt_index”…”�”}”(hjêYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjæYubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M4hjâYubjÉ)�”}”(hhh]”jM)�”}”(hŒUsed for s390 gmap.”h]”hŒUsed for s390 gmap.”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jýYh´M4hjþYubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjâYubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jýYh´M4hjÝWubj©)�”}”(hŒ``pt_mm`` Used for x86 pgds. ”h]”(j¯)�”}”(hŒ ``pt_mm``”h]”jS)�”}”(hj!Zh]”hŒpt_mm”…”�”}”(hj#Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M5hjZubjÉ)�”}”(hhh]”jM)�”}”(hŒUsed for x86 pgds.”h]”hŒUsed for x86 pgds.”…”�”}”(hj:Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j6Zh´M5hj7Zubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjZubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j6Zh´M5hjÝWubj©)�”}”(hŒG``pt_frag_refcount`` For fragmented page table tracking. Powerpc only. ”h]”(j¯)�”}”(hŒ``pt_frag_refcount``”h]”jS)�”}”(hjZZh]”hŒpt_frag_refcount”…”�”}”(hj\Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjXZubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M6hjTZubjÉ)�”}”(hhh]”jM)�”}”(hŒ1For fragmented page table tracking. Powerpc only.”h]”hŒ1For fragmented page table tracking. Powerpc only.”…”�”}”(hjsZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³joZh´M6hjpZubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjTZubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³joZh´M6hjÝWubj©)�”}”(hŒ@``pt_share_count`` Used for HugeTLB PMD page table share count. ”h]”(j¯)�”}”(hŒ``pt_share_count``”h]”jS)�”}”(hj“Zh]”hŒpt_share_count”…”�”}”(hj•Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‘Zubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M7hj�ZubjÉ)�”}”(hhh]”jM)�”}”(hŒ,Used for HugeTLB PMD page table share count.”h]”hŒ,Used for HugeTLB PMD page table share count.”…”�”}”(hj¬Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¨Zh´M7hj©Zubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�Zubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¨Zh´M7hjÝWubj©)�”}”(hŒ``{unnamed_union}`` anonymous ”h]”(j¯)�”}”(hŒ``{unnamed_union}``”h]”jS)�”}”(hjÌZh]”hŒ{unnamed_union}”…”�”}”(hjÎZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÊZubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´KhjÆZubjÉ)�”}”(hhh]”jM)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(hjåZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jáZh´KhjâZubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÆZubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jáZh´KhjÝWubj©)�”}”(hŒ2``_pt_pad_2`` Padding to ensure proper alignment. ”h]”(j¯)�”}”(hŒ ``_pt_pad_2``”h]”jS)�”}”(hj[h]”hŒ _pt_pad_2”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M8hjÿZubjÉ)�”}”(hhh]”jM)�”}”(hŒ#Padding to ensure proper alignment.”h]”hŒ#Padding to ensure proper alignment.”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j[h´M8hj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÿZubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j[h´M8hjÝWubj©)�”}”(hŒ!``ptl`` Lock for the page table. ”h]”(j¯)�”}”(hŒ``ptl``”h]”jS)�”}”(hj>[h]”hŒptl”…”�”}”(hj@[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj<[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M9hj8[ubjÉ)�”}”(hhh]”jM)�”}”(hŒLock for the page table.”h]”hŒLock for the page table.”…”�”}”(hjW[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jS[h´M9hjT[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj8[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jS[h´M9hjÝWubj©)�”}”(hŒ!``ptl`` Lock for the page table. ”h]”(j¯)�”}”(hŒ``ptl``”h]”jS)�”}”(hjw[h]”hŒptl”…”�”}”(hjy[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhju[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M9hjq[ubjÉ)�”}”(hhh]”jM)�”}”(hŒLock for the page table.”h]”hŒLock for the page table.”…”�”}”(hj�[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jŒ[h´M9hj�[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjq[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŒ[h´M9hjÝWubj©)�”}”(hŒA``__page_type`` Same as page->page_type. Unused for page tables. ”h]”(j¯)�”}”(hŒ``__page_type``”h]”jS)�”}”(hj°[h]”hŒ __page_type”…”�”}”(hj²[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj®[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M:hjª[ubjÉ)�”}”(hhh]”jM)�”}”(hŒ0Same as page->page_type. Unused for page tables.”h]”hŒ0Same as page->page_type. Unused for page tables.”…”�”}”(hjÉ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÅ[h´M:hjÆ[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjª[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÅ[h´M:hjÝWubj©)�”}”(hŒ+``__page_refcount`` Same as page refcount. ”h]”(j¯)�”}”(hŒ``__page_refcount``”h]”jS)�”}”(hjé[h]”hŒ__page_refcount”…”�”}”(hjë[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjç[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M;hjã[ubjÉ)�”}”(hhh]”jM)�”}”(hŒSame as page refcount.”h]”hŒSame as page refcount.”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jþ[h´M;hjÿ[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjã[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jþ[h´M;hjÝWubj©)�”}”(hŒ;``pt_memcg_data`` Memcg data. Tracked for page tables here.”h]”(j¯)�”}”(hŒ``pt_memcg_data``”h]”jS)�”}”(hj"\h]”hŒ pt_memcg_data”…”�”}”(hj$\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj \ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M;hj\ubjÉ)�”}”(hhh]”jM)�”}”(hŒ)Memcg data. Tracked for page tables here.”h]”hŒ)Memcg data. Tracked for page tables here.”…”�”}”(hj;\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M<hj8\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j7\h´M;hjÝWubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj•Wubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³j"Mh´NubjM)�”}”(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&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M?hjÞÁh²hubjM)�”}”(hŒcThis struct overlays struct page for now. Do not modify without a good understanding of the issues.”h]”hŒcThis struct overlays struct page for now. Do not modify without a good understanding of the issues.”…”�”}”(hj{\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M<hjÞÁh²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvm_fault_t (C type)”Œ c.vm_fault_t”hNt”auh1hÜhjÞÁh²hh³j"Mh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ vm_fault_t”h]”hù)�”}”(hŒtype vm_fault_t”h]”(j5)�”}”(hj¾Uh]”hŒtype”…”�”}”(hj£\h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjŸ\h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MBubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±\h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŸ\h²hh³j°\h´MBubhÿ)�”}”(hŒ vm_fault_t”h]”j)�”}”(hj�\h]”hŒ vm_fault_t”…”�”}”(hjÃ\h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¿\ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjŸ\h²hh³j°\h´MBubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj›\h²hh³j°\h´MBubah}”(h]”j–\ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j°\h´MBhj˜\h²hubj4)�”}”(hhh]”jM)�”}”(hŒ$Return type for page fault handlers.”h]”hŒ$Return type for page fault handlers.”…”�”}”(hjå\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M|hjâ\h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj˜\h²hh³j°\h´MBubeh}”(h]”h ]”(jAŒtype”eh"]”h$]”h&]”jFjAjGjý\jHjý\jI‰jJ‰jK‰uh1híh²hhjÞÁh³j"Mh´NubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj]h]”hŒ Description”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M~hjÞÁh²hubjM)�”}”(hŒfault installed the pte, not return page ``VM_FAULT_LOCKED`` ->fault locked the returned page ``VM_FAULT_RETRY`` ->fault blocked, must retry ``VM_FAULT_FALLBACK`` huge page fault failed, fall back to small ``VM_FAULT_DONE_COW`` ->fault has fully handled COW ``VM_FAULT_NEEDDSYNC`` ->fault did not modify page tables and needs fsync() to complete (for synchronous page faults in DAX) ``VM_FAULT_COMPLETED`` ->fault completed, meanwhile mmap lock released ``VM_FAULT_HINDEX_MASK`` mask HINDEX value”h]”(jM)�”}”(hŒ **Constants**”h]”jŽ)�”}”(hj·]h]”hŒ Constants”…”�”}”(hj¹]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjµ]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M‡hj±]ubj¤)�”}”(hhh]”(j©)�”}”(hŒ``VM_FAULT_OOM`` Out Of Memory ”h]”(j¯)�”}”(hŒ``VM_FAULT_OOM``”h]”jS)�”}”(hjÖ]h]”hŒ VM_FAULT_OOM”…”�”}”(hjØ]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÔ]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MŠhjÐ]ubjÉ)�”}”(hhh]”jM)�”}”(hŒ Out Of Memory”h]”hŒ Out Of Memory”…”�”}”(hjï]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jë]h´MŠhjì]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÐ]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jë]h´MŠhjÍ]ubj©)�”}”(hŒ``VM_FAULT_SIGBUS`` Bad access ”h]”(j¯)�”}”(hŒ``VM_FAULT_SIGBUS``”h]”jS)�”}”(hj^h]”hŒVM_FAULT_SIGBUS”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj ^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M�hj ^ubjÉ)�”}”(hhh]”jM)�”}”(hŒ Bad access”h]”hŒ Bad access”…”�”}”(hj(^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j$^h´M�hj%^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j$^h´M�hjÍ]ubj©)�”}”(hŒ*``VM_FAULT_MAJOR`` Page read from storage ”h]”(j¯)�”}”(hŒ``VM_FAULT_MAJOR``”h]”jS)�”}”(hjH^h]”hŒVM_FAULT_MAJOR”…”�”}”(hjJ^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjF^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M�hjB^ubjÉ)�”}”(hhh]”jM)�”}”(hŒPage read from storage”h]”hŒPage read from storage”…”�”}”(hja^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j]^h´M�hj^^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjB^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j]^h´M�hjÍ]ubj©)�”}”(hŒ.``VM_FAULT_HWPOISON`` Hit poisoned small page ”h]”(j¯)�”}”(hŒ``VM_FAULT_HWPOISON``”h]”jS)�”}”(hj�^h]”hŒVM_FAULT_HWPOISON”…”�”}”(hjƒ^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M“hj{^ubjÉ)�”}”(hhh]”jM)�”}”(hŒHit poisoned small page”h]”hŒHit poisoned small page”…”�”}”(hjš^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j–^h´M“hj—^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj{^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j–^h´M“hjÍ]ubj©)�”}”(hŒQ``VM_FAULT_HWPOISON_LARGE`` Hit poisoned large page. Index encoded in upper bits ”h]”(j¯)�”}”(hŒ``VM_FAULT_HWPOISON_LARGE``”h]”jS)�”}”(hjº^h]”hŒVM_FAULT_HWPOISON_LARGE”…”�”}”(hj¼^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¸^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M—hj´^ubjÉ)�”}”(hhh]”jM)�”}”(hŒ4Hit poisoned large page. Index encoded in upper bits”h]”hŒ4Hit poisoned large page. Index encoded in upper bits”…”�”}”(hjÓ^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M–hjÐ^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj´^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÏ^h´M—hjÍ]ubj©)�”}”(hŒ(``VM_FAULT_SIGSEGV`` segmentation fault ”h]”(j¯)�”}”(hŒ``VM_FAULT_SIGSEGV``”h]”jS)�”}”(hjô^h]”hŒVM_FAULT_SIGSEGV”…”�”}”(hjö^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjò^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´Mšhjî^ubjÉ)�”}”(hhh]”jM)�”}”(hŒsegmentation fault”h]”hŒsegmentation fault”…”�”}”(hj _h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j _h´Mšhj _ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjî^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j _h´MšhjÍ]ubj©)�”}”(hŒ?``VM_FAULT_NOPAGE`` ->fault installed the pte, not return page ”h]”(j¯)�”}”(hŒ``VM_FAULT_NOPAGE``”h]”jS)�”}”(hj-_h]”hŒVM_FAULT_NOPAGE”…”�”}”(hj/_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj+_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M�hj'_ubjÉ)�”}”(hhh]”jM)�”}”(hŒ*->fault installed the pte, not return page”h]”hŒ*->fault installed the pte, not return page”…”�”}”(hjF_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jB_h´M�hjC_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj'_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jB_h´M�hjÍ]ubj©)�”}”(hŒ5``VM_FAULT_LOCKED`` ->fault locked the returned page ”h]”(j¯)�”}”(hŒ``VM_FAULT_LOCKED``”h]”jS)�”}”(hjf_h]”hŒVM_FAULT_LOCKED”…”�”}”(hjh_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjd_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M hj`_ubjÉ)�”}”(hhh]”jM)�”}”(hŒ ->fault locked the returned page”h]”hŒ ->fault locked the returned page”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j{_h´M hj|_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj`_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j{_h´M hjÍ]ubj©)�”}”(hŒ/``VM_FAULT_RETRY`` ->fault blocked, must retry ”h]”(j¯)�”}”(hŒ``VM_FAULT_RETRY``”h]”jS)�”}”(hjŸ_h]”hŒVM_FAULT_RETRY”…”�”}”(hj¡_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M£hj™_ubjÉ)�”}”(hhh]”jM)�”}”(hŒ->fault blocked, must retry”h]”hŒ->fault blocked, must retry”…”�”}”(hj¸_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j´_h´M£hjµ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj™_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j´_h´M£hjÍ]ubj©)�”}”(hŒA``VM_FAULT_FALLBACK`` huge page fault failed, fall back to small ”h]”(j¯)�”}”(hŒ``VM_FAULT_FALLBACK``”h]”jS)�”}”(hjØ_h]”hŒVM_FAULT_FALLBACK”…”�”}”(hjÚ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÖ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M¦hjÒ_ubjÉ)�”}”(hhh]”jM)�”}”(hŒ*huge page fault failed, fall back to small”h]”hŒ*huge page fault failed, fall back to small”…”�”}”(hjñ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jí_h´M¦hjî_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÒ_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jí_h´M¦hjÍ]ubj©)�”}”(hŒ4``VM_FAULT_DONE_COW`` ->fault has fully handled COW ”h]”(j¯)�”}”(hŒ``VM_FAULT_DONE_COW``”h]”jS)�”}”(hj`h]”hŒVM_FAULT_DONE_COW”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M©hj `ubjÉ)�”}”(hhh]”jM)�”}”(hŒ->fault has fully handled COW”h]”hŒ->fault has fully handled COW”…”�”}”(hj*`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j&`h´M©hj'`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj `ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j&`h´M©hjÍ]ubj©)�”}”(hŒ}``VM_FAULT_NEEDDSYNC`` ->fault did not modify page tables and needs fsync() to complete (for synchronous page faults in DAX) ”h]”(j¯)�”}”(hŒ``VM_FAULT_NEEDDSYNC``”h]”jS)�”}”(hjJ`h]”hŒVM_FAULT_NEEDDSYNC”…”�”}”(hjL`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjH`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M®hjD`ubjÉ)�”}”(hhh]”jM)�”}”(hŒe->fault did not modify page tables and needs fsync() to complete (for synchronous page faults in DAX)”h]”hŒe->fault did not modify page tables and needs fsync() to complete (for synchronous page faults in DAX)”…”�”}”(hjc`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M¬hj``ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjD`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j_`h´M®hjÍ]ubj©)�”}”(hŒG``VM_FAULT_COMPLETED`` ->fault completed, meanwhile mmap lock released ”h]”(j¯)�”}”(hŒ``VM_FAULT_COMPLETED``”h]”jS)�”}”(hj„`h]”hŒVM_FAULT_COMPLETED”…”�”}”(hj†`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‚`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M±hj~`ubjÉ)�”}”(hhh]”jM)�”}”(hŒ/->fault completed, meanwhile mmap lock released”h]”hŒ/->fault completed, meanwhile mmap lock released”…”�”}”(hj�`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j™`h´M±hjš`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj~`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j™`h´M±hjÍ]ubj©)�”}”(hŒ*``VM_FAULT_HINDEX_MASK`` mask HINDEX value”h]”(j¯)�”}”(hŒ``VM_FAULT_HINDEX_MASK``”h]”jS)�”}”(hj½`h]”hŒVM_FAULT_HINDEX_MASK”…”�”}”(hj¿`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj»`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M³hj·`ubjÉ)�”}”(hhh]”jM)�”}”(hŒmask HINDEX value”h]”hŒmask HINDEX value”…”�”}”(hjÖ`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M´hjÓ`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj·`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÒ`h´M³hjÍ]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj±]ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³j"Mh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfault_flag (C enum)”Œ c.fault_flag”hNt”auh1hÜhjÞÁh²hh³j"Mh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ fault_flag”h]”hù)�”}”(hŒenum fault_flag”h]”(j5)�”}”(hj‘ôh]”hŒenum”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjah²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M¹ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%ah²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjah²hh³j$ah´M¹ubhÿ)�”}”(hŒ fault_flag”h]”j)�”}”(hjah]”hŒ fault_flag”…”�”}”(hj7ah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3aubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjah²hh³j$ah´M¹ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjah²hh³j$ah´M¹ubah}”(h]”j aah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j$ah´M¹hj ah²hubj4)�”}”(hhh]”jM)�”}”(hŒFault flag definitions.”h]”hŒFault flag definitions.”…”�”}”(hjYah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MçhjVah²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj ah²hh³j$ah´M¹ubeh}”(h]”h ]”(jAŒenum”eh"]”h$]”h&]”jFjAjGjqajHjqajI‰jJ‰jK‰uh1híh²hhjÞÁh³j"Mh´Nubj„)�”}”(hX**Constants** ``FAULT_FLAG_WRITE`` Fault was a write fault. ``FAULT_FLAG_MKWRITE`` Fault was mkwrite of existing PTE. ``FAULT_FLAG_ALLOW_RETRY`` Allow to retry the fault if blocked. ``FAULT_FLAG_RETRY_NOWAIT`` Don't drop mmap_lock and wait when retrying. ``FAULT_FLAG_KILLABLE`` The fault task is in SIGKILL killable region. ``FAULT_FLAG_TRIED`` The fault has been tried once. ``FAULT_FLAG_USER`` The fault originated in userspace. ``FAULT_FLAG_REMOTE`` The fault is not for current task/mm. ``FAULT_FLAG_INSTRUCTION`` The fault was during an instruction fetch. ``FAULT_FLAG_INTERRUPTIBLE`` The fault can be interrupted by non-fatal signals. ``FAULT_FLAG_UNSHARE`` The fault is an unsharing request to break COW in a COW mapping, making sure that an exclusive anon page is mapped after the fault. ``FAULT_FLAG_ORIG_PTE_VALID`` whether the fault has vmf->orig_pte cached. We should only access orig_pte if this flag set. ``FAULT_FLAG_VMA_LOCK`` The fault is handled under VMA lock.”•h]”(jM)�”}”(hŒ **Constants**”h]”jŽ)�”}”(hj{ah]”hŒ Constants”…”�”}”(hj}ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjyaubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´Mëhjuaubj¤)�”}”(hhh]”(j©)�”}”(hŒ.``FAULT_FLAG_WRITE`` Fault was a write fault. ”h]”(j¯)�”}”(hŒ``FAULT_FLAG_WRITE``”h]”jS)�”}”(hjšah]”hŒFAULT_FLAG_WRITE”…”�”}”(hjœah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj˜aubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´Mîhj”aubjÉ)�”}”(hhh]”jM)�”}”(hŒFault was a write fault.”h]”hŒFault was a write fault.”…”�”}”(hj³ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¯ah´Mîhj°aubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj”aubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¯ah´Mîhj‘aubj©)�”}”(hŒ:``FAULT_FLAG_MKWRITE`` Fault was mkwrite of existing PTE. ”h]”(j¯)�”}”(hŒ``FAULT_FLAG_MKWRITE``”h]”jS)�”}”(hjÓah]”hŒFAULT_FLAG_MKWRITE”…”�”}”(hjÕah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÑaubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MñhjÍaubjÉ)�”}”(hhh]”jM)�”}”(hŒ"Fault was mkwrite of existing PTE.”h]”hŒ"Fault was mkwrite of existing PTE.”…”�”}”(hjìah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jèah´Mñhjéaubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÍaubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jèah´Mñhj‘aubj©)�”}”(hŒ@``FAULT_FLAG_ALLOW_RETRY`` Allow to retry the fault if blocked. ”h]”(j¯)�”}”(hŒ``FAULT_FLAG_ALLOW_RETRY``”h]”jS)�”}”(hj bh]”hŒFAULT_FLAG_ALLOW_RETRY”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj bubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MôhjbubjÉ)�”}”(hhh]”jM)�”}”(hŒ$Allow to retry the fault if blocked.”h]”hŒ$Allow to retry the fault if blocked.”…”�”}”(hj%bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j!bh´Môhj"bubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j!bh´Môhj‘aubj©)�”}”(hŒI``FAULT_FLAG_RETRY_NOWAIT`` Don't drop mmap_lock and wait when retrying. ”h]”(j¯)�”}”(hŒ``FAULT_FLAG_RETRY_NOWAIT``”h]”jS)�”}”(hjEbh]”hŒFAULT_FLAG_RETRY_NOWAIT”…”�”}”(hjGbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjCbubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M÷hj?bubjÉ)�”}”(hhh]”jM)�”}”(hŒ,Don't drop mmap_lock and wait when retrying.”h]”hŒ.Don’t drop mmap_lock and wait when retrying.”…”�”}”(hj^bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jZbh´M÷hj[bubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj?bubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jZbh´M÷hj‘aubj©)�”}”(hŒF``FAULT_FLAG_KILLABLE`` The fault task is in SIGKILL killable region. ”h]”(j¯)�”}”(hŒ``FAULT_FLAG_KILLABLE``”h]”jS)�”}”(hj~bh]”hŒFAULT_FLAG_KILLABLE”…”�”}”(hj€bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj|bubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MúhjxbubjÉ)�”}”(hhh]”jM)�”}”(hŒ-The fault task is in SIGKILL killable region.”h]”hŒ-The fault task is in SIGKILL killable region.”…”�”}”(hj—bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j“bh´Múhj”bubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjxbubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j“bh´Múhj‘aubj©)�”}”(hŒ4``FAULT_FLAG_TRIED`` The fault has been tried once. ”h]”(j¯)�”}”(hŒ``FAULT_FLAG_TRIED``”h]”jS)�”}”(hj·bh]”hŒFAULT_FLAG_TRIED”…”�”}”(hj¹bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjµbubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´Mýhj±bubjÉ)�”}”(hhh]”jM)�”}”(hŒThe fault has been tried once.”h]”hŒThe fault has been tried once.”…”�”}”(hjÐbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÌbh´MýhjÍbubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj±bubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÌbh´Mýhj‘aubj©)�”}”(hŒ7``FAULT_FLAG_USER`` The fault originated in userspace. ”h]”(j¯)�”}”(hŒ``FAULT_FLAG_USER``”h]”jS)�”}”(hjðbh]”hŒFAULT_FLAG_USER”…”�”}”(hjòbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjîbubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MhjêbubjÉ)�”}”(hhh]”jM)�”}”(hŒ"The fault originated in userspace.”h]”hŒ"The fault originated in userspace.”…”�”}”(hj ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jch´Mhjcubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjêbubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jch´Mhj‘aubj©)�”}”(hŒ<``FAULT_FLAG_REMOTE`` The fault is not for current task/mm. ”h]”(j¯)�”}”(hŒ``FAULT_FLAG_REMOTE``”h]”jS)�”}”(hj)ch]”hŒFAULT_FLAG_REMOTE”…”�”}”(hj+ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj'cubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´Mhj#cubjÉ)�”}”(hhh]”jM)�”}”(hŒ%The fault is not for current task/mm.”h]”hŒ%The fault is not for current task/mm.”…”�”}”(hjBch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j>ch´Mhj?cubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj#cubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j>ch´Mhj‘aubj©)�”}”(hŒF``FAULT_FLAG_INSTRUCTION`` The fault was during an instruction fetch. ”h]”(j¯)�”}”(hŒ``FAULT_FLAG_INSTRUCTION``”h]”jS)�”}”(hjbch]”hŒFAULT_FLAG_INSTRUCTION”…”�”}”(hjdch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj`cubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´Mhj\cubjÉ)�”}”(hhh]”jM)�”}”(hŒ*The fault was during an instruction fetch.”h]”hŒ*The fault was during an instruction fetch.”…”�”}”(hj{ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jwch´Mhjxcubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj\cubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jwch´Mhj‘aubj©)�”}”(hŒP``FAULT_FLAG_INTERRUPTIBLE`` The fault can be interrupted by non-fatal signals. ”h]”(j¯)�”}”(hŒ``FAULT_FLAG_INTERRUPTIBLE``”h]”jS)�”}”(hj›ch]”hŒFAULT_FLAG_INTERRUPTIBLE”…”�”}”(hj�ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj™cubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M hj•cubjÉ)�”}”(hhh]”jM)�”}”(hŒ2The fault can be interrupted by non-fatal signals.”h]”hŒ2The fault can be interrupted by non-fatal signals.”…”�”}”(hj´ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j°ch´M hj±cubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj•cubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j°ch´M hj‘aubj©)�”}”(hŒ›``FAULT_FLAG_UNSHARE`` The fault is an unsharing request to break COW in a COW mapping, making sure that an exclusive anon page is mapped after the fault. ”h]”(j¯)�”}”(hŒ``FAULT_FLAG_UNSHARE``”h]”jS)�”}”(hjÔch]”hŒFAULT_FLAG_UNSHARE”…”�”}”(hjÖch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÒcubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MhjÎcubjÉ)�”}”(hhh]”jM)�”}”(hŒƒThe fault is an unsharing request to break COW in a COW mapping, making sure that an exclusive anon page is mapped after the fault.”h]”hŒƒThe fault is an unsharing request to break COW in a COW mapping, making sure that an exclusive anon page is mapped after the fault.”…”�”}”(hjích²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M hjêcubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÎcubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jéch´Mhj‘aubj©)�”}”(hŒ{``FAULT_FLAG_ORIG_PTE_VALID`` whether the fault has vmf->orig_pte cached. We should only access orig_pte if this flag set. ”h]”(j¯)�”}”(hŒ``FAULT_FLAG_ORIG_PTE_VALID``”h]”jS)�”}”(hjdh]”hŒFAULT_FLAG_ORIG_PTE_VALID”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj dubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MhjdubjÉ)�”}”(hhh]”jM)�”}”(hŒ\whether the fault has vmf->orig_pte cached. We should only access orig_pte if this flag set.”h]”hŒ\whether the fault has vmf->orig_pte cached. We should only access orig_pte if this flag set.”…”�”}”(hj'dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´Mhj$dubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjdubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j#dh´Mhj‘aubj©)�”}”(hŒ<``FAULT_FLAG_VMA_LOCK`` The fault is handled under VMA lock.”h]”(j¯)�”}”(hŒ``FAULT_FLAG_VMA_LOCK``”h]”jS)�”}”(hjHdh]”hŒFAULT_FLAG_VMA_LOCK”…”�”}”(hjJdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjFdubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MhjBdubjÉ)�”}”(hhh]”jM)�”}”(hŒ$The fault is handled under VMA lock.”h]”hŒ$The fault is handled under VMA lock.”…”�”}”(hjadh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´Mhj^dubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjBdubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j]dh´Mhj‘aubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjuaubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³j"Mh´NubjM)�”}”(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&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MhjÞÁh²hubjM)�”}”(hŒÖAbout **FAULT_FLAG_ALLOW_RETRY** and **FAULT_FLAG_TRIED**: we can specify whether we would allow page faults to retry by specifying these two fault flags correctly. Currently there can be three legal combinations:”h]”(hŒAbout ”…”�”}”(hj¡dh²hh³Nh´NubjŽ)�”}”(hŒ**FAULT_FLAG_ALLOW_RETRY**”h]”hŒFAULT_FLAG_ALLOW_RETRY”…”�”}”(hj©dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¡dubhŒ and ”…”�”}”(hj¡dh²hh³Nh´NubjŽ)�”}”(hŒ**FAULT_FLAG_TRIED**”h]”hŒFAULT_FLAG_TRIED”…”�”}”(hj»dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¡dubhŒ�: we can specify whether we would allow page faults to retry by specifying these two fault flags correctly. Currently there can be three legal combinations:”…”�”}”(hj¡dh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MøhjÞÁh²hubjÐ/)�”}”(hhh]”(jÕ/)�”}”(hŒtALLOW_RETRY and !TRIED: this means the page fault allows retry, and this is the first try ”h]”j¤)�”}”(hhh]”j©)�”}”(hŒ[ALLOW_RETRY and !TRIED: this means the page fault allows retry, and this is the first try ”h]”(j¯)�”}”(hŒDALLOW_RETRY and !TRIED: this means the page fault allows retry, and”h]”hŒDALLOW_RETRY and !TRIED: this means the page fault allows retry, and”…”�”}”(hjâdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MýhjÞdubjÉ)�”}”(hhh]”jM)�”}”(hŒthis is the first try”h]”hŒthis is the first try”…”�”}”(hjôdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jðdh´Mýhjñdubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÞdubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jðdh´MýhjÛdubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj×dubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjÔdubjÕ/)�”}”(hŒ€ALLOW_RETRY and TRIED: this means the page fault allows retry, and we've already tried at least once ”h]”j¤)�”}”(hhh]”j©)�”}”(hŒgALLOW_RETRY and TRIED: this means the page fault allows retry, and we've already tried at least once ”h]”(j¯)�”}”(hŒDALLOW_RETRY and TRIED: this means the page fault allows retry, and”h]”hŒDALLOW_RETRY and TRIED: this means the page fault allows retry, and”…”�”}”(hj%eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´Mhj!eubjÉ)�”}”(hhh]”jM)�”}”(hŒ!we've already tried at least once”h]”hŒ#we’ve already tried at least once”…”�”}”(hj7eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j3eh´Mhj4eubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj!eubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j3eh´Mhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjÔdubjÕ/)�”}”(hŒH!ALLOW_RETRY and !TRIED: this means the page fault does not allow retry ”h]”jM)�”}”(hŒG!ALLOW_RETRY and !TRIED: this means the page fault does not allow retry”h]”hŒG!ALLOW_RETRY and !TRIED: this means the page fault does not allow retry”…”�”}”(hjaeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´Mhj]eubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjÔdubeh}”(h]”h ]”h"]”h$]”h&]”j>0Œ loweralpha”j@0j™!jA0jÂ!uh1jÏ/hjÞÁh²hh³j"Mh´NubjM)�”}”(hX�The unlisted combination (!ALLOW_RETRY && TRIED) is illegal and should never be used. Note that page faults can be allowed to retry for multiple times, in which case we'll have an initial fault with flags (a) then later on continuous faults with flags (b). We should always try to detect pending signals before a retry to make sure the continuous page faults can still be interrupted if necessary.”h]”hX‘The unlisted combination (!ALLOW_RETRY && TRIED) is illegal and should never be used. Note that page faults can be allowed to retry for multiple times, in which case we’ll have an initial fault with flags (a) then later on continuous faults with flags (b). We should always try to detect pending signals before a retry to make sure the continuous page faults can still be interrupted if necessary.”…”�”}”(hj}eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´MhjÞÁh²hubjM)�”}”(hŒ¹The combination FAULT_FLAG_WRITE|FAULT_FLAG_UNSHARE is illegal. FAULT_FLAG_UNSHARE is ignored and treated like an ordinary read fault when applied to mappings that are not COW mappings.”h]”hŒ¹The combination FAULT_FLAG_WRITE|FAULT_FLAG_UNSHARE is illegal. FAULT_FLAG_UNSHARE is ignored and treated like an ordinary read fault when applied to mappings that are not COW mappings.”…”�”}”(hjŒeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:103: ./include/linux/mm_types.h”h´M hjÞÁh²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_is_file_lru (C function)”Œc.folio_is_file_lru”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ1int folio_is_file_lru (const struct folio *folio)”h]”hù)�”}”(hŒ0int folio_is_file_lru(const struct folio *folio)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj´eh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj°eh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´KubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃeh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj°eh²hh³jÂeh´Kubhÿ)�”}”(hŒfolio_is_file_lru”h]”j)�”}”(hŒfolio_is_file_lru”h]”hŒfolio_is_file_lru”…”�”}”(hjÕeh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÑeubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj°eh²hh³jÂeh´Kubj )�”}”(hŒ(const struct folio *folio)”h]”j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjñeh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjíeubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþeh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjíeubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj fh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjíeubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjíeubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj*fh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj'fubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j,fŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj×esbŒc.folio_is_file_lru”†”asbuh1hhjíeubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJfh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjíeubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjXfh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjíeubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjefh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjíeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjéeubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj°eh²hh³jÂeh´Kubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¬eh²hh³jÂeh´Kubah}”(h]”j§eah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÂeh´Khj©eh²hubj4)�”}”(hhh]”jM)�”}”(hŒ.Should the folio be on a file LRU or anon LRU?”h]”hŒ.Should the folio be on a file LRU or anon LRU?”…”�”}”(hj�fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´KhjŒfh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj©eh²hh³jÂeh´Kubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj§fjHj§fjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXX**Parameters** ``const struct folio *folio`` The folio to test. **Description** We would like to get this info without a page flag, but the state needs to survive until the folio is last deleted from the LRU, which could be as far down as __page_cache_release. **Return** An integer (not a boolean!) used to sort a folio onto the right LRU list and to account folios correctly. 1 if **folio** is a regular filesystem backed page cache folio or a lazily freed anonymous folio (e.g. via MADV_FREE). 0 if **folio** is a normal anonymous folio, a tmpfs folio or otherwise ram or swap backed folio.”h]”(jM)�”}”(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&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´Khj«fubj¤)�”}”(hhh]”j©)�”}”(hŒ1``const struct folio *folio`` The folio to test. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjÐfh]”hŒconst struct folio *folio”…”�”}”(hjÒfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÎfubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´KhjÊfubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to test.”h]”hŒThe folio to test.”…”�”}”(hjéfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jåfh´Khjæfubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÊfubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jåfh´KhjÇfubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj«fubjM)�”}”(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&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´Khj«fubjM)�”}”(hŒ´We would like to get this info without a page flag, but the state needs to survive until the folio is last deleted from the LRU, which could be as far down as __page_cache_release.”h]”hŒ´We would like to get this info without a page flag, but the state needs to survive until the folio is last deleted from the LRU, which could be as far down as __page_cache_release.”…”�”}”(hj!gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´Khj«fubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj2gh]”hŒReturn”…”�”}”(hj4gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj0gubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´Khj«fubjM)�”}”(hXAAn integer (not a boolean!) used to sort a folio onto the right LRU list and to account folios correctly. 1 if **folio** is a regular filesystem backed page cache folio or a lazily freed anonymous folio (e.g. via MADV_FREE). 0 if **folio** is a normal anonymous folio, a tmpfs folio or otherwise ram or swap backed folio.”h]”(hŒoAn integer (not a boolean!) used to sort a folio onto the right LRU list and to account folios correctly. 1 if ”…”�”}”(hjHgh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjPgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjHgubhŒn is a regular filesystem backed page cache folio or a lazily freed anonymous folio (e.g. via MADV_FREE). 0 if ”…”�”}”(hjHgh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjbgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjHgubhŒR is a normal anonymous folio, a tmpfs folio or otherwise ram or swap backed folio.”…”�”}”(hjHgh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´Khj«fubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$__folio_clear_lru_flags (C function)”Œc.__folio_clear_lru_flags”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ2void __folio_clear_lru_flags (struct folio *folio)”h]”hù)�”}”(hŒ1void __folio_clear_lru_flags(struct folio *folio)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj›gh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj—gh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´K:ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªgh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj—gh²hh³j©gh´K:ubhÿ)�”}”(hŒ__folio_clear_lru_flags”h]”j)�”}”(hŒ__folio_clear_lru_flags”h]”hŒ__folio_clear_lru_flags”…”�”}”(hj¼gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¸gubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj—gh²hh³j©gh´K:ubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjØgh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÔgubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjågh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÔgubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjögh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjógubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jøgŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj¾gsbŒc.__folio_clear_lru_flags”†”asbuh1hhjÔgubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÔgubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj$hh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÔgubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj1hh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÔgubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÐgubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj—gh²hh³j©gh´K:ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj“gh²hh³j©gh´K:ubah}”(h]”jŽgah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j©gh´K:hj�gh²hubj4)�”}”(hhh]”jM)�”}”(hŒ-Clear page lru flags before releasing a page.”h]”hŒ-Clear page lru flags before releasing a page.”…”�”}”(hj[hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´K:hjXhh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj�gh²hh³j©gh´K:ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjshjHjshjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒa**Parameters** ``struct folio *folio`` The folio that was on lru and now has a zero reference.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj}hh]”hŒ Parameters”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj{hubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´K>hjwhubj¤)�”}”(hhh]”j©)�”}”(hŒO``struct folio *folio`` The folio that was on lru and now has a zero reference.”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjœhh]”hŒstruct folio *folio”…”�”}”(hjžhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjšhubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´K@hj–hubjÉ)�”}”(hhh]”jM)�”}”(hŒ7The folio that was on lru and now has a zero reference.”h]”hŒ7The folio that was on lru and now has a zero reference.”…”�”}”(hjµhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´K;hj²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj–hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j±hh´K@hj“hubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjwhubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_lru_list (C function)”Œc.folio_lru_list”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ8enum lru_list folio_lru_list (const struct folio *folio)”h]”hù)�”}”(hŒ7enum lru_list folio_lru_list(const struct folio *folio)”h]”(j5)�”}”(hj‘ôh]”hŒenum”…”�”}”(hjöhh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjòhh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´KLubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjòhh²hh³jih´KLubh)�”}”(hhh]”j)�”}”(hŒlru_list”h]”hŒlru_list”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjiubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jiŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒfolio_lru_list”sbŒc.folio_lru_list”†”asbuh1hhjòhh²hh³jih´KLubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6ih²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjòhh²hh³jih´KLubhÿ)�”}”(hŒfolio_lru_list”h]”j)�”}”(hj3ih]”hŒfolio_lru_list”…”�”}”(hjHih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjDiubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjòhh²hh³jih´KLubj )�”}”(hŒ(const struct folio *folio)”h]”j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjcih²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj_iubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjpih²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj_iubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj~ih²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj_iubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹ih²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj_iubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjœih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™iubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jžiŒmodname”NŒ classname”Njpjs)�”}”jv]”j1iŒc.folio_lru_list”†”asbuh1hhj_iubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºih²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj_iubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÈih²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj_iubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÕih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj_iubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj[iubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjòhh²hh³jih´KLubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjîhh²hh³jih´KLubah}”(h]”jéhah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jih´KLhjëhh²hubj4)�”}”(hhh]”jM)�”}”(hŒ$Which LRU list should a folio be on?”h]”hŒ$Which LRU list should a folio be on?”…”�”}”(hjÿih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´KLhjüih²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjëhh²hh³jih´KLubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjjjHjjjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ›**Parameters** ``const struct folio *folio`` The folio to test. **Return** The LRU list a folio should be on, as an index into the array of LRU lists.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj!jh]”hŒ Parameters”…”�”}”(hj#jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjjubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´KPhjjubj¤)�”}”(hhh]”j©)�”}”(hŒ1``const struct folio *folio`` The folio to test. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hj@jh]”hŒconst struct folio *folio”…”�”}”(hjBjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj>jubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´KMhj:jubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to test.”h]”hŒThe folio to test.”…”�”}”(hjYjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jUjh´KMhjVjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj:jubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jUjh´KMhj7jubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjjubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj{jh]”hŒReturn”…”�”}”(hj}jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjyjubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´KOhjjubjM)�”}”(hŒKThe LRU list a folio should be on, as an index into the array of LRU lists.”h]”hŒKThe LRU list a folio should be on, as an index into the array of LRU lists.”…”�”}”(hj‘jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´KOhjjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!num_pages_contiguous (C function)”Œc.num_pages_contiguous”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒBsize_t num_pages_contiguous (struct page **pages, size_t nr_pages)”h]”hù)�”}”(hŒAsize_t num_pages_contiguous(struct page **pages, size_t nr_pages)”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÃjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÀjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÅjŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒnum_pages_contiguous”sbŒc.num_pages_contiguous”†”asbuh1hhj¼jh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´MFubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåjh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¼jh²hh³jäjh´MFubhÿ)�”}”(hŒnum_pages_contiguous”h]”j)�”}”(hjájh]”hŒnum_pages_contiguous”…”�”}”(hj÷jh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjójubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¼jh²hh³jäjh´MFubj )�”}”(hŒ&(struct page **pages, size_t nr_pages)”h]”(j )�”}”(hŒstruct page **pages”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjkubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjkubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj0kh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj-kubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j2kŒmodname”NŒ classname”Njpjs)�”}”jv]”jßjŒc.num_pages_contiguous”†”asbuh1hhjkubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNkh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjkubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj\kh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjkubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjikh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjkubj)�”}”(hŒpages”h]”hŒpages”…”�”}”(hjvkh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjkubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj kubj )�”}”(hŒsize_t nr_pages”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj’kh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�kubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j”kŒmodname”NŒ classname”Njpjs)�”}”jv]”jßjŒc.num_pages_contiguous”†”asbuh1hhj‹kubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°kh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj‹kubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hj¾kh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‹kubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj kubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¼jh²hh³jäjh´MFubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¸jh²hh³jäjh´MFubah}”(h]”j³jah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jäjh´MFhjµjh²hubj4)�”}”(hhh]”jM)�”}”(hŒGdetermine the number of contiguous pages that represent contiguous PFNs”h]”hŒGdetermine the number of contiguous pages that represent contiguous PFNs”…”�”}”(hjèkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´MFhjåkh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjµjh²hh³jäjh´MFubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjljHjljI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX6**Parameters** ``struct page **pages`` an array of page pointers ``size_t nr_pages`` length of the array, at least 1 **Description** Determine the number of contiguous pages that represent contiguous PFNs in **pages**, starting from the first page. In some kernel configs contiguous PFNs will not have contiguous struct pages. In these configurations num_pages_contiguous() will return a num smaller than ideal number. The caller should continue to check for pfn contiguity after each call to num_pages_contiguous(). Returns the number of contiguous pages.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj lh]”hŒ Parameters”…”�”}”(hj lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´MJhjlubj¤)�”}”(hhh]”(j©)�”}”(hŒ2``struct page **pages`` an array of page pointers ”h]”(j¯)�”}”(hŒ``struct page **pages``”h]”jS)�”}”(hj)lh]”hŒstruct page **pages”…”�”}”(hj+lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj'lubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´MHhj#lubjÉ)�”}”(hhh]”jM)�”}”(hŒan array of page pointers”h]”hŒan array of page pointers”…”�”}”(hjBlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j>lh´MHhj?lubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj#lubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j>lh´MHhj lubj©)�”}”(hŒ4``size_t nr_pages`` length of the array, at least 1 ”h]”(j¯)�”}”(hŒ``size_t nr_pages``”h]”jS)�”}”(hjblh]”hŒsize_t nr_pages”…”�”}”(hjdlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj`lubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´MIhj\lubjÉ)�”}”(hhh]”jM)�”}”(hŒlength of the array, at least 1”h]”hŒlength of the array, at least 1”…”�”}”(hj{lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jwlh´MIhjxlubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj\lubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jwlh´MIhj lubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjlubjM)�”}”(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&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´MKhjlubjM)�”}”(hŒsDetermine the number of contiguous pages that represent contiguous PFNs in **pages**, starting from the first page.”h]”(hŒKDetermine the number of contiguous pages that represent contiguous PFNs in ”…”�”}”(hj³lh²hh³Nh´NubjŽ)�”}”(hŒ **pages**”h]”hŒpages”…”�”}”(hj»lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj³lubhŒ, starting from the first page.”…”�”}”(hj³lh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´MJhjlubjM)�”}”(hX In some kernel configs contiguous PFNs will not have contiguous struct pages. In these configurations num_pages_contiguous() will return a num smaller than ideal number. The caller should continue to check for pfn contiguity after each call to num_pages_contiguous().”h]”hX In some kernel configs contiguous PFNs will not have contiguous struct pages. In these configurations num_pages_contiguous() will return a num smaller than ideal number. The caller should continue to check for pfn contiguity after each call to num_pages_contiguous().”…”�”}”(hjÔlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´MMhjlubjM)�”}”(hŒ'Returns the number of contiguous pages.”h]”hŒ'Returns the number of contiguous pages.”…”�”}”(hjãlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:105: ./include/linux/mm_inline.h”h´MRhjlubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpage_folio (C macro)”Œ c.page_folio”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ page_folio”h]”hù)�”}”(hŒ page_folio”h]”hÿ)�”}”(hŒ page_folio”h]”j)�”}”(hj mh]”hŒ page_folio”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjmubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjmh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M ubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj mh²hh³j)mh´M ubah}”(h]”jmah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j)mh´M hjmh²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hjmh²hh³j)mh´M ubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGjBmjHjBmjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´NubjM)�”}”(hŒ``page_folio (p)``”h]”jS)�”}”(hjHmh]”hŒpage_folio (p)”…”�”}”(hjJmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjFmubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M"hjÞÁh²hubji)�”}”(hŒConverts from page to folio. ”h]”jM)�”}”(hŒConverts from page to folio.”h]”hŒConverts from page to folio.”…”�”}”(hjbmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M hj^mubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jpmh´M hjÞÁh²hubj„)�”}”(hX¦**Parameters** ``p`` The page. **Description** Every page is part of a folio. This function cannot be called on a NULL pointer. **Context** No reference, nor lock is required on **page**. If the caller does not hold a reference, this call may race with a folio split, so it should re-check the folio still contains this page after gaining a reference on the folio. **Return** The folio which contains this page.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj}mh]”hŒ Parameters”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj{mubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M$hjwmubj¤)�”}”(hhh]”j©)�”}”(hŒ``p`` The page. ”h]”(j¯)�”}”(hŒ``p``”h]”jS)�”}”(hjœmh]”hŒp”…”�”}”(hjžmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjšmubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M!hj–mubjÉ)�”}”(hhh]”jM)�”}”(hŒ The page.”h]”hŒ The page.”…”�”}”(hjµmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j±mh´M!hj²mubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj–mubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j±mh´M!hj“mubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjwmubjM)�”}”(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&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M#hjwmubjM)�”}”(hŒQEvery page is part of a folio. This function cannot be called on a NULL pointer.”h]”hŒQEvery page is part of a folio. This function cannot be called on a NULL pointer.”…”�”}”(hjímh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M"hjwmubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjþmh]”hŒContext”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjümubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M%hjwmubjM)�”}”(hŒáNo reference, nor lock is required on **page**. If the caller does not hold a reference, this call may race with a folio split, so it should re-check the folio still contains this page after gaining a reference on the folio.”h]”(hŒ&No reference, nor lock is required on ”…”�”}”(hjnh²hh³Nh´NubjŽ)�”}”(hŒ**page**”h]”hŒpage”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjnubhŒ³. If the caller does not hold a reference, this call may race with a folio split, so it should re-check the folio still contains this page after gaining a reference on the folio.”…”�”}”(hjnh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M&hjwmubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj7nh]”hŒReturn”…”�”}”(hj9nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj5nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M+hjwmubjM)�”}”(hŒ#The folio which contains this page.”h]”hŒ#The folio which contains this page.”…”�”}”(hjMnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M*hjwmubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_page (C macro)”Œ c.folio_page”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ folio_page”h]”hù)�”}”(hŒ folio_page”h]”hÿ)�”}”(hŒ folio_page”h]”j)�”}”(hjvnh]”hŒ folio_page”…”�”}”(hj€nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj|nubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjxnh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M1ubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjtnh²hh³j“nh´M1ubah}”(h]”jonah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j“nh´M1hjqnh²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hjqnh²hh³j“nh´M1ubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGj¬njHj¬njI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´NubjM)�”}”(hŒ``folio_page (folio, n)``”h]”jS)�”}”(hj²nh]”hŒfolio_page (folio, n)”…”�”}”(hj´nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj°nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M3hjÞÁh²hubji)�”}”(hŒReturn a page from a folio. ”h]”jM)�”}”(hŒReturn a page from a folio.”h]”hŒReturn a page from a folio.”…”�”}”(hjÌnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M1hjÈnubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jÚnh´M1hjÞÁh²hubj„)�”}”(hX **Parameters** ``folio`` The folio. ``n`` The page number to return. **Description** **n** is relative to the start of the folio. This function does not check that the page number lies within **folio**; the caller is presumed to have a reference to the page.”h]”(jM)�”}”(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&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M5hjánubj¤)�”}”(hhh]”(j©)�”}”(hŒ``folio`` The folio. ”h]”(j¯)�”}”(hŒ ``folio``”h]”jS)�”}”(hjoh]”hŒfolio”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjoubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M2hjoubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³joh´M2hjoubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjoubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³joh´M2hjýnubj©)�”}”(hŒ!``n`` The page number to return. ”h]”(j¯)�”}”(hŒ``n``”h]”jS)�”}”(hj?oh]”hŒn”…”�”}”(hjAoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj=oubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M3hj9oubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page number to return.”h]”hŒThe page number to return.”…”�”}”(hjXoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jToh´M3hjUoubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj9oubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jToh´M3hjýnubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjánubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjzoh]”hŒ Description”…”�”}”(hj|oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjxoubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M5hjánubjM)�”}”(hŒ®**n** is relative to the start of the folio. This function does not check that the page number lies within **folio**; the caller is presumed to have a reference to the page.”h]”(jŽ)�”}”(hŒ**n**”h]”hŒn”…”�”}”(hj”oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�oubhŒg is relative to the start of the folio. This function does not check that the page number lies within ”…”�”}”(hj�oh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj¦oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�oubhŒ9; the caller is presumed to have a reference to the page.”…”�”}”(hj�oh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M4hjánubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ(folio_xor_flags_has_waiters (C function)”Œc.folio_xor_flags_has_waiters”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒJbool folio_xor_flags_has_waiters (struct folio *folio, unsigned long mask)”h]”hù)�”}”(hŒIbool folio_xor_flags_has_waiters(struct folio *folio, unsigned long mask)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjßoh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÛoh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´MôubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíoh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÛoh²hh³jìoh´Môubhÿ)�”}”(hŒfolio_xor_flags_has_waiters”h]”j)�”}”(hŒfolio_xor_flags_has_waiters”h]”hŒfolio_xor_flags_has_waiters”…”�”}”(hjÿoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjûoubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÛoh²hh³jìoh´Môubj )�”}”(hŒ)(struct folio *folio, unsigned long mask)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjpubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(ph²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjpubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj9ph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj6pubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j;pŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljpsbŒc.folio_xor_flags_has_waiters”†”asbuh1hhjpubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYph²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjpubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjgph²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjpubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjtph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjpubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjpubj )�”}”(hŒunsigned long mask”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj�ph²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj‰pubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›ph²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj‰pubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj©ph²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj‰pubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·ph²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj‰pubj)�”}”(hŒmask”h]”hŒmask”…”�”}”(hjÅph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‰pubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjpubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÛoh²hh³jìoh´Môubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj×oh²hh³jìoh´Môubah}”(h]”jÒoah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jìoh´MôhjÔoh²hubj4)�”}”(hhh]”jM)�”}”(hŒChange some folio flags.”h]”hŒChange some folio flags.”…”�”}”(hjïph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´Môhjìph²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÔoh²hh³jìoh´Môubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjqjHjqjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXã**Parameters** ``struct folio *folio`` The folio. ``unsigned long mask`` Bits set in this word will be changed. **Description** This must only be used for flags which are changed with the folio lock held. For example, it is unsafe to use for PG_dirty as that can be set without the folio lock held. It can also only be used on flags which are in the range 0-6 as some of the implementations only affect those bits. **Return** Whether there are tasks waiting on the folio.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjqh]”hŒ Parameters”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjqubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´Møhj qubj¤)�”}”(hhh]”(j©)�”}”(hŒ#``struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj0qh]”hŒstruct folio *folio”…”�”}”(hj2qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj.qubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´Mõhj*qubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hjIqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jEqh´MõhjFqubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj*qubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jEqh´Mõhj'qubj©)�”}”(hŒ>``unsigned long mask`` Bits set in this word will be changed. ”h]”(j¯)�”}”(hŒ``unsigned long mask``”h]”jS)�”}”(hjiqh]”hŒunsigned long mask”…”�”}”(hjkqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjgqubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´MöhjcqubjÉ)�”}”(hhh]”jM)�”}”(hŒ&Bits set in this word will be changed.”h]”hŒ&Bits set in this word will be changed.”…”�”}”(hj‚qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j~qh´Möhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjcqubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j~qh´Möhj'qubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj qubjM)�”}”(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&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´Møhj qubjM)�”}”(hX This must only be used for flags which are changed with the folio lock held. For example, it is unsafe to use for PG_dirty as that can be set without the folio lock held. It can also only be used on flags which are in the range 0-6 as some of the implementations only affect those bits.”h]”hX This must only be used for flags which are changed with the folio lock held. For example, it is unsafe to use for PG_dirty as that can be set without the folio lock held. It can also only be used on flags which are in the range 0-6 as some of the implementations only affect those bits.”…”�”}”(hjºqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M÷hj qubjM)�”}”(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&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´Mýhj qubjM)�”}”(hŒ-Whether there are tasks waiting on the folio.”h]”hŒ-Whether there are tasks waiting on the folio.”…”�”}”(hjáqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´Mþhj qubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ folio_test_uptodate (C function)”Œc.folio_test_uptodate”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ4bool folio_test_uptodate (const struct folio *folio)”h]”hù)�”}”(hŒ3bool folio_test_uptodate(const struct folio *folio)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj rh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj rh²hh³jrh´Mubhÿ)�”}”(hŒfolio_test_uptodate”h]”j)�”}”(hŒfolio_test_uptodate”h]”hŒfolio_test_uptodate”…”�”}”(hj0rh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj,rubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj rh²hh³jrh´Mubj )�”}”(hŒ(const struct folio *folio)”h]”j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjLrh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjHrubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYrh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjHrubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjgrh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjHrubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtrh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjHrubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj…rh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‚rubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j‡rŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj2rsbŒc.folio_test_uptodate”†”asbuh1hhjHrubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥rh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjHrubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj³rh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjHrubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÀrh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjHrubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjDrubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj rh²hh³jrh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjrh²hh³jrh´Mubah}”(h]”jrah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jrh´Mhjrh²hubj4)�”}”(hhh]”jM)�”}”(hŒIs this folio up to date?”h]”hŒIs this folio up to date?”…”�”}”(hjêrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´Mhjçrh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjrh²hh³jrh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjsjHjsjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXn**Parameters** ``const struct folio *folio`` The folio. **Description** The uptodate flag is set on a folio when every byte in the folio is at least as new as the corresponding bytes on storage. Anonymous and CoW folios are always uptodate. If the folio is not uptodate, some of the bytes in it may be; see the is_partially_uptodate() address_space operation.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj sh]”hŒ Parameters”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj subah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M hjsubj¤)�”}”(hhh]”j©)�”}”(hŒ)``const struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hj+sh]”hŒconst struct folio *folio”…”�”}”(hj-sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj)subah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´Mhj%subjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hjDsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j@sh´MhjAsubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj%subeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j@sh´Mhj"subah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjsubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjfsh]”hŒ Description”…”�”}”(hjhsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjdsubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M hjsubjM)�”}”(hX!The uptodate flag is set on a folio when every byte in the folio is at least as new as the corresponding bytes on storage. Anonymous and CoW folios are always uptodate. If the folio is not uptodate, some of the bytes in it may be; see the is_partially_uptodate() address_space operation.”h]”hX!The uptodate flag is set on a folio when every byte in the folio is at least as new as the corresponding bytes on storage. Anonymous and CoW folios are always uptodate. If the folio is not uptodate, some of the bytes in it may be; see the is_partially_uptodate() address_space operation.”…”�”}”(hj|sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M hjsubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_test_large (C function)”Œc.folio_test_large”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ1bool folio_test_large (const struct folio *folio)”h]”hù)�”}”(hŒ0bool folio_test_large(const struct folio *folio)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hj«sh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj§sh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´MYubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹sh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj§sh²hh³j¸sh´MYubhÿ)�”}”(hŒfolio_test_large”h]”j)�”}”(hŒfolio_test_large”h]”hŒfolio_test_large”…”�”}”(hjËsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÇsubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj§sh²hh³j¸sh´MYubj )�”}”(hŒ(const struct folio *folio)”h]”j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjçsh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjãsubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjôsh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjãsubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjãsubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjãsubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj th²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjtubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j"tŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÍssbŒc.folio_test_large”†”asbuh1hhjãsubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@th²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjãsubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjNth²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjãsubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj[th²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjãsubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjßsubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj§sh²hh³j¸sh´MYubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj£sh²hh³j¸sh´MYubah}”(h]”jžsah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¸sh´MYhj sh²hubj4)�”}”(hhh]”jM)�”}”(hŒ+Does this folio contain more than one page?”h]”hŒ+Does this folio contain more than one page?”…”�”}”(hj…th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´MYhj‚th²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj sh²hh³j¸sh´MYubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj�tjHj�tjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒz**Parameters** ``const struct folio *folio`` The folio to test. **Return** True if the folio is larger than one page.”h]”(jM)�”}”(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&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M]hj¡tubj¤)�”}”(hhh]”j©)�”}”(hŒ1``const struct folio *folio`` The folio to test. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjÆth]”hŒconst struct folio *folio”…”�”}”(hjÈth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÄtubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´MZhjÀtubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to test.”h]”hŒThe folio to test.”…”�”}”(hjßth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÛth´MZhjÜtubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÀtubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÛth´MZhj½tubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¡tubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjuh]”hŒReturn”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÿtubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´M\hj¡tubjM)�”}”(hŒ*True if the folio is larger than one page.”h]”hŒ*True if the folio is larger than one page.”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.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”]”(héŒPageHuge (C function)”Œ c.PageHuge”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ'bool PageHuge (const struct page *page)”h]”hù)�”}”(hŒ&bool PageHuge(const struct page *page)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjFu•h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjBuh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTuh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjBuh²hh³jSuh´Mubhÿ)�”}”(hŒPageHuge”h]”j)�”}”(hŒPageHuge”h]”hŒPageHuge”…”�”}”(hjfuh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjbuubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjBuh²hh³jSuh´Mubj )�”}”(hŒ(const struct page *page)”h]”j )�”}”(hŒconst struct page *page”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj‚uh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj~uubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�uh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj~uubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj�uh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj~uubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªuh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj~uubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj»uh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¸uubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j½uŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljhusbŒ c.PageHuge”†”asbuh1hhj~uubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛuh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj~uubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjéuh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj~uubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjöuh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj~uubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjzuubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjBuh²hh³jSuh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj>uh²hh³jSuh´Mubah}”(h]”j9uah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jSuh´Mhj;uh²hubj4)�”}”(hhh]”jM)�”}”(hŒ*Determine if the page belongs to hugetlbfs”h]”hŒ*Determine if the page belongs to hugetlbfs”…”�”}”(hj vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´Mhjvh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj;uh²hh³jSuh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj8vjHj8vjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ¿**Parameters** ``const struct page *page`` The page to test. **Context** Any context. **Return** True for hugetlbfs pages, false for anon pages or pages belonging to other filesystems.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjBvh]”hŒ Parameters”…”�”}”(hjDvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj@vubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:106: ./include/linux/page-flags.h”h´Mhj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj:~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÌhj6~ubj¤)�”}”(hhh]”j©)�”}”(hŒ'``enum fault_flag flags`` Fault flags. ”h]”(j¯)�”}”(hŒ``enum fault_flag flags``”h]”jS)�”}”(hj[~h]”hŒenum fault_flag flags”…”�”}”(hj]~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjY~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÉhjU~ubjÉ)�”}”(hhh]”jM)�”}”(hŒ Fault flags.”h]”hŒ Fault flags.”…”�”}”(hjt~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jp~h´MÉhjq~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjU~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jp~h´MÉhjR~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj6~ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj–~h]”hŒ Description”…”�”}”(hj˜~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj”~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MËhj6~ubjM)�”}”(hX:This is mostly used for places where we want to try to avoid taking the mmap_lock for too long a time when waiting for another condition to change, in which case we can try to be polite to release the mmap_lock in the first round to avoid potential starvation of other processes that would also want the mmap_lock.”h]”hX:This is mostly used for places where we want to try to avoid taking the mmap_lock for too long a time when waiting for another condition to change, in which case we can try to be polite to release the mmap_lock in the first round to avoid potential starvation of other processes that would also want the mmap_lock.”…”�”}”(hj¬~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÊhj6~ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÐhj6~ubjM)�”}”(hŒitrue if the page fault allows retry and this is the first attempt of the fault handling; false otherwise.”h]”hŒitrue if the page fault allows retry and this is the first attempt of the fault handling; false otherwise.”…”�”}”(hjÓ~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÑhj6~ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ vma_kernel_pagesize (C function)”Œc.vma_kernel_pagesize”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ>unsigned long vma_kernel_pagesize (struct vm_area_struct *vma)”h]”hù)�”}”(hŒ=unsigned long vma_kernel_pagesize(struct vm_area_struct *vma)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjþ~h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MkubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjþ~h²hh³jh´Mkubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjþ~h²hh³jh´MkubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjþ~h²hh³jh´Mkubhÿ)�”}”(hŒvma_kernel_pagesize”h]”j)�”}”(hŒvma_kernel_pagesize”h]”hŒvma_kernel_pagesize”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj;ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjþ~h²hh³jh´Mkubj )�”}”(hŒ(struct vm_area_struct *vma)”h]”j )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjWubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjWubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjvubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j{Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljAsbŒc.vma_kernel_pagesize”†”asbuh1hhjWubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjWubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjWubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjWubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjSubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjþ~h²hh³jh´Mkubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjú~h²hh³jh´Mkubah}”(h]”jõ~ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jh´Mkhj÷~h²hubj4)�”}”(hhh]”jM)�”}”(hŒ+Default page size granularity for this VMA.”h]”hŒ+Default page size granularity for this VMA.”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MkhjÛh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj÷~h²hh³jh´Mkubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjöjHjöjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX±**Parameters** ``struct vm_area_struct *vma`` The user mapping. **Description** The kernel page size specifies in which granularity VMA modifications can be performed. Folios in this VMA will be aligned to, and at least the size of the number of bytes returned by this function. The default kernel page size is not affected by Transparent Huge Pages being in effect. **Return** The default page size granularity for this VMA.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj€h]”hŒ Parameters”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjþubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mohjúubj¤)�”}”(hhh]”j©)�”}”(hŒ1``struct vm_area_struct *vma`` The user mapping. ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hj€h]”hŒstruct vm_area_struct *vma”…”�”}”(hj!€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mlhj€ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe user mapping.”h]”hŒThe user mapping.”…”�”}”(hj8€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j4€h´Mlhj5€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j4€h´Mlhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjúubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MnhjúubjM)�”}”(hŒÆThe kernel page size specifies in which granularity VMA modifications can be performed. Folios in this VMA will be aligned to, and at least the size of the number of bytes returned by this function.”h]”hŒÆThe kernel page size specifies in which granularity VMA modifications can be performed. Folios in this VMA will be aligned to, and at least the size of the number of bytes returned by this function.”…”�”}”(hjp€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MmhjúubjM)�”}”(hŒWThe default kernel page size is not affected by Transparent Huge Pages being in effect.”h]”hŒWThe default kernel page size is not affected by Transparent Huge Pages being in effect.”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MqhjúubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MthjúubjM)�”}”(hŒ/The default page size granularity for this VMA.”h]”hŒ/The default page size granularity for this VMA.”…”�”}”(hj¦€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Muhjúubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_order (C function)”Œ c.folio_order”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ4unsigned int folio_order (const struct folio *folio)”h]”hù)�”}”(hŒ3unsigned int folio_order(const struct folio *folio)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÕ€h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÑ€h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjä€h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÑ€h²hh³jã€h´Mubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjò€h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÑ€h²hh³jã€h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÑ€h²hh³jã€h´Mubhÿ)�”}”(hŒ folio_order”h]”j)�”}”(hŒ folio_order”h]”hŒ folio_order”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÑ€h²hh³jã€h´Mubj )�”}”(hŒ(const struct folio *folio)”h]”j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj.�h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj*�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj*�ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjI�h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj*�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjV�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj*�ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjg�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjd�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”ji�Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj�sbŒ c.folio_order”†”asbuh1hhj*�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj*�ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj•�h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj*�ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj¢�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj*�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj&�ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÑ€h²hh³jã€h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÍ€h²hh³jã€h´Mubah}”(h]”jÈ€ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jã€h´MhjÊ€h²hubj4)�”}”(hhh]”jM)�”}”(hŒ The allocation order of a folio.”h]”hŒ The allocation order of a folio.”…”�”}”(hjÌ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MhjÉ�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÊ€h²hh³jã€h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjä�jHjä�jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒÅ**Parameters** ``const struct folio *folio`` The folio. **Description** A folio is composed of 2^order pages. See get_order() for the definition of order. **Return** The order of the folio.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjî�h]”hŒ Parameters”…”�”}”(hjð�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjì�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mhjè�ubj¤)�”}”(hhh]”j©)�”}”(hŒ)``const struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hj ‚h]”hŒconst struct folio *folio”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj ‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mhj‚ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hj&‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j"‚h´Mhj#‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j"‚h´Mhj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjè�ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mhjè�ubjM)�”}”(hŒSA folio is composed of 2^order pages. See get_order() for the definition of order.”h]”hŒSA folio is composed of 2^order pages. See get_order() for the definition of order.”…”�”}”(hj^‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mhjè�ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjo‚h]”hŒReturn”…”�”}”(hjq‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjm‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mhjè�ubjM)�”}”(hŒThe order of the folio.”h]”hŒThe order of the folio.”…”�”}”(hj…‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mhjè�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_reset_order (C function)”Œc.folio_reset_order”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ,void folio_reset_order (struct folio *folio)”h]”hù)�”}”(hŒ+void folio_reset_order(struct folio *folio)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj´‚h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj°‚h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj°‚h²hh³j‚h´Mubhÿ)�”}”(hŒfolio_reset_order”h]”j)�”}”(hŒfolio_reset_order”h]”hŒfolio_reset_order”…”�”}”(hjÕ‚h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÑ‚ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj°‚h²hh³j‚h´Mubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjñ‚h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjí‚ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþ‚h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjí‚ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ƒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jƒŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljׂsbŒc.folio_reset_order”†”asbuh1hhjí‚ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/ƒh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjí‚ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj=ƒh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjí‚ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjJƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjí‚ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjé‚ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj°‚h²hh³j‚h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¬‚h²hh³j‚h´Mubah}”(h]”j§‚ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j‚h´Mhj©‚h²hubj4)�”}”(hhh]”jM)�”}”(hŒ+Reset the folio order and derived _nr_pages”h]”hŒ+Reset the folio order and derived _nr_pages”…”�”}”(hjtƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mhjqƒh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj©‚h²hh³j‚h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjŒƒjHjŒƒjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ®**Parameters** ``struct folio *folio`` The folio. **Description** Reset the order and derived _nr_pages to 0. Must only be used in the process of splitting large folios.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj–ƒh]”hŒ Parameters”…”�”}”(hj˜ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj”ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mhj�ƒubj¤)�”}”(hhh]”j©)�”}”(hŒ#``struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjµƒh]”hŒstruct folio *folio”…”�”}”(hj·ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj³ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mhj¯ƒubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hj΃h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jʃh´Mhj˃ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¯ƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jʃh´Mhj¬ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj�ƒubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjðƒh]”hŒ Description”…”�”}”(hjòƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjîƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mhj�ƒubjM)�”}”(hŒgReset the order and derived _nr_pages to 0. Must only be used in the process of splitting large folios.”h]”hŒgReset the order and derived _nr_pages to 0. Must only be used in the process of splitting large folios.”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mhj�ƒubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_mapcount (C function)”Œc.folio_mapcount”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ.int folio_mapcount (const struct folio *folio)”h]”hù)�”}”(hŒ-int folio_mapcount(const struct folio *folio)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj5„h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj1„h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MˆubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD„h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj1„h²hh³jC„h´Mˆubhÿ)�”}”(hŒfolio_mapcount”h]”j)�”}”(hŒfolio_mapcount”h]”hŒfolio_mapcount”…”�”}”(hjV„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjR„ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj1„h²hh³jC„h´Mˆubj )�”}”(hŒ(const struct folio *folio)”h]”j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjr„h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjn„ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjn„ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj�„h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjn„ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjš„h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjn„ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj«„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¨„ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j­„Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljX„sbŒc.folio_mapcount”†”asbuh1hhjn„ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjË„h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjn„ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÙ„h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjn„ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjæ„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjn„ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjj„ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj1„h²hh³jC„h´Mˆubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj-„h²hh³jC„h´Mˆubah}”(h]”j(„ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jC„h´Mˆhj*„h²hubj4)�”}”(hhh]”jM)�”}”(hŒ!Number of mappings of this folio.”h]”hŒ!Number of mappings of this folio.”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mˆhj …h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj*„h²hh³jC„h´Mˆubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj(…jHj(…jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXë**Parameters** ``const struct folio *folio`` The folio. **Description** The folio mapcount corresponds to the number of present user page table entries that reference any part of a folio. Each such present user page table entry must be paired with exactly on folio reference. For ordindary folios, each user page table entry (PTE/PMD/PUD/...) counts exactly once. For hugetlb folios, each abstracted "hugetlb" user page table entry that references the entire folio counts exactly once, even when such special page table entries are comprised of multiple ordinary page table entries. Will report 0 for pages which cannot be mapped into userspace, such as slab, page tables and similar. **Return** The number of times this folio is mapped.”h]”(jM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MŒhj,…ubj¤)�”}”(hhh]”j©)�”}”(hŒ)``const struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjQ…h]”hŒconst struct folio *folio”…”�”}”(hjS…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjO…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M‰hjK…ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hjj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jf…h´M‰hjg…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjK…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jf…h´M‰hjH…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj,…ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjŒ…h]”hŒ Description”…”�”}”(hjŽ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŠ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M‹hj,…ubjM)�”}”(hŒËThe folio mapcount corresponds to the number of present user page table entries that reference any part of a folio. Each such present user page table entry must be paired with exactly on folio reference.”h]”hŒËThe folio mapcount corresponds to the number of present user page table entries that reference any part of a folio. Each such present user page table entry must be paired with exactly on folio reference.”…”�”}”(hj¢…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MŠhj,…ubjM)�”}”(hŒWFor ordindary folios, each user page table entry (PTE/PMD/PUD/...) counts exactly once.”h]”hŒWFor ordindary folios, each user page table entry (PTE/PMD/PUD/...) counts exactly once.”…”�”}”(hj±…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MŽhj,…ubjM)�”}”(hŒÚFor hugetlb folios, each abstracted "hugetlb" user page table entry that references the entire folio counts exactly once, even when such special page table entries are comprised of multiple ordinary page table entries.”h]”hŒÞFor hugetlb folios, each abstracted “hugetlbâ€� user page table entry that references the entire folio counts exactly once, even when such special page table entries are comprised of multiple ordinary page table entries.”…”�”}”(hjÀ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M‘hj,…ubjM)�”}”(hŒeWill report 0 for pages which cannot be mapped into userspace, such as slab, page tables and similar.”h]”hŒeWill report 0 for pages which cannot be mapped into userspace, such as slab, page tables and similar.”…”�”}”(hjÏ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M•hj,…ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M˜hj,…ubjM)�”}”(hŒ)The number of times this folio is mapped.”h]”hŒ)The number of times this folio is mapped.”…”�”}”(hjö…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒfolio_mapped (C function)”Œc.folio_mapped”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ-bool folio_mapped (const struct folio *folio)”h]”hù)�”}”(hŒ,bool folio_mapped(const struct folio *folio)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hj%†h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj!†h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M©ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3†h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj!†h²hh³j2†h´M©ubhÿ)�”}”(hŒ folio_mapped”h]”j)�”}”(hŒ folio_mapped”h]”hŒ folio_mapped”…”�”}”(hjE†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjA†ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj!†h²hh³j2†h´M©ubj )�”}”(hŒ(const struct folio *folio)”h]”j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hja†h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj]†ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjn†h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj]†ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj|†h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj]†ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰†h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj]†ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjš†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj—†ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jœ†Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljG†sbŒc.folio_mapped”†”asbuh1hhj]†ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjº†h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj]†ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjȆh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj]†ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÕ†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj]†ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjY†ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj!†h²hh³j2†h´M©ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj†h²hh³j2†h´M©ubah}”(h]”j†ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j2†h´M©hj†h²hubj4)�”}”(hhh]”jM)�”}”(hŒ$Is this folio mapped into userspace?”h]”hŒ$Is this folio mapped into userspace?”…”�”}”(hjÿ†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M©hjü†h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj†h²hh³j2†h´M©ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj‡jHj‡jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ‰**Parameters** ``const struct folio *folio`` The folio. **Return** True if any page in this folio is referenced by user page tables.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj!‡h]”hŒ Parameters”…”�”}”(hj#‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M­hj‡ubj¤)�”}”(hhh]”j©)�”}”(hŒ)``const struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hj@‡h]”hŒconst struct folio *folio”…”�”}”(hjB‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj>‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mªhj:‡ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hjY‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jU‡h´MªhjV‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj:‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jU‡h´Mªhj7‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj‡ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj{‡h]”hŒReturn”…”�”}”(hj}‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjy‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M¬hj‡ubjM)�”}”(hŒATrue if any page in this folio is referenced by user page tables.”h]”hŒATrue if any page in this folio is referenced by user page tables.”…”�”}”(hj‘‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒthp_order (C function)”Œ c.thp_order”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ*unsigned int thp_order (struct page *page)”h]”hù)�”}”(hŒ)unsigned int thp_order(struct page *page)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÀ‡h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¼‡h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÖubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjχh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¼‡h²hh³j·h´MÖubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj݇h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¼‡h²hh³j·h´MÖubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjë‡h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¼‡h²hh³j·h´MÖubhÿ)�”}”(hŒ thp_order”h]”j)�”}”(hŒ thp_order”h]”hŒ thp_order”…”�”}”(hjý‡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjù‡ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¼‡h²hh³j·h´MÖubj )�”}”(hŒ(struct page *page)”h]”j )�”}”(hŒstruct page *page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjˆubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&ˆh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjˆubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj7ˆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4ˆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j9ˆŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÿ‡sbŒ c.thp_order”†”asbuh1hhjˆubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWˆh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjˆubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjeˆh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjˆubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjrˆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjˆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjˆubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¼‡h²hh³j·h´MÖubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¸‡h²hh³j·h´MÖubah}”(h]”j³‡ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j·h´MÖhjµ‡h²hubj4)�”}”(hhh]”jM)�”}”(hŒ!Order of a transparent huge page.”h]”hŒ!Order of a transparent huge page.”…”�”}”(hjœˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÖhj™ˆh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjµ‡h²hh³j·h´MÖubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj´ˆjHj´ˆjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒM**Parameters** ``struct page *page`` Head page of a transparent huge page.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¾ˆh]”hŒ Parameters”…”�”}”(hjÀˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¼ˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÚhj¸ˆubj¤)�”}”(hhh]”j©)�”}”(hŒ;``struct page *page`` Head page of a transparent huge page.”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hj݈h]”hŒstruct page *page”…”�”}”(hj߈h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÛˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÜhj׈ubjÉ)�”}”(hhh]”jM)�”}”(hŒ%Head page of a transparent huge page.”h]”hŒ%Head page of a transparent huge page.”…”�”}”(hjöˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M×hjóˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj׈ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³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”]”(héŒthp_size (C function)”Œ c.thp_size”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ*unsigned long thp_size (struct page *page)”h]”hù)�”}”(hŒ)unsigned long thp_size(struct page *page)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj7‰h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj3‰h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MàubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjF‰h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj3‰h²hh³jE‰h´Màubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjT‰h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj3‰h²hh³jE‰h´MàubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjb‰h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj3‰h²hh³jE‰h´Màubhÿ)�”}”(hŒthp_size”h]”j)�”}”(hŒthp_size”h]”hŒthp_size”…”�”}”(hjt‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjp‰ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj3‰h²hh³jE‰h´Màubj )�”}”(hŒ(struct page *page)”h]”j )�”}”(hŒstruct page *page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj�‰h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjŒ‰ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�‰h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŒ‰ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj®‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj«‰ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j°‰Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljv‰sbŒ c.thp_size”†”asbuh1hhjŒ‰ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjΉh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŒ‰ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj܉h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjŒ‰ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjé‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŒ‰ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjˆ‰ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj3‰h²hh³jE‰h´Màubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj/‰h²hh³jE‰h´Màubah}”(h]”j*‰ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jE‰h´Màhj,‰h²hubj4)�”}”(hhh]”jM)�”}”(hŒ Size of a transparent huge page.”h]”hŒ Size of a transparent huge page.”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MàhjŠh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj,‰h²hh³jE‰h´Màubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj+ŠjHj+ŠjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒx**Parameters** ``struct page *page`` Head page of a transparent huge page. **Return** Number of bytes in this page.”h]”(jM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mähj/Šubj¤)�”}”(hhh]”j©)�”}”(hŒ<``struct page *page`` Head page of a transparent huge page. ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hjTŠh]”hŒstruct page *page”…”�”}”(hjVŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjRŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MáhjNŠubjÉ)�”}”(hhh]”jM)�”}”(hŒ%Head page of a transparent huge page.”h]”hŒ%Head page of a transparent huge page.”…”�”}”(hjmŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jiŠh´MáhjjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjNŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jiŠh´MáhjKŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj/ŠubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mãhj/ŠubjM)�”}”(hŒNumber of bytes in this page.”h]”hŒNumber of bytes in this page.”…”�”}”(hj¥Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒfolio_get (C function)”Œ c.folio_get”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ$void folio_get (struct folio *folio)”h]”hù)�”}”(hŒ#void folio_get(struct folio *folio)”•h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÔŠh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjЊh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M@ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãŠh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjЊh²hh³jâŠh´M@ubhÿ)�”}”(hŒ folio_get”h]”j)�”}”(hŒ folio_get”h]”hŒ folio_get”…”�”}”(hjõŠh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñŠubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjЊh²hh³jâŠh´M@ubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj ‹ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj ‹ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj/‹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj,‹ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j1‹Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj÷ŠsbŒ c.folio_get”†”asbuh1hhj ‹ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjO‹h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj ‹ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj]‹h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj ‹ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjj‹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ‹ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj ‹ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjЊh²hh³jâŠh´M@ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÌŠh²hh³jâŠh´M@ubah}”(h]”jÇŠah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jâŠh´M@hjÉŠh²hubj4)�”}”(hhh]”jM)�”}”(hŒ)Increment the reference count on a folio.”h]”hŒ)Increment the reference count on a folio.”…”�”}”(hj”‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M@hj‘‹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÉŠh²hh³jâŠh´M@ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¬‹jHj¬‹jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ÷**Parameters** ``struct folio *folio`` The folio. **Context** May be called in any context, as long as you know that you have a refcount on the folio. If you do not already have one, folio_try_get() may be the right interface for you to use.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¶‹h]”hŒ Parameters”…”�”}”(hj¸‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj´‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MDhj°‹ubj¤)�”}”(hhh]”j©)�”}”(hŒ#``struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjÕ‹h]”hŒstruct folio *folio”…”�”}”(hj׋h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÓ‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MAhjÏ‹ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hjî‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jê‹h´MAhjë‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÏ‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jê‹h´MAhjÌ‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj°‹ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MChj°‹ubjM)�”}”(hŒ´May be called in any context, as long as you know that you have a refcount on the folio. If you do not already have one, folio_try_get() may be the right interface for you to use.”h]”hŒ´May be called in any context, as long as you know that you have a refcount on the folio. If you do not already have one, folio_try_get() may be the right interface for you to use.”…”�”}”(hj&Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MChj°‹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_put (C function)”Œ c.folio_put”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ$void folio_put (struct folio *folio)”h]”hù)�”}”(hŒ#void folio_put(struct folio *folio)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjUŒh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjQŒh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MaubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdŒh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjQŒh²hh³jcŒh´Maubhÿ)�”}”(hŒ folio_put”h]”j)�”}”(hŒ folio_put”h]”hŒ folio_put”…”�”}”(hjvŒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjrŒubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjQŒh²hh³jcŒh´Maubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj’Œh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjŽŒubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸŒh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŽŒubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj°Œh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj­Œubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j²ŒŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljxŒsbŒ c.folio_put”†”asbuh1hhjŽŒubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐŒh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŽŒubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÞŒh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjŽŒubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjëŒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŽŒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjŠŒubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjQŒh²hh³jcŒh´Maubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjMŒh²hh³jcŒh´Maubah}”(h]”jHŒah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jcŒh´MahjJŒh²hubj4)�”}”(hhh]”jM)�”}”(hŒ)Decrement the reference count on a folio.”h]”hŒ)Decrement the reference count on a folio.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mahj�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjJŒh²hh³jcŒh´Maubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj-�jHj-�jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXÝ**Parameters** ``struct folio *folio`` The folio. **Description** If the folio's reference count reaches zero, the memory will be released back to the page allocator and may be used by another allocation immediately. Do not access the memory or the struct folio after calling folio_put() unless you can be sure that it wasn't the last reference. **Context** May be called in process or interrupt context, but not in NMI context. May be called while holding a spinlock.”h]”(jM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mehj1�ubj¤)�”}”(hhh]”j©)�”}”(hŒ#``struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjV�h]”hŒstruct folio *folio”…”�”}”(hjX�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjT�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MbhjP�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hjo�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jk�h´Mbhjl�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjP�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jk�h´MbhjM�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj1�ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj‘�h]”hŒ Description”…”�”}”(hj“�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj��ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mdhj1�ubjM)�”}”(hXIf the folio's reference count reaches zero, the memory will be released back to the page allocator and may be used by another allocation immediately. Do not access the memory or the struct folio after calling folio_put() unless you can be sure that it wasn't the last reference.”h]”hXIf the folio’s reference count reaches zero, the memory will be released back to the page allocator and may be used by another allocation immediately. Do not access the memory or the struct folio after calling folio_put() unless you can be sure that it wasn’t the last reference.”…”�”}”(hj§�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mchj1�ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mihj1�ubjM)�”}”(hŒoMay be called in process or interrupt context, but not in NMI context. May be called while holding a spinlock.”h]”hŒoMay be called in process or interrupt context, but not in NMI context. May be called while holding a spinlock.”…”�”}”(hjÎ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mjhj1�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_put_refs (C function)”Œc.folio_put_refs”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ3void folio_put_refs (struct folio *folio, int refs)”h]”hù)�”}”(hŒ2void folio_put_refs(struct folio *folio, int refs)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjý�h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjù�h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MtubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Žh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjù�h²hh³j Žh´Mtubhÿ)�”}”(hŒfolio_put_refs”h]”j)�”}”(hŒfolio_put_refs”h]”hŒfolio_put_refs”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŽubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjù�h²hh³j Žh´Mtubj )�”}”(hŒ(struct folio *folio, int refs)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj:Žh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj6ŽubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGŽh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj6Žubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjXŽh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjUŽubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jZŽŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj ŽsbŒc.folio_put_refs”†”asbuh1hhj6ŽubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxŽh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj6ŽubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj†Žh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj6Žubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj“Žh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj6Žubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj2Žubj )�”}”(hŒint refs”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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¨Žubj)�”}”(hŒrefs”h]”hŒrefs”…”�”}”(hjÈŽh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¨Žubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj2Žubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjù�h²hh³j Žh´Mtubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjõ�h²hh³j Žh´Mtubah}”(h]”jð�ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j Žh´Mthjò�h²hubj4)�”}”(hhh]”jM)�”}”(hŒ&Reduce the reference count on a folio.”h]”hŒ&Reduce the reference count on a folio.”…”�”}”(hjòŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MthjïŽh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjò�h²hh³j Žh´Mtubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj �jHj �jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX0**Parameters** ``struct folio *folio`` The folio. ``int refs`` The amount to subtract from the folio's reference count. **Description** If the folio's reference count reaches zero, the memory will be released back to the page allocator and may be used by another allocation immediately. Do not access the memory or the struct folio after calling folio_put_refs() unless you can be sure that these weren't the last references. **Context** May be called in process or interrupt context, but not in NMI context. May be called while holding a spinlock.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj�h]”hŒ Parameters”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mxhj�ubj¤)�”}”(hhh]”(j©)�”}”(hŒ#``struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj3�h]”hŒstruct folio *folio”…”�”}”(hj5�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj1�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Muhj-�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hjL�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jH�h´MuhjI�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj-�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jH�h´Muhj*�ubj©)�”}”(hŒF``int refs`` The amount to subtract from the folio's reference count. ”h]”(j¯)�”}”(hŒ ``int refs``”h]”jS)�”}”(hjl�h]”hŒint refs”…”�”}”(hjn�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mvhjf�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ8The amount to subtract from the folio's reference count.”h]”hŒ:The amount to subtract from the folio’s reference count.”…”�”}”(hj…�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j��h´Mvhj‚�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjf�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j��h´Mvhj*�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj�ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj§�h]”hŒ Description”…”�”}”(hj©�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¥�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mxhj�ubjM)�”}”(hX"If the folio's reference count reaches zero, the memory will be released back to the page allocator and may be used by another allocation immediately. Do not access the memory or the struct folio after calling folio_put_refs() unless you can be sure that these weren't the last references.”h]”hX&If the folio’s reference count reaches zero, the memory will be released back to the page allocator and may be used by another allocation immediately. Do not access the memory or the struct folio after calling folio_put_refs() unless you can be sure that these weren’t the last references.”…”�”}”(hj½�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mwhj�ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M}hj�ubjM)�”}”(hŒoMay be called in process or interrupt context, but not in NMI context. May be called while holding a spinlock.”h]”hŒoMay be called in process or interrupt context, but not in NMI context. May be called while holding a spinlock.”…”�”}”(hjä�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒfolios_put (C function)”Œ c.folios_put”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ,void folios_put (struct folio_batch *folios)”h]”hù)�”}”(hŒ+void folios_put(struct folio_batch *folios)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj�h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�h²hh³j!�h´M�ubhÿ)�”}”(hŒ folios_put”h]”j)�”}”(hŒ folios_put”h]”hŒ folios_put”…”�”}”(hj4�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj0�ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj�h²hh³j!�h´M�ubj )�”}”(hŒ(struct folio_batch *folios)”h]”j )�”}”(hŒstruct folio_batch *folios”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjP�h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjL�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjL�ubh)�”}”(hhh]”j)�”}”(hŒ folio_batch”h]”hŒ folio_batch”…”�”}”(hjn�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjk�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jp�Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj6�sbŒ c.folios_put”†”asbuh1hhjL�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽ�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjL�ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjœ�h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjL�ubj)�”}”(hŒfolios”h]”hŒfolios”…”�”}”(hj©�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjL�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjH�ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj�h²hh³j!�h´M�ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj �h²hh³j!�h´M�ubah}”(h]”j�ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j!�h´M�hj�h²hubj4)�”}”(hhh]”jM)�”}”(hŒ4Decrement the reference count on an array of folios.”h]”hŒ4Decrement the reference count on an array of folios.”…”�”}”(hjÓ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M�hjÐ�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj�h²hh³j!�h´M�ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjë�jHjë�jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXñ**Parameters** ``struct folio_batch *folios`` The folios. **Description** Like folio_put(), but for a batch of folios. This is more efficient than writing the loop yourself as it will optimise the locks which need to be taken if the folios are freed. The folios batch is returned empty and ready to be reused for another batch; there is no need to reinitialise it. **Context** May be called in process or interrupt context, but not in NMI context. May be called while holding a spinlock.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjõ�h]”hŒ Parameters”…”�”}”(hj÷�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjó�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M¡hjï�ubj¤)�”}”(hhh]”j©)�”}”(hŒ+``struct folio_batch *folios`` The folios. ”h]”(j¯)�”}”(hŒ``struct folio_batch *folios``”h]”jS)�”}”(hj‘h]”hŒstruct folio_batch *folios”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mžhj‘ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folios.”h]”hŒ The folios.”…”�”}”(hj-‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j)‘h´Mžhj*‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j)‘h´Mžhj ‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjï�ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M hjï�ubjM)�”}”(hX$Like folio_put(), but for a batch of folios. This is more efficient than writing the loop yourself as it will optimise the locks which need to be taken if the folios are freed. The folios batch is returned empty and ready to be reused for another batch; there is no need to reinitialise it.”h]”hX$Like folio_put(), but for a batch of folios. This is more efficient than writing the loop yourself as it will optimise the locks which need to be taken if the folios are freed. The folios batch is returned empty and ready to be reused for another batch; there is no need to reinitialise it.”…”�”}”(hje‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MŸhjï�ubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjv‘h]”hŒContext”…”�”}”(hjx‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjt‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M¥hjï�ubjM)�”}”(hŒoMay be called in process or interrupt context, but not in NMI context. May be called while holding a spinlock.”h]”hŒoMay be called in process or interrupt context, but not in NMI context. May be called while holding a spinlock.”…”�”}”(hjŒ‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒ%vma_flags_is_cow_mapping (C function)”Œc.vma_flags_is_cow_mapping”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ8bool vma_flags_is_cow_mapping (const vma_flags_t *flags)”h]”hù)�”}”(hŒ7bool vma_flags_is_cow_mapping(const vma_flags_t *flags)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hj»‘h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj·‘h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MãubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉ‘h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj·‘h²hh³jÈ‘h´Mãubhÿ)�”}”(hŒvma_flags_is_cow_mapping”h]”j)�”}”(hŒvma_flags_is_cow_mapping”h]”hŒvma_flags_is_cow_mapping”…”�”}”(hjÛ‘h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjבubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj·‘h²hh³jÈ‘h´Mãubj )�”}”(hŒ(const vma_flags_t *flags)”h]”j )�”}”(hŒconst vma_flags_t *flags”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj÷‘h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjó‘ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjó‘ubh)�”}”(hhh]”j)�”}”(hŒ vma_flags_t”h]”hŒ vma_flags_t”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj’ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j’Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÝ‘sbŒc.vma_flags_is_cow_mapping”†”asbuh1hhjó‘ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5’h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjó‘ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjC’h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjó‘ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjP’h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjó‘ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjï‘ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj·‘h²hh³jÈ‘h´Mãubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj³‘h²hh³jÈ‘h´Mãubah}”(h]”j®‘ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÈ‘h´Mãhj°‘h²hubj4)�”}”(hhh]”jM)�”}”(hŒ'Do these VMA flags imply a CoW mapping?”h]”hŒ'Do these VMA flags imply a CoW mapping?”…”�”}”(hjz’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mãhjw’h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj°‘h²hh³jÈ‘h´Mãubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj’’jHj’’jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX°**Parameters** ``const vma_flags_t *flags`` The VMA flags to check. **Description** Mappings which could be CoW'd (subject to Copy-On-Write faults) are described as CoW mappings. All mappings backed by anonymous folios (all anonymous mappings and most MAP_PRIVATE-file backed ranges) are CoW mappings. All other mappings (including all MAP_SHARED mappings) are non-CoW. The criteria are !VMA_SHARED_BIT, VMA_MAYWRITE_BIT. VMA_MAYWRITE_BIT is checked instead of VMA_WRITE_BIT to account for both future mprotect() calls which can render a read-only mapping writable, and GUP with FOLL_FORCE (e.g. ptrace) which can CoW a read-only mapping. - No anonymous mapping can ever clear VMA_MAYWRITE_BIT. - Writes to anonymous mappings do not immediately result in CoW faults but may do so after the process is forked or if a read is followed by a write. - Writes to MAP_PRIVATE file-backed mappings result in CoW faults and may do so again after fork. - MAP_SHARED mappings of a file opened read-only are transformed into VMA_MAYSHARE_BIT, !VMA_SHARED_BIT, !VMA_MAYWRITE_BIT mappings, so remain non-CoW. - Drivers may clear VMA_MAYWRITE_BIT but do so at mmap() time and cannot mark themselves anonymous. Having cleared this flag it is not valid for them to leave the VMA_WRITE_BIT flag set. As a consequence, the anonymous reverse mapping only tracks CoW mappings. **Return** true if the flags indicate a CoW mapping, otherwise false.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjœ’h]”hŒ Parameters”…”�”}”(hjž’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjš’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mçhj–’ubj¤)�”}”(hhh]”j©)�”}”(hŒ5``const vma_flags_t *flags`` The VMA flags to check. ”h]”(j¯)�”}”(hŒ``const vma_flags_t *flags``”h]”jS)�”}”(hj»’h]”hŒconst vma_flags_t *flags”…”�”}”(hj½’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¹’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mähjµ’ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe VMA flags to check.”h]”hŒThe VMA flags to check.”…”�”}”(hjÔ’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÐ’h´MähjÑ’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjµ’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÐ’h´Mähj²’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj–’ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjö’h]”hŒ Description”…”�”}”(hjø’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjô’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mæhj–’ubjM)�”}”(hŒ^Mappings which could be CoW'd (subject to Copy-On-Write faults) are described as CoW mappings.”h]”hŒ`Mappings which could be CoW’d (subject to Copy-On-Write faults) are described as CoW mappings.”…”�”}”(hj “h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Måhj–’ubjM)�”}”(hŒzAll mappings backed by anonymous folios (all anonymous mappings and most MAP_PRIVATE-file backed ranges) are CoW mappings.”h]”hŒzAll mappings backed by anonymous folios (all anonymous mappings and most MAP_PRIVATE-file backed ranges) are CoW mappings.”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mèhj–’ubjM)�”}”(hŒCAll other mappings (including all MAP_SHARED mappings) are non-CoW.”h]”hŒCAll other mappings (including all MAP_SHARED mappings) are non-CoW.”…”�”}”(hj*“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mëhj–’ubjM)�”}”(hŒ3The criteria are !VMA_SHARED_BIT, VMA_MAYWRITE_BIT.”h]”hŒ3The criteria are !VMA_SHARED_BIT, VMA_MAYWRITE_BIT.”…”�”}”(hj9“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Míhj–’ubjM)�”}”(hŒØVMA_MAYWRITE_BIT is checked instead of VMA_WRITE_BIT to account for both future mprotect() calls which can render a read-only mapping writable, and GUP with FOLL_FORCE (e.g. ptrace) which can CoW a read-only mapping.”h]”hŒØVMA_MAYWRITE_BIT is checked instead of VMA_WRITE_BIT to account for both future mprotect() calls which can render a read-only mapping writable, and GUP with FOLL_FORCE (e.g. ptrace) which can CoW a read-only mapping.”…”�”}”(hjH“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mïhj–’ubjaW)�”}”(hhh]”(jÕ/)�”}”(hŒ6No anonymous mapping can ever clear VMA_MAYWRITE_BIT. ”h]”jM)�”}”(hŒ5No anonymous mapping can ever clear VMA_MAYWRITE_BIT.”h]”hŒ5No anonymous mapping can ever clear VMA_MAYWRITE_BIT.”…”�”}”(hj^“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MóhjZ“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjW“ubjÕ/)�”}”(hŒ”Writes to anonymous mappings do not immediately result in CoW faults but may do so after the process is forked or if a read is followed by a write. ”h]”jM)�”}”(hŒ“Writes to anonymous mappings do not immediately result in CoW faults but may do so after the process is forked or if a read is followed by a write.”h]”hŒ“Writes to anonymous mappings do not immediately result in CoW faults but may do so after the process is forked or if a read is followed by a write.”…”�”}”(hjw“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mõhjs“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjW“ubjÕ/)�”}”(hŒ`Writes to MAP_PRIVATE file-backed mappings result in CoW faults and may do so again after fork. ”h]”jM)�”}”(hŒ_Writes to MAP_PRIVATE file-backed mappings result in CoW faults and may do so again after fork.”h]”hŒ_Writes to MAP_PRIVATE file-backed mappings result in CoW faults and may do so again after fork.”…”�”}”(hj�“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MùhjŒ“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjW“ubjÕ/)�”}”(hŒ–MAP_SHARED mappings of a file opened read-only are transformed into VMA_MAYSHARE_BIT, !VMA_SHARED_BIT, !VMA_MAYWRITE_BIT mappings, so remain non-CoW. ”h]”jM)�”}”(hŒ•MAP_SHARED mappings of a file opened read-only are transformed into VMA_MAYSHARE_BIT, !VMA_SHARED_BIT, !VMA_MAYWRITE_BIT mappings, so remain non-CoW.”h]”hŒ•MAP_SHARED mappings of a file opened read-only are transformed into VMA_MAYSHARE_BIT, !VMA_SHARED_BIT, !VMA_MAYWRITE_BIT mappings, so remain non-CoW.”…”�”}”(hj©“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mühj¥“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjW“ubjÕ/)�”}”(hŒ¹Drivers may clear VMA_MAYWRITE_BIT but do so at mmap() time and cannot mark themselves anonymous. Having cleared this flag it is not valid for them to leave the VMA_WRITE_BIT flag set. ”h]”jM)�”}”(hŒ¸Drivers may clear VMA_MAYWRITE_BIT but do so at mmap() time and cannot mark themselves anonymous. Having cleared this flag it is not valid for them to leave the VMA_WRITE_BIT flag set.”h]”hŒ¸Drivers may clear VMA_MAYWRITE_BIT but do so at mmap() time and cannot mark themselves anonymous. Having cleared this flag it is not valid for them to leave the VMA_WRITE_BIT flag set.”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M hj¾“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjW“ubeh}”(h]”h ]”h"]”h$]”h&]”jƒWj„Wuh1j`Wh³jl“h´Móhj–’ubjM)�”}”(hŒIAs a consequence, the anonymous reverse mapping only tracks CoW mappings.”h]”hŒIAs a consequence, the anonymous reverse mapping only tracks CoW mappings.”…”�”}”(hjÝ“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M hj–’ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M hj–’ubjM)�”}”(hŒ:true if the flags indicate a CoW mapping, otherwise false.”h]”hŒ:true if the flags indicate a CoW mapping, otherwise false.”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒvma_is_cow_mapping (C function)”Œc.vma_is_cow_mapping”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ:bool vma_is_cow_mapping (const struct vm_area_struct *vma)”h]”hù)�”}”(hŒ9bool vma_is_cow_mapping(const struct vm_area_struct *vma)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hj3”h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj/”h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA”h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj/”h²hh³j@”h´M ubhÿ)�”}”(hŒvma_is_cow_mapping”h]”j)�”}”(hŒvma_is_cow_mapping”h]”hŒvma_is_cow_mapping”…”�”}”(hjS”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjO”ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj/”h²hh³j@”h´M ubj )�”}”(hŒ"(const struct vm_area_struct *vma)”h]”j )�”}”(hŒ const struct vm_area_struct *vma”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjo”h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjk”ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|”h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjk”ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjŠ”h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjk”ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—”h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjk”ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj¨”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¥”ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jª”Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljU”sbŒc.vma_is_cow_mapping”†”asbuh1hhjk”ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈ”h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjk”ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÖ”h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjk”ubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjã”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjk”ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjg”ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj/”h²hh³j@”h´M ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj+”h²hh³j@”h´M ubah}”(h]”j&”ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j@”h´M hj(”h²hubj4)�”}”(hhh]”jM)�”}”(hŒIs this VMA a CoW mapping?”h]”hŒIs this VMA a CoW mapping?”…”�”}”(hj •h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M hj •h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj(”h²hh³j@”h´M ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj%•jHj%•jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒÆ**Parameters** ``const struct vm_area_struct *vma`` The VMA to check. **Description** See vma_flags_is_cow_mapping() for details. **Return** true if the VMA is a CoW mapping, otherwise false.”h]”(jM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M hj)•ubj¤)�”}”(hhh]”j©)�”}”(hŒ7``const struct vm_area_struct *vma`` The VMA to check. ”h]”(j¯)�”}”(hŒ$``const struct vm_area_struct *vma``”h]”jS)�”}”(hjN•h]”hŒ const struct vm_area_struct *vma”…”�”}”(hjP•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjL•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M hjH•ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe VMA to check.”h]”hŒThe VMA to check.”…”�”}”(hjg•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jc•h´M hjd•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjH•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jc•h´M hjE•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj)•ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj‰•h]”hŒ Description”…”�”}”(hj‹•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‡•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M hj)•ubjM)�”}”(hŒ+See vma_flags_is_cow_mapping() for details.”h]”hŒ+See vma_flags_is_cow_mapping() for details.”…”�”}”(hjŸ•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M hj)•ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M hj)•ubjM)�”}”(hŒ2true if the VMA is a CoW mapping, otherwise false.”h]”hŒ2true if the VMA is a CoW mapping, otherwise false.”…”�”}”(hjÆ•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒ$vma_desc_is_cow_mapping (C function)”Œc.vma_desc_is_cow_mapping”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ8bool vma_desc_is_cow_mapping (struct vm_area_desc *desc)”h]”hù)�”}”(hŒ7bool vma_desc_is_cow_mapping(struct vm_area_desc *desc)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjõ•h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjñ•h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjñ•h²hh³j–h´M ubhÿ)�”}”(hŒvma_desc_is_cow_mapping”h]”j)�”}”(hŒvma_desc_is_cow_mapping”h]”hŒvma_desc_is_cow_mapping”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj–ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjñ•h²hh³j–h´M ubj )�”}”(hŒ(struct vm_area_desc *desc)”h]”j )�”}”(hŒstruct vm_area_desc *desc”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj1–h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj-–ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>–h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj-–ubh)�”}”(hhh]”j)�”}”(hŒ vm_area_desc”h]”hŒ vm_area_desc”…”�”}”(hjO–h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjL–ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jQ–Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj–sbŒc.vma_desc_is_cow_mapping”†”asbuh1hhj-–ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjo–h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj-–ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj}–h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj-–ubj)�”}”(hŒdesc”h]”hŒdesc”…”�”}”(hjŠ–h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj-–ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj)–ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjñ•h²hh³j–h´M ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjí•h²hh³j–h´M ubah}”(h]”jè•ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j–h´M hjê•h²hubj4)�”}”(hhh]”jM)�”}”(hŒ%Is this VMA descriptor a CoW mapping?”h]”hŒ%Is this VMA descriptor a CoW mapping?”…”�”}”(hj´–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M hj±–h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjê•h²hh³j–h´M ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÌ–jHjÌ–jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒÜ**Parameters** ``struct vm_area_desc *desc`` The VMA descriptor to check. **Description** See vma_flags_is_cow_mapping() for details. **Return** true if the VMA descriptor describes a CoW mapping, otherwise false.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÖ–h]”hŒ Parameters”…”�”}”(hjØ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÔ–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M! hjЖubj¤)�”}”(hhh]”j©)�”}”(hŒ;``struct vm_area_desc *desc`` The VMA descriptor to check. ”h]”(j¯)�”}”(hŒ``struct vm_area_desc *desc``”h]”jS)�”}”(hjõ–h]”hŒstruct vm_area_desc *desc”…”�”}”(hj÷–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjó–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M hjï–ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe VMA descriptor to check.”h]”hŒThe VMA descriptor to check.”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j —h´M hj —ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjï–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j —h´M hjì–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjЖubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M hjЖubjM)�”}”(hŒ+See vma_flags_is_cow_mapping() for details.”h]”hŒ+See vma_flags_is_cow_mapping() for details.”…”�”}”(hjF—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M hjЖubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjW—h]”hŒReturn”…”�”}”(hjY—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjU—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M! hjЖubjM)�”}”(hŒDtrue if the VMA descriptor describes a CoW mapping, otherwise false.”h]”hŒDtrue if the VMA descriptor describes a CoW mapping, otherwise false.”…”�”}”(hjm—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒfolio_pfn (C function)”Œ c.folio_pfn”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ3unsigned long folio_pfn (const struct folio *folio)”h]”hù)�”}”(hŒ2unsigned long folio_pfn(const struct folio *folio)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjœ—h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj˜—h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Md ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«—h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj˜—h²hh³jª—h´Md ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj¹—h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj˜—h²hh³jª—h´Md ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇ—h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj˜—h²hh³jª—h´Md ubhÿ)�”}”(hŒ folio_pfn”h]”j)�”}”(hŒ folio_pfn”h]”hŒ folio_pfn”…”�”}”(hjÙ—h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕ—ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj˜—h²hh³jª—h´Md ubj )�”}”(hŒ(const struct folio *folio)”h]”j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjõ—h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjñ—ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjñ—ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjñ—ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjñ—ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj.˜h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj+˜ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j0˜Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÛ—sbŒ c.folio_pfn”†”asbuh1hhjñ—ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjN˜h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjñ—ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj\˜h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjñ—ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hji˜h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñ—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjí—ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj˜—h²hh³jª—h´Md ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj”—h²hh³jª—h´Md ubah}”(h]”j�—ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jª—h´Md hj‘—h²hubj4)�”}”(hhh]”jM)�”}”(hŒ(Return the Page Frame Number of a folio.”h]”hŒ(Return the Page Frame Number of a folio.”…”�”}”(hj“˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Md hj�˜h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj‘—h²hh³jª—h´Md ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj«˜jHj«˜jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒã**Parameters** ``const struct folio *folio`` The folio. **Description** A folio may contain multiple pages. The pages have consecutive Page Frame Numbers. **Return** The Page Frame Number of the first page in the folio.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjµ˜h]”hŒ Parameters”…”�”}”(hj·˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj³˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mh hj¯˜ubj¤)�”}”(hhh]”j©)�”}”(hŒ)``const struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjÔ˜h]”hŒconst struct folio *folio”…”�”}”(hjÖ˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÒ˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Me hjΘubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hjí˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jé˜h´Me hjê˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjΘubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jé˜h´Me hj˘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¯˜ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj™h]”hŒ Description”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mg hj¯˜ubjM)�”}”(hŒSA folio may contain multiple pages. The pages have consecutive Page Frame Numbers.”h]”hŒSA folio may contain multiple pages. The pages have consecutive Page Frame Numbers.”…”�”}”(hj%™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mf hj¯˜ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj6™h]”hŒReturn”…”�”}”(hj8™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj4™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mi hj¯˜ubjM)�”}”(hŒ5The Page Frame Number of the first page in the folio.”h]”hŒ5The Page Frame Number of the first page in the folio.”…”�”}”(hjL™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mj hj¯˜ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_mk_pte (C function)”Œc.folio_mk_pte”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ?pte_t folio_mk_pte (const struct folio *folio, pgprot_t pgprot)”h]”hù)�”}”(hŒ>pte_t folio_mk_pte(const struct folio *folio, pgprot_t pgprot)”h]”(h)�”}”(hhh]”j)�”}”(hŒpte_t”h]”hŒpte_t”…”�”}”(hj~™h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj{™ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j€™Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒ folio_mk_pte”sbŒc.folio_mk_pte”†”asbuh1hhjw™h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M} ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ™h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjw™h²hh³jŸ™h´M} ubhÿ)�”}”(hŒ folio_mk_pte”h]”j)�”}”(hjœ™h]”hŒ folio_mk_pte”…”�”}”(hj²™h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj®™ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjw™h²hh³jŸ™h´M} ubj )�”}”(hŒ,(const struct folio *folio, pgprot_t pgprot)”h]”(j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjÍ™h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÉ™ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚ™h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÉ™ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjè™h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÉ™ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõ™h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÉ™ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjšubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jšŒmodname”NŒ classname”Njpjs)�”}”jv]”jš™Œc.folio_mk_pte”†”asbuh1hhjÉ™ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$šh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÉ™ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj2šh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÉ™ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj?šh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÉ™ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÅ™ubj )�”}”(hŒpgprot_t pgprot”h]”(h)�”}”(hhh]”j)�”}”(hŒpgprot_t”h]”hŒpgprot_t”…”�”}”(hj[šh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjXšubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j]šŒmodname”NŒ classname”Njpjs)�”}”jv]”jš™Œc.folio_mk_pte”†”asbuh1hhjTšubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyšh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjTšubj)�”}”(hŒpgprot”h]”hŒpgprot”…”�”}”(hj‡šh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjTšubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÅ™ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjw™h²hh³jŸ™h´M} ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjs™h²hh³jŸ™h´M} ubah}”(h]”jn™ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jŸ™h´M} hjp™h²hubj4)�”}”(hhh]”jM)�”}”(hŒCreate a PTE for this folio”h]”hŒCreate a PTE for this folio”…”�”}”(hj±šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M} hj®šh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjp™h²hh³jŸ™h´M} ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÉšjHjÉšjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX?**Parameters** ``const struct folio *folio`` The folio to create a PTE for ``pgprot_t pgprot`` The page protection bits to use **Description** Create a page table entry for the first page of this folio. This is suitable for passing to set_ptes(). **Return** A page table entry suitable for mapping this folio.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÓšh]”hŒ Parameters”…”�”}”(hjÕšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÑšubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M� hjÍšubj¤)�”}”(hhh]”(j©)�”}”(hŒ<``const struct folio *folio`` The folio to create a PTE for ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjòšh]”hŒconst struct folio *folio”…”�”}”(hjôšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjðšubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M~ hjìšubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to create a PTE for”h]”hŒThe folio to create a PTE for”…”�”}”(hj ›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j›h´M~ hj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjìšubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j›h´M~ hjéšubj©)�”}”(hŒ4``pgprot_t pgprot`` The page protection bits to use ”h]”(j¯)�”}”(hŒ``pgprot_t pgprot``”h]”jS)�”}”(hj+›h]”hŒpgprot_t pgprot”…”�”}”(hj-›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj)›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M hj%›ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page protection bits to use”h]”hŒThe page protection bits to use”…”�”}”(hjD›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j@›h´M hjA›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj%›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j@›h´M hjéšubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÍšubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M� hjÍšubjM)�”}”(hŒgCreate a page table entry for the first page of this folio. This is suitable for passing to set_ptes().”h]”hŒgCreate a page table entry for the first page of this folio. This is suitable for passing to set_ptes().”…”�”}”(hj|›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M€ hjÍšubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mƒ hjÍšubjM)�”}”(hŒ3A page table entry suitable for mapping this folio.”h]”hŒ3A page table entry suitable for mapping this folio.”…”�”}”(hj£›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒfolio_mk_pmd (C function)”Œc.folio_mk_pmd”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ?pmd_t folio_mk_pmd (const struct folio *folio, pgprot_t pgprot)”h]”hù)�”}”(hŒ>pmd_t folio_mk_pmd(const struct folio *folio, pgprot_t pgprot)”h]”(h)�”}”(hhh]”j)�”}”(hŒpmd_t”h]”hŒpmd_t”…”�”}”(hjÕ›h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÒ›ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j×›Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒ folio_mk_pmd”sbŒc.folio_mk_pmd”†”asbuh1hhjΛh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M� ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷›h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjΛh²hh³jö›h´M� ubhÿ)�”}”(hŒ folio_mk_pmd”h]”j)�”}”(hjó›h]”hŒ folio_mk_pmd”…”�”}”(hj œh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjœubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjΛh²hh³jö›h´M� ubj )�”}”(hŒ,(const struct folio *folio, pgprot_t pgprot)”h]”(j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj$œh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj œubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1œh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj œubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj?œh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj œubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLœh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj œubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj]œh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjZœubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j_œŒmodname”NŒ classname”Njpjs)�”}”jv]”jñ›Œc.folio_mk_pmd”†”asbuh1hhj œubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{œh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj œubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj‰œh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj œubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj–œh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj œubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjœubj )�”}”(hŒpgprot_t pgprot”h]”(h)�”}”(hhh]”j)�”}”(hŒpgprot_t”h]”hŒpgprot_t”…”�”}”(hj²œh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¯œubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j´œŒmodname”NŒ classname”Njpjs)�”}”jv]”jñ›Œc.folio_mk_pmd”†”asbuh1hhj«œubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjМh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj«œubj)�”}”(hŒpgprot”h]”hŒpgprot”…”�”}”(hjÞœh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj«œubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjœubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjΛh²hh³jö›h´M� ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÊ›h²hh³jö›h´M� ubah}”(h]”jÅ›ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jö›h´M� hjÇ›h²hubj4)�”}”(hhh]”jM)�”}”(hŒCreate a PMD for this folio”h]”hŒCreate a PMD for this folio”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M� hj�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÇ›h²hh³jö›h´M� ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj �jHj �jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXA**Parameters** ``const struct folio *folio`` The folio to create a PMD for ``pgprot_t pgprot`` The page protection bits to use **Description** Create a page table entry for the first page of this folio. This is suitable for passing to set_pmd_at(). **Return** A page table entry suitable for mapping this folio.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj*�h]”hŒ Parameters”…”�”}”(hj,�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj(�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M‘ hj$�ubj¤)�”}”(hhh]”(j©)�”}”(hŒ<``const struct folio *folio`` The folio to create a PMD for ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjI�h]”hŒconst struct folio *folio”…”�”}”(hjK�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjG�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MŽ hjC�ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to create a PMD for”h]”hŒThe folio to create a PMD for”…”�”}”(hjb�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j^�h´MŽ hj_�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjC�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j^�h´MŽ hj@�ubj©)�”}”(hŒ4``pgprot_t pgprot`` The page protection bits to use ”h]”(j¯)�”}”(hŒ``pgprot_t pgprot``”h]”jS)�”}”(hj‚�h]”hŒpgprot_t pgprot”…”�”}”(hj„�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj€�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M� hj|�ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page protection bits to use”h]”hŒThe page protection bits to use”…”�”}”(hj›�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j—�h´M� hj˜�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj|�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j—�h´M� hj@�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj$�ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj½�h]”hŒ Description”…”�”}”(hj¿�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj»�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M‘ hj$�ubjM)�”}”(hŒiCreate a page table entry for the first page of this folio. This is suitable for passing to set_pmd_at().”h]”hŒiCreate a page table entry for the first page of this folio. This is suitable for passing to set_pmd_at().”…”�”}”(hjÓ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M� hj$�ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M“ hj$�ubjM)�”}”(hŒ3A page table entry suitable for mapping this folio.”h]”hŒ3A page table entry suitable for mapping this folio.”…”�”}”(hjú�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒfolio_mk_pud (C function)”Œc.folio_mk_pud”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ?pud_t folio_mk_pud (const struct folio *folio, pgprot_t pgprot)”h]”hù)�”}”(hŒ>pud_t folio_mk_pud(const struct folio *folio, pgprot_t pgprot)”h]”(h)�”}”(hhh]”j)�”}”(hŒpud_t”h]”hŒpud_t”…”�”}”(hj,žh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj)žubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j.žŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒ folio_mk_pud”sbŒc.folio_mk_pud”†”asbuh1hhj%žh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M� ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNžh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj%žh²hh³jMžh´M� ubhÿ)�”}”(hŒ folio_mk_pud”h]”j)�”}”(hjJžh]”hŒ folio_mk_pud”…”�”}”(hj`žh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj\žubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj%žh²hh³jMžh´M� ubj )�”}”(hŒ,(const struct folio *folio, pgprot_t pgprot)”h]”(j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj{žh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjwžubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆžh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjwžubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj–žh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjwžubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£žh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjwžubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj´žh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj±žubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¶ž•%Œmodname”NŒ classname”Njpjs)�”}”jv]”jHžŒc.folio_mk_pud”†”asbuh1hhjwžubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒžh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjwžubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjàžh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjwžubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjížh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjwžubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjsžubj )�”}”(hŒpgprot_t pgprot”h]”(h)�”}”(hhh]”j)�”}”(hŒpgprot_t”h]”hŒpgprot_t”…”�”}”(hj Ÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŸubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j ŸŒmodname”NŒ classname”Njpjs)�”}”jv]”jHžŒc.folio_mk_pud”†”asbuh1hhjŸubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'Ÿh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŸubj)�”}”(hŒpgprot”h]”hŒpgprot”…”�”}”(hj5Ÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŸubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjsžubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj%žh²hh³jMžh´M� ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj!žh²hh³jMžh´M� ubah}”(h]”jžah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jMžh´M� hjžh²hubj4)�”}”(hhh]”jM)�”}”(hŒCreate a PUD for this folio”h]”hŒCreate a PUD for this folio”…”�”}”(hj_Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M� hj\Ÿh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjžh²hh³jMžh´M� ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjwŸjHjwŸjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXA**Parameters** ``const struct folio *folio`` The folio to create a PUD for ``pgprot_t pgprot`` The page protection bits to use **Description** Create a page table entry for the first page of this folio. This is suitable for passing to set_pud_at(). **Return** A page table entry suitable for mapping this folio.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj�Ÿh]”hŒ Parameters”…”�”}”(hjƒŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M¡ hj{Ÿubj¤)�”}”(hhh]”(j©)�”}”(hŒ<``const struct folio *folio`` The folio to create a PUD for ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hj Ÿh]”hŒconst struct folio *folio”…”�”}”(hj¢Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjžŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mž hjšŸubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to create a PUD for”h]”hŒThe folio to create a PUD for”…”�”}”(hj¹Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jµŸh´Mž hj¶Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjšŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jµŸh´Mž hj—Ÿubj©)�”}”(hŒ4``pgprot_t pgprot`` The page protection bits to use ”h]”(j¯)�”}”(hŒ``pgprot_t pgprot``”h]”jS)�”}”(hjÙŸh]”hŒpgprot_t pgprot”…”�”}”(hjÛŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjןubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MŸ hjÓŸubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page protection bits to use”h]”hŒThe page protection bits to use”…”�”}”(hjòŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jîŸh´MŸ hjïŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÓŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jîŸh´MŸ hj—Ÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj{ŸubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj h]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M¡ hj{ŸubjM)�”}”(hŒiCreate a page table entry for the first page of this folio. This is suitable for passing to set_pud_at().”h]”hŒiCreate a page table entry for the first page of this folio. This is suitable for passing to set_pud_at().”…”�”}”(hj* h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M  hj{ŸubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj; h]”hŒReturn”…”�”}”(hj= h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj9 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M£ hj{ŸubjM)�”}”(hŒ3A page table entry suitable for mapping this folio.”h]”hŒ3A page table entry suitable for mapping this folio.”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒ#folio_maybe_dma_pinned (C function)”Œc.folio_maybe_dma_pinned”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ1bool folio_maybe_dma_pinned (struct folio *folio)”h]”hù)�”}”(hŒ0bool folio_maybe_dma_pinned(struct folio *folio)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hj€ h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj| h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M¶ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽ h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj| h²hh³j� h´M¶ ubhÿ)�”}”(hŒfolio_maybe_dma_pinned”h]”j)�”}”(hŒfolio_maybe_dma_pinned”h]”hŒfolio_maybe_dma_pinned”…”�”}”(hj  h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjœ ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj| h²hh³j� h´M¶ ubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¼ h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¸ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉ h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¸ ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÚ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj× ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÜ Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj¢ sbŒc.folio_maybe_dma_pinned”†”asbuh1hhj¸ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¸ ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¸ ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¸ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj´ ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj| h²hh³j� h´M¶ ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjx h²hh³j� h´M¶ ubah}”(h]”js ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j� h´M¶ hju h²hubj4)�”}”(hhh]”jM)�”}”(hŒ(Report if a folio may be pinned for DMA.”h]”hŒ(Report if a folio may be pinned for DMA.”…”�”}”(hj?¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M¶ hj<¡h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hju h²hh³j� h´M¶ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjW¡jHjW¡jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX **Parameters** ``struct folio *folio`` The folio. **Description** This function checks if a folio has been pinned via a call to a function in the pin_user_pages() family. For small folios, the return value is partially fuzzy: false is not fuzzy, because it means "definitely not pinned for DMA", but true means "probably pinned for DMA, but possibly a false positive due to having at least GUP_PIN_COUNTING_BIAS worth of normal folio references". False positives are OK, because: a) it's unlikely for a folio to get that many refcounts, and b) all the callers of this routine are expected to be able to deal gracefully with a false positive. For most large folios, the result will be exactly correct. That's because we have more tracking data available: the _pincount field is used instead of the GUP_PIN_COUNTING_BIAS scheme. For more information, please see Documentation/core-api/pin_user_pages.rst. **Return** True, if it is likely that the folio has been "dma-pinned". False, if the folio is definitely not dma-pinned.”h]”(jM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mº hj[¡ubj¤)�”}”(hhh]”j©)�”}”(hŒ#``struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj€¡h]”hŒstruct folio *folio”…”�”}”(hj‚¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj~¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M· hjz¡ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hj™¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j•¡h´M· hj–¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjz¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j•¡h´M· hjw¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj[¡ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj»¡h]”hŒ Description”…”�”}”(hj½¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¹¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M¹ hj[¡ubjM)�”}”(hŒhThis function checks if a folio has been pinned via a call to a function in the pin_user_pages() family.”h]”hŒhThis function checks if a folio has been pinned via a call to a function in the pin_user_pages() family.”…”�”}”(hjÑ¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M¸ hj[¡ubjM)�”}”(hXFor small folios, the return value is partially fuzzy: false is not fuzzy, because it means "definitely not pinned for DMA", but true means "probably pinned for DMA, but possibly a false positive due to having at least GUP_PIN_COUNTING_BIAS worth of normal folio references".”h]”hXFor small folios, the return value is partially fuzzy: false is not fuzzy, because it means “definitely not pinned for DMAâ€�, but true means “probably pinned for DMA, but possibly a false positive due to having at least GUP_PIN_COUNTING_BIAS worth of normal folio referencesâ€�.”…”�”}”(hjà¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M» hj[¡ubjM)�”}”(hŒÂFalse positives are OK, because: a) it's unlikely for a folio to get that many refcounts, and b) all the callers of this routine are expected to be able to deal gracefully with a false positive.”h]”hŒÄFalse positives are OK, because: a) it’s unlikely for a folio to get that many refcounts, and b) all the callers of this routine are expected to be able to deal gracefully with a false positive.”…”�”}”(hjï¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÀ hj[¡ubjM)�”}”(hŒ¸For most large folios, the result will be exactly correct. That's because we have more tracking data available: the _pincount field is used instead of the GUP_PIN_COUNTING_BIAS scheme.”h]”hŒºFor most large folios, the result will be exactly correct. That’s because we have more tracking data available: the _pincount field is used instead of the GUP_PIN_COUNTING_BIAS scheme.”…”�”}”(hjþ¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÄ hj[¡ubjM)�”}”(hŒKFor more information, please see Documentation/core-api/pin_user_pages.rst.”h]”hŒKFor more information, please see Documentation/core-api/pin_user_pages.rst.”…”�”}”(hj ¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÈ hj[¡ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÊ hj[¡ubjM)�”}”(hŒmTrue, if it is likely that the folio has been "dma-pinned". False, if the folio is definitely not dma-pinned.”h]”hŒqTrue, if it is likely that the folio has been “dma-pinnedâ€�. False, if the folio is definitely not dma-pinned.”…”�”}”(hj4¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒis_zero_page (C function)”Œc.is_zero_page”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ+bool is_zero_page (const struct page *page)”h]”hù)�”}”(hŒ*bool is_zero_page(const struct page *page)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjc¢h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj_¢h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mñ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjq¢h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj_¢h²hh³jp¢h´Mñ ubhÿ)�”}”(hŒ is_zero_page”h]”j)�”}”(hŒ is_zero_page”h]”hŒ is_zero_page”…”�”}”(hjƒ¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¢ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj_¢h²hh³jp¢h´Mñ ubj )�”}”(hŒ(const struct page *page)”h]”j )�”}”(hŒconst struct page *page”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjŸ¢h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj›¢ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬¢h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj›¢ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjº¢h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj›¢ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇ¢h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj›¢ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjØ¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕ¢ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÚ¢Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj…¢sbŒc.is_zero_page”†”asbuh1hhj›¢ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjø¢h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj›¢ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj›¢ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj›¢ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj—¢ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj_¢h²hh³jp¢h´Mñ ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj[¢h²hh³jp¢h´Mñ ubah}”(h]”jV¢ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jp¢h´Mñ hjX¢h²hubj4)�”}”(hhh]”jM)�”}”(hŒQuery if a page is a zero page”h]”hŒQuery if a page is a zero page”…”�”}”(hj=£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mñ hj:£h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjX¢h²hh³jp¢h´Mñ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjU£jHjU£jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ“**Parameters** ``const struct page *page`` The page to query **Description** This returns true if **page** is one of the permanent zero pages.”h]”(jM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mõ hjY£ubj¤)�”}”(hhh]”j©)�”}”(hŒ.``const struct page *page`` The page to query ”h]”(j¯)�”}”(hŒ``const struct page *page``”h]”jS)�”}”(hj~£h]”hŒconst struct page *page”…”�”}”(hj€£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj|£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mò hjx£ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page to query”h]”hŒThe page to query”…”�”}”(hj—£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j“£h´Mò hj”£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjx£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j“£h´Mò hju£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjY£ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj¹£h]”hŒ Description”…”�”}”(hj»£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj·£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mô hjY£ubjM)�”}”(hŒAThis returns true if **page** is one of the permanent zero pages.”h]”(hŒThis returns true if ”…”�”}”(hjÏ£h²hh³Nh´NubjŽ)�”}”(hŒ**page**”h]”hŒpage”…”�”}”(hj×£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÏ£ubhŒ$ is one of the permanent zero pages.”…”�”}”(hjÏ£h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mó hjY£ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒis_zero_folio (C function)”Œc.is_zero_folio”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ.bool is_zero_folio (const struct folio *folio)”h]”hù)�”}”(hŒ-bool is_zero_folio(const struct folio *folio)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj ¤h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mü ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj ¤h²hh³j¤h´Mü ubhÿ)�”}”(hŒ is_zero_folio”h]”j)�”}”(hŒ is_zero_folio”h]”hŒ is_zero_folio”…”�”}”(hj0¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj,¤ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj ¤h²hh³j¤h´Mü ubj )�”}”(hŒ(const struct folio *folio)”h]”j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjL¤h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjH¤ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY¤h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjH¤ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjg¤h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjH¤ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjt¤h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjH¤ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj…¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‚¤ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j‡¤Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj2¤sbŒc.is_zero_folio”†”asbuh1hhjH¤ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥¤h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjH¤ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj³¤h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjH¤ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÀ¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjH¤ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjD¤ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj ¤h²hh³j¤h´Mü ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¤h²hh³j¤h´Mü ubah}”(h]”j¤ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¤h´Mü hj¤h²hubj4)�”}”(hhh]”jM)�”}”(hŒQuery if a folio is a zero page”h]”hŒQuery if a folio is a zero page”…”�”}”(hjê¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mü hjç¤h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¤h²hh³j¤h´Mü ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¥jHj¥jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ—**Parameters** ``const struct folio *folio`` The folio to query **Description** This returns true if **folio** is one of the permanent zero pages.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj ¥h]”hŒ Parameters”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M hj¥ubj¤)�”}”(hhh]”j©)�”}”(hŒ1``const struct folio *folio`` The folio to query ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hj+¥h]”hŒconst struct folio *folio”…”�”}”(hj-¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj)¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mý hj%¥ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to query”h]”hŒThe folio to query”…”�”}”(hjD¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j@¥h´Mý hjA¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj%¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j@¥h´Mý hj"¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¥ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mÿ hj¥ubjM)�”}”(hŒBThis returns true if **folio** is one of the permanent zero pages.”h]”(hŒThis returns true if ”…”�”}”(hj|¥h²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj„¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj|¥ubhŒ$ is one of the permanent zero pages.”…”�”}”(hj|¥h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒfolio_nr_pages (C function)”Œc.folio_nr_pages”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ8unsigned long folio_nr_pages (const struct folio *folio)”h]”hù)�”}”(hŒ7unsigned long folio_nr_pages(const struct folio *folio)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj½¥h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¹¥h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MA ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌ¥h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¹¥h²hh³jË¥h´MA ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÚ¥h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¹¥h²hh³jË¥h´MA ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjè¥h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¹¥h²hh³jË¥h´MA ubhÿ)�”}”(hŒfolio_nr_pages”h]”j)�”}”(hŒfolio_nr_pages”h]”hŒfolio_nr_pages”…”�”}”(hjú¥h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjö¥ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¹¥h²hh³jË¥h´MA ubj )�”}”(hŒ(const struct folio *folio)”h]”j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¦ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#¦h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¦ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj1¦h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¦ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>¦h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¦ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjO¦h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjL¦ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jQ¦Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljü¥sbŒc.folio_nr_pages”†”asbuh1hhj¦ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjo¦h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¦ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj}¦h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¦ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjЦh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¦ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¹¥h²hh³jË¥h´MA ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjµ¥h²hh³jË¥h´MA ubah}”(h]”j°¥ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jË¥h´MA hj²¥h²hubj4)�”}”(hhh]”jM)�”}”(hŒ!The number of pages in the folio.”h]”hŒ!The number of pages in the folio.”…”�”}”(hj´¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MA hj±¦h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj²¥h²hh³jË¥h´MA ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj̦jHj̦jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ`**Parameters** ``const struct folio *folio`` The folio. **Return** A positive power of two.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÖ¦h]”hŒ Parameters”…”�”}”(hjئh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÔ¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´ME hjЦubj¤)�”}”(hhh]”j©)�”}”(hŒ)``const struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjõ¦h]”hŒconst struct folio *folio”…”�”}”(hj÷¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjó¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MB hjï¦ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j §h´MB hj §ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjï¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j §h´MB hjì¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjЦubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MD hjЦubjM)�”}”(hŒA positive power of two.”h]”hŒA positive power of two.”…”�”}”(hjF§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MD hjЦubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_next (C function)”Œ c.folio_next”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ/struct folio * folio_next (struct folio *folio)”h]”hù)�”}”(hŒ-struct folio *folio_next(struct folio *folio)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hju§h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjq§h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M\ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒ§h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjq§h²hh³j‚§h´M\ ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj”§h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‘§ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j–§Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒ folio_next”sbŒ c.folio_next”†”asbuh1hhjq§h²hh³j‚§h´M\ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµ§h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjq§h²hh³j‚§h´M\ ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjq§h²hh³j‚§h´M\ ubhÿ)�”}”(hŒ folio_next”h]”j)�”}”(hj²§h]”hŒ folio_next”…”�”}”(hjÔ§h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjЧubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjq§h²hh³j‚§h´M\ ubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjï§h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjë§ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjü§h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjë§ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj ¨h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ¨ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¨Œmodname”NŒ classname”Njpjs)�”}”jv]”j°§Œ c.folio_next”†”asbuh1hhjë§ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+¨h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjë§ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj9¨h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjë§ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjF¨h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjë§ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjç§ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjq§h²hh³j‚§h´M\ ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjm§h²hh³j‚§h´M\ ubah}”(h]”jh§ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j‚§h´M\ hjj§h²hubj4)�”}”(hhh]”jM)�”}”(hŒ Move to the next physical folio.”h]”hŒ Move to the next physical folio.”…”�”}”(hjp¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M\ hjm¨h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjj§h²hh³j‚§h´M\ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjˆ¨jHjˆ¨jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXa**Parameters** ``struct folio *folio`` The folio we're currently operating on. **Description** If you have physically contiguous memory which may span more than one folio (eg a :c:type:`struct bio_vec `), use this function to move from one folio to the next. Do not use it if the memory is only virtually contiguous as the folios are almost certainly not adjacent to each other. This is the folio equivalent to writing ``page++``. **Context** We assume that the folios are refcounted and/or locked at a higher level and do not adjust the reference counts. **Return** The next struct folio.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj’¨h]”hŒ Parameters”…”�”}”(hj”¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M` hjŒ¨ubj¤)�”}”(hhh]”j©)�”}”(hŒ@``struct folio *folio`` The folio we're currently operating on. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj±¨h]”hŒstruct folio *folio”…”�”}”(hj³¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¯¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M] hj«¨ubjÉ)�”}”(hhh]”jM)�”}”(hŒ'The folio we're currently operating on.”h]”hŒ)The folio we’re currently operating on.”…”�”}”(hjʨh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jƨh´M] hjǨubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj«¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jƨh´M] hj¨¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjŒ¨ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjì¨h]”hŒ Description”…”�”}”(hjî¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjê¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M_ hjŒ¨ubjM)�”}”(hXZIf you have physically contiguous memory which may span more than one folio (eg a :c:type:`struct bio_vec `), use this function to move from one folio to the next. Do not use it if the memory is only virtually contiguous as the folios are almost certainly not adjacent to each other. This is the folio equivalent to writing ``page++``.”h]”(hŒRIf you have physically contiguous memory which may span more than one folio (eg a ”…”�”}”(hj©h²hh³Nh´Nubh)�”}”(hŒ":c:type:`struct bio_vec `”h]”jS)�”}”(hj ©h]”hŒstruct bio_vec”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”(jjAŒc-type”eh"]”h$]”h&]”uh1jRhj ©ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j(Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jpj.j1Œbio_vec”uh1hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M^ hj©ubhŒÛ), use this function to move from one folio to the next. Do not use it if the memory is only virtually contiguous as the folios are almost certainly not adjacent to each other. This is the folio equivalent to writing ”…”�”}”(hj©h²hh³Nh´NubjS)�”}”(hŒ ``page++``”h]”hŒpage++”…”�”}”(hj.©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj©ubhŒ.”…”�”}”(hj©h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j)©h´M^ hjŒ¨ubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjH©h]”hŒContext”…”�”}”(hjJ©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjF©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Md hjŒ¨ubjM)�”}”(hŒpWe assume that the folios are refcounted and/or locked at a higher level and do not adjust the reference counts.”h]”hŒpWe assume that the folios are refcounted and/or locked at a higher level and do not adjust the reference counts.”…”�”}”(hj^©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Me hjŒ¨ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjo©h]”hŒReturn”…”�”}”(hjq©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjm©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mh hjŒ¨ubjM)�”}”(hŒThe next struct folio.”h]”hŒThe next struct folio.”…”�”}”(hj…©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mg hjŒ¨ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_shift (C function)”Œ c.folio_shift”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ4unsigned int folio_shift (const struct folio *folio)”h]”hù)�”}”(hŒ3unsigned int folio_shift(const struct folio *folio)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj´©h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj°©h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mo ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj°©h²hh³j©h´Mo ubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjÑ©h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj°©h²hh³j©h´Mo ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß©h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj°©h²hh³j©h´Mo ubhÿ)�”}”(hŒ folio_shift”h]”j)�”}”(hŒ folio_shift”h]”hŒ folio_shift”…”�”}”(hjñ©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjí©ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj°©h²hh³j©h´Mo ubj )�”}”(hŒ(const struct folio *folio)”h]”j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj ªh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj ªubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj ªubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj(ªh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj ªubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5ªh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj ªubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjFªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjCªubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jHªŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljó©sbŒ c.folio_shift”†”asbuh1hhj ªubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfªh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj ªubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjtªh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj ªubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj�ªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjªubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj°©h²hh³j©h´Mo ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¬©h²hh³j©h´Mo ubah}”(h]”j§©ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j©h´Mo hj©©h²hubj4)�”}”(hhh]”jM)�”}”(hŒ/The size of the memory described by this folio.”h]”hŒ/The size of the memory described by this folio.”…”�”}”(hj«ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mo hj¨ªh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj©©h²hh³j©h´Mo ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjêjHjêjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXÁ**Parameters** ``const struct folio *folio`` The folio. **Description** A folio represents a number of bytes which is a power-of-two in size. This function tells you which power-of-two the folio is. See also folio_size() and folio_order(). **Context** The caller should have a reference on the folio to prevent it from being split. It is not necessary for the folio to be locked. **Return** The base-2 logarithm of the size of this folio.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjͪh]”hŒ Parameters”…”�”}”(hjϪh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj˪ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Ms hjǪubj¤)�”}”(hhh]”j©)�”}”(hŒ)``const struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjìªh]”hŒconst struct folio *folio”…”�”}”(hjîªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjêªubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mp hjæªubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j«h´Mp hj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjæªubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j«h´Mp hjãªubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjǪubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj'«h]”hŒ Description”…”�”}”(hj)«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj%«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mr hjǪubjM)�”}”(hŒ¨A folio represents a number of bytes which is a power-of-two in size. This function tells you which power-of-two the folio is. See also folio_size() and folio_order().”h]”hŒ¨A folio represents a number of bytes which is a power-of-two in size. This function tells you which power-of-two the folio is. See also folio_size() and folio_order().”…”�”}”(hj=«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mq hjǪubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjN«h]”hŒContext”…”�”}”(hjP«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjL«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mu hjǪubjM)�”}”(hŒ€The caller should have a reference on the folio to prevent it from being split. It is not necessary for the folio to be locked.”h]”hŒ€The caller should have a reference on the folio to prevent it from being split. It is not necessary for the folio to be locked.”…”�”}”(hjd«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mv hjǪubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hju«h]”hŒReturn”…”�”}”(hjw«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjs«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´My hjǪubjM)�”}”(hŒ/The base-2 logarithm of the size of this folio.”h]”hŒ/The base-2 logarithm of the size of this folio.”…”�”}”(hj‹«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mx hjǪubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_size (C function)”Œ c.folio_size”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ-size_t folio_size (const struct folio *folio)”h]”hù)�”}”(hŒ,size_t folio_size(const struct folio *folio)”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj½«h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjº«ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¿«Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒ folio_size”sbŒ c.folio_size”†”asbuh1hhj¶«h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M€ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß«h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¶«h²hh³jÞ«h´M€ ubhÿ)�”}”(hŒ folio_size”h]”j)�”}”(hjÛ«h]”hŒ folio_size”…”�”}”(hjñ«h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjí«ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¶«h²hh³jÞ«h´M€ ubj )�”}”(hŒ(const struct folio *folio)”h]”j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj ¬h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¬ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¬ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj'¬h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¬ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4¬h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¬ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjE¬h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjB¬ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jG¬Œmodname”NŒ classname”Njpjs)�”}”jv]”jÙ«Œ c.folio_size”†”asbuh1hhj¬ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc¬h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¬ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjq¬h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¬ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj~¬h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¬ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¬ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¶«h²hh³jÞ«h´M€ ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj²«h²hh³jÞ«h´M€ ubah}”(h]”j­«ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÞ«h´M€ hj¯«h²hubj4)�”}”(hhh]”jM)�”}”(hŒThe number of bytes in a folio.”h]”hŒThe number of bytes in a folio.”…”�”}”(hj¨¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M€ hj¥¬h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¯«h²hh³jÞ«h´M€ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÀ¬jHjÀ¬jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒù**Parameters** ``const struct folio *folio`` The folio. **Context** The caller should have a reference on the folio to prevent it from being split. It is not necessary for the folio to be locked. **Return** The number of bytes in this folio.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjʬh]”hŒ Parameters”…”�”}”(hj̬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjȬubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M„ hjĬubj¤)�”}”(hhh]”j©)�”}”(hŒ)``const struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjé¬h]”hŒconst struct folio *folio”…”�”}”(hjë¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjç¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M� hjã¬ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jþ¬h´M� hjÿ¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjã¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jþ¬h´M� hjà¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjĬubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mƒ hjĬubjM)�”}”(hŒ€The caller should have a reference on the folio to prevent it from being split. It is not necessary for the folio to be locked.”h]”hŒ€The caller should have a reference on the folio to prevent it from being split. It is not necessary for the folio to be locked.”…”�”}”(hj:­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mƒ hjĬubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M† hjĬubjM)�”}”(hŒ"The number of bytes in this folio.”h]”hŒ"The number of bytes in this folio.”…”�”}”(hja­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒ&folio_maybe_mapped_shared (C function)”Œc.folio_maybe_mapped_shared”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ4bool folio_maybe_mapped_shared (struct folio *folio)”h]”hù)�”}”(hŒ3bool folio_maybe_mapped_shared(struct folio *folio)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hj�­h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjŒ­h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M� ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjž­h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŒ­h²hh³j�­h´M� ubhÿ)�”}”(hŒfolio_maybe_mapped_shared”h]”j)�”}”(hŒfolio_maybe_mapped_shared”h]”hŒfolio_maybe_mapped_shared”…”�”}”(hj°­h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¬­ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjŒ­h²hh³j�­h´M� ubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÌ­h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÈ­ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙ­h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÈ­ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjê­h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjç­ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jì­Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj²­sbŒc.folio_maybe_mapped_shared”†”asbuh1hhjÈ­ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ®h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÈ­ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÈ­ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj%®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÈ­ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÄ­ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjŒ­h²hh³j�­h´M� ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjˆ­h²hh³j�­h´M� ubah}”(h]”jƒ­ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j�­h´M� hj…­h²hubj4)�”}”(hhh]”jM)�”}”(hŒDWhether the folio is mapped into the page tables of more than one MM”h]”hŒDWhether the folio is mapped into the page tables of more than one MM”…”�”}”(hjO®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M� hjL®h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj…­h²hh³j�­h´M� ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjg®jHjg®jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXd**Parameters** ``struct folio *folio`` The folio. **Description** This function checks if the folio maybe currently mapped into more than one MM ("maybe mapped shared"), or if the folio is certainly mapped into a single MM ("mapped exclusively"). For KSM folios, this function also returns "mapped shared" when a folio is mapped multiple times into the same MM, because the individual page mappings are independent. For small anonymous folios and anonymous hugetlb folios, the return value will be exactly correct: non-KSM folios can only be mapped at most once into an MM, and they cannot be partially mapped. KSM folios are considered shared even if mapped multiple times into the same MM. For other folios, the result can be fuzzy: #. For partially-mappable large folios (THP), the return value can wrongly indicate "mapped shared" (false positive) if a folio was mapped by more than two MMs at one point in time. #. For pagecache folios (including hugetlb), the return value can wrongly indicate "mapped shared" (false positive) when two VMAs in the same MM cover the same file range. Further, this function only considers current page table mappings that are tracked using the folio mapcount(s). This function does not consider: #. If the folio might get mapped in the (near) future (e.g., swapcache, pagecache, temporary unmapping for migration). #. If the folio is mapped differently (VM_PFNMAP). #. If hugetlb page table sharing applies. Callers might want to check hugetlb_pmd_shared(). **Return** Whether the folio is estimated to be mapped into more than one MM.”h]”(jM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M‘ hjk®ubj¤)�”}”(hhh]”j©)�”}”(hŒ#``struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj�®h]”hŒstruct folio *folio”…”�”}”(hj’®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjŽ®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M� hjŠ®ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hj©®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¥®h´M� hj¦®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjŠ®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¥®h´M� hj‡®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjk®ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjË®h]”hŒ Description”…”�”}”(hjÍ®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÉ®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M‘ hjk®ubjM)�”}”(hŒ´This function checks if the folio maybe currently mapped into more than one MM ("maybe mapped shared"), or if the folio is certainly mapped into a single MM ("mapped exclusively").”h]”hŒ¼This function checks if the folio maybe currently mapped into more than one MM (“maybe mapped sharedâ€�), or if the folio is certainly mapped into a single MM (“mapped exclusivelyâ€�).”…”�”}”(hjá®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M� hjk®ubjM)�”}”(hŒ¨For KSM folios, this function also returns "mapped shared" when a folio is mapped multiple times into the same MM, because the individual page mappings are independent.”h]”hŒ¬For KSM folios, this function also returns “mapped sharedâ€� when a folio is mapped multiple times into the same MM, because the individual page mappings are independent.”…”�”}”(hjð®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M” hjk®ubjM)�”}”(hXFor small anonymous folios and anonymous hugetlb folios, the return value will be exactly correct: non-KSM folios can only be mapped at most once into an MM, and they cannot be partially mapped. KSM folios are considered shared even if mapped multiple times into the same MM.”h]”hXFor small anonymous folios and anonymous hugetlb folios, the return value will be exactly correct: non-KSM folios can only be mapped at most once into an MM, and they cannot be partially mapped. KSM folios are considered shared even if mapped multiple times into the same MM.”…”�”}”(hjÿ®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M˜ hjk®ubj¤)�”}”(hhh]”j©)�”}”(hX™For other folios, the result can be fuzzy: #. For partially-mappable large folios (THP), the return value can wrongly indicate "mapped shared" (false positive) if a folio was mapped by more than two MMs at one point in time. #. For pagecache folios (including hugetlb), the return value can wrongly indicate "mapped shared" (false positive) when two VMAs in the same MM cover the same file range. ”h]”(j¯)�”}”(hŒ*For other folios, the result can be fuzzy:”h]”hŒ*For other folios, the result can be fuzzy:”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M£ hj¯ubjÉ)�”}”(hhh]”jÐ/)�”}”(hhh]”(jÕ/)�”}”(hŒ²For partially-mappable large folios (THP), the return value can wrongly indicate "mapped shared" (false positive) if a folio was mapped by more than two MMs at one point in time.”h]”jM)�”}”(hŒ²For partially-mappable large folios (THP), the return value can wrongly indicate "mapped shared" (false positive) if a folio was mapped by more than two MMs at one point in time.”h]”hŒ¶For partially-mappable large folios (THP), the return value can wrongly indicate “mapped sharedâ€� (false positive) if a folio was mapped by more than two MMs at one point in time.”…”�”}”(hj.¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mž hj*¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hj'¯ubjÕ/)�”}”(hŒ©For pagecache folios (including hugetlb), the return value can wrongly indicate "mapped shared" (false positive) when two VMAs in the same MM cover the same file range. ”h]”jM)�”}”(hŒ¨For pagecache folios (including hugetlb), the return value can wrongly indicate "mapped shared" (false positive) when two VMAs in the same MM cover the same file range.”h]”hŒ¬For pagecache folios (including hugetlb), the return value can wrongly indicate “mapped sharedâ€� (false positive) when two VMAs in the same MM cover the same file range.”…”�”}”(hjG¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M¡ hjC¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hj'¯ubeh}”(h]”h ]”h"]”h$]”h&]”j>0j?0j@0hjA0jB0uh1jÏ/hj$¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j#¯h´M£ hj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjk®ubjM)�”}”(hŒoFurther, this function only considers current page table mappings that are tracked using the folio mapcount(s).”h]”hŒoFurther, this function only considers current page table mappings that are tracked using the folio mapcount(s).”…”�”}”(hjt¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M¥ hjk®ubj¤)�”}”(hhh]”j©)�”}”(hX-This function does not consider: #. If the folio might get mapped in the (near) future (e.g., swapcache, pagecache, temporary unmapping for migration). #. If the folio is mapped differently (VM_PFNMAP). #. If hugetlb page table sharing applies. Callers might want to check hugetlb_pmd_shared(). ”h]”(j¯)�”}”(hŒ This function does not consider:”h]”hŒ This function does not consider:”…”�”}”(hjНh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M­ hj†¯ubjÉ)�”}”(hhh]”jÐ/)�”}”(hhh]”(jÕ/)�”}”(hŒsIf the folio might get mapped in the (near) future (e.g., swapcache, pagecache, temporary unmapping for migration).”h]”jM)�”}”(hŒsIf the folio might get mapped in the (near) future (e.g., swapcache, pagecache, temporary unmapping for migration).”h]”hŒsIf the folio might get mapped in the (near) future (e.g., swapcache, pagecache, temporary unmapping for migration).”…”�”}”(hj£¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M© hjŸ¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjœ¯ubjÕ/)�”}”(hŒ/If the folio is mapped differently (VM_PFNMAP).”h]”jM)�”}”(hjº¯h]”hŒ/If the folio is mapped differently (VM_PFNMAP).”…”�”}”(hj¼¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M« hj¸¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjœ¯ubjÕ/)�”}”(hŒYIf hugetlb page table sharing applies. Callers might want to check hugetlb_pmd_shared(). ”h]”jM)�”}”(hŒXIf hugetlb page table sharing applies. Callers might want to check hugetlb_pmd_shared().”h]”hŒXIf hugetlb page table sharing applies. Callers might want to check hugetlb_pmd_shared().”…”�”}”(hjÔ¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M¬ hjЯubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjœ¯ubeh}”(h]”h ]”h"]”h$]”h&]”j>0j?0j@0hjA0jB0uh1jÏ/hj™¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj†¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j˜¯h´M­ hjƒ¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjk®ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M¯ hjk®ubjM)�”}”(hŒBWhether the folio is estimated to be mapped into more than one MM.”h]”hŒBWhether the folio is estimated to be mapped into more than one MM.”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M° hjk®ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%folio_expected_ref_count (C function)”Œc.folio_expected_ref_count”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ8int folio_expected_ref_count (const struct folio *folio)”h]”hù)�”}”(hŒ7int folio_expected_ref_count(const struct folio *folio)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjH°h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjD°h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÍ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW°h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjD°h²hh³jV°h´MÍ ubhÿ)�”}”(hŒfolio_expected_ref_count”h]”j)�”}”(hŒfolio_expected_ref_count”h]”hŒfolio_expected_ref_count”…”�”}”(hji°h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhje°ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjD°h²hh³jV°h´MÍ ubj )�”}”(hŒ(const struct folio *folio)”h]”j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj…°h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj�°ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’°h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�°ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj °h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj�°ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­°h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�°ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj¾°h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj»°ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÀ°Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljk°sbŒc.folio_expected_ref_count”†”asbuh1hhj�°ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ°h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�°ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjì°h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj�°ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjù°h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�°ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj}°ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjD°h²hh³jV°h´MÍ ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj@°h²hh³jV°h´MÍ ubah}”(h]”j;°ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jV°h´MÍ hj=°h²hubj4)�”}”(hhh]”jM)�”}”(hŒ%calculate the expected folio refcount”h]”hŒ%calculate the expected folio refcount”…”�”}”(hj#±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÍ hj ±h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj=°h²hh³jV°h´MÍ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj;±jHj;±jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX%**Parameters** ``const struct folio *folio`` the folio **Description** Calculate the expected folio refcount, taking references from the pagecache, swapcache, PG_private and page table mappings into account. Useful in combination with folio_ref_count() to detect unexpected references (e.g., GUP or other temporary references). Does currently not consider references from the LRU cache. If the folio was isolated from the LRU (which is the case during migration or split), the LRU cache does not apply. Calling this function on an unmapped folio -- !folio_mapped() -- that is locked will return a stable result. Calling this function on a mapped folio will not result in a stable result, because nothing stops additional page table mappings from coming (e.g., fork()) or going (e.g., munmap()). Calling this function without the folio lock will also not result in a stable result: for example, the folio might get dropped from the swapcache concurrently. However, even when called without the folio lock or on a mapped folio, this function can be used to detect unexpected references early (for example, if it makes sense to even lock the folio and unmap it). The caller must add any reference (e.g., from folio_try_get()) it might be holding itself to the result. **Return** the expected folio refcount.”h]”(jM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÑ hj?±ubj¤)�”}”(hhh]”j©)�”}”(hŒ(``const struct folio *folio`` the folio ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjd±h]”hŒconst struct folio *folio”…”�”}”(hjf±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjb±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÎ hj^±ubjÉ)�”}”(hhh]”jM)�”}”(hŒ the folio”h]”hŒ the folio”…”�”}”(hj}±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jy±h´MÎ hjz±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj^±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jy±h´MÎ hj[±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj?±ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjŸ±h]”hŒ Description”…”�”}”(hj¡±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÐ hj?±ubjM)�”}”(hXCalculate the expected folio refcount, taking references from the pagecache, swapcache, PG_private and page table mappings into account. Useful in combination with folio_ref_count() to detect unexpected references (e.g., GUP or other temporary references).”•h]”hXCalculate the expected folio refcount, taking references from the pagecache, swapcache, PG_private and page table mappings into account. Useful in combination with folio_ref_count() to detect unexpected references (e.g., GUP or other temporary references).”…”�”}”(hjµ±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÏ hj?±ubjM)�”}”(hŒ®Does currently not consider references from the LRU cache. If the folio was isolated from the LRU (which is the case during migration or split), the LRU cache does not apply.”h]”hŒ®Does currently not consider references from the LRU cache. If the folio was isolated from the LRU (which is the case during migration or split), the LRU cache does not apply.”…”�”}”(hjıh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÔ hj?±ubjM)�”}”(hŒlCalling this function on an unmapped folio -- !folio_mapped() -- that is locked will return a stable result.”h]”hŒlCalling this function on an unmapped folio -- !folio_mapped() -- that is locked will return a stable result.”…”�”}”(hjÓ±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MØ hj?±ubjM)�”}”(hŒ¶Calling this function on a mapped folio will not result in a stable result, because nothing stops additional page table mappings from coming (e.g., fork()) or going (e.g., munmap()).”h]”hŒ¶Calling this function on a mapped folio will not result in a stable result, because nothing stops additional page table mappings from coming (e.g., fork()) or going (e.g., munmap()).”…”�”}”(hjâ±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÛ hj?±ubjM)�”}”(hŒŸCalling this function without the folio lock will also not result in a stable result: for example, the folio might get dropped from the swapcache concurrently.”h]”hŒŸCalling this function without the folio lock will also not result in a stable result: for example, the folio might get dropped from the swapcache concurrently.”…”�”}”(hjñ±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mß hj?±ubjM)�”}”(hŒÌHowever, even when called without the folio lock or on a mapped folio, this function can be used to detect unexpected references early (for example, if it makes sense to even lock the folio and unmap it).”h]”hŒÌHowever, even when called without the folio lock or on a mapped folio, this function can be used to detect unexpected references early (for example, if it makes sense to even lock the folio and unmap it).”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mã hj?±ubjM)�”}”(hŒhThe caller must add any reference (e.g., from folio_try_get()) it might be holding itself to the result.”h]”hŒhThe caller must add any reference (e.g., from folio_try_get()) it might be holding itself to the result.”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mç hj?±ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mê hj?±ubjM)�”}”(hŒthe expected folio refcount.”h]”hŒthe expected folio refcount.”…”�”}”(hj6²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒzap_vma (C function)”Œ c.zap_vma”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ)void zap_vma (struct vm_area_struct *vma)”h]”hù)�”}”(hŒ(void zap_vma(struct vm_area_struct *vma)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hje²h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hja²h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M– ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjt²h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhja²h²hh³js²h´M– ubhÿ)�”}”(hŒzap_vma”h]”j)�”}”(hŒzap_vma”h]”hŒzap_vma”…”�”}”(hj†²h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‚²ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhja²h²hh³js²h´M– ubj )�”}”(hŒ(struct vm_area_struct *vma)”h]”j )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¢²h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjž²ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯²h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjž²ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjÀ²h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj½²ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j²Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljˆ²sbŒ c.zap_vma”†”asbuh1hhjž²ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjà²h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjž²ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjî²h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjž²ubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjû²h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjž²ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjš²ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hja²h²hh³js²h´M– ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj]²h²hh³js²h´M– ubah}”(h]”jX²ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³js²h´M– hjZ²h²hubj4)�”}”(hhh]”jM)�”}”(hŒ#zap all page table entries in a vma”h]”hŒ#zap all page table entries in a vma”…”�”}”(hj%³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M– hj"³h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjZ²h²hh³js²h´M– ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj=³jHj=³jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ@**Parameters** ``struct vm_area_struct *vma`` The vma to zap.”h]”(jM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mš hjA³ubj¤)�”}”(hhh]”j©)�”}”(hŒ.``struct vm_area_struct *vma`` The vma to zap.”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hjf³h]”hŒstruct vm_area_struct *vma”…”�”}”(hjh³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjd³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mœ hj`³ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe vma to zap.”h]”hŒThe vma to zap.”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M— hj|³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj`³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j{³h´Mœ hj]³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”]”(héŒptdesc_address (C function)”Œc.ptdesc_address”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ/void * ptdesc_address (const struct ptdesc *pt)”h]”hù)�”}”(hŒ-void *ptdesc_address(const struct ptdesc *pt)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÀ³h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¼³h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjϳh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¼³h²hh³jγh´M�ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjݳh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¼³h²hh³jγh´M�ubhÿ)�”}”(hŒptdesc_address”h]”j)�”}”(hŒptdesc_address”h]”hŒptdesc_address”…”�”}”(hjî³h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjê³ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¼³h²hh³jγh´M�ubj )�”}”(hŒ(const struct ptdesc *pt)”h]”j )�”}”(hŒconst struct ptdesc *pt”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj ´h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj´ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj´ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj%´h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj´ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2´h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj´ubh)�”}”(hhh]”j)�”}”(hŒptdesc”h]”hŒptdesc”…”�”}”(hjC´h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj@´ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jE´Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljð³sbŒc.ptdesc_address”†”asbuh1hhj´ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc´h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj´ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjq´h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj´ubj)�”}”(hŒpt”h]”hŒpt”…”�”}”(hj~´h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj´ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj´ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¼³h²hh³jγh´M�ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¸³h²hh³jγh´M�ubah}”(h]”j³³ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jγh´M�hjµ³h²hubj4)�”}”(hhh]”jM)�”}”(hŒVirtual address of page table.”h]”hŒVirtual address of page table.”…”�”}”(hj¨´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M�hj¥´h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjµ³h²hh³jγh´M�ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÀ´jHjÀ´jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ‡**Parameters** ``const struct ptdesc *pt`` Page table descriptor. **Return** The first byte of the page table described by **pt**.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÊ´h]”hŒ Parameters”…”�”}”(hjÌ´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÈ´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M“hjÄ´ubj¤)�”}”(hhh]”j©)�”}”(hŒ3``const struct ptdesc *pt`` Page table descriptor. ”h]”(j¯)�”}”(hŒ``const struct ptdesc *pt``”h]”jS)�”}”(hjé´h]”hŒconst struct ptdesc *pt”…”�”}”(hjë´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjç´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M�hjã´ubjÉ)�”}”(hhh]”jM)�”}”(hŒPage table descriptor.”h]”hŒPage table descriptor.”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jþ´h´M�hjÿ´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjã´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jþ´h´M�hjà´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÄ´ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M’hjÄ´ubjM)�”}”(hŒ5The first byte of the page table described by **pt**.”h]”(hŒ.The first byte of the page table described by ”…”�”}”(hj:µh²hh³Nh´NubjŽ)�”}”(hŒ**pt**”h]”hŒpt”…”�”}”(hjBµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj:µubhŒ.”…”�”}”(hj:µh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒptdesc_set_kernel (C function)”Œc.ptdesc_set_kernel”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ.void ptdesc_set_kernel (struct ptdesc *ptdesc)”h]”hù)�”}”(hŒ-void ptdesc_set_kernel(struct ptdesc *ptdesc)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj{µh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjwµh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MŸubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjеh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjwµh²hh³j‰µh´MŸubhÿ)�”}”(hŒptdesc_set_kernel”h]”j)�”}”(hŒptdesc_set_kernel”h]”hŒptdesc_set_kernel”…”�”}”(hjœµh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj˜µubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjwµh²hh³j‰µh´MŸubj )�”}”(hŒ(struct ptdesc *ptdesc)”h]”j )�”}”(hŒstruct ptdesc *ptdesc”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¸µh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj´µubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŵh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj´µubh)�”}”(hhh]”j)�”}”(hŒptdesc”h]”hŒptdesc”…”�”}”(hjÖµh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÓµubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jصŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljžµsbŒc.ptdesc_set_kernel”†”asbuh1hhj´µubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöµh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj´µubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj´µubj)�”}”(hŒptdesc”h]”hŒptdesc”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj´µubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj°µubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjwµh²hh³j‰µh´MŸubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjsµh²hh³j‰µh´MŸubah}”(h]”jnµah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j‰µh´MŸhjpµh²hubj4)�”}”(hhh]”jM)�”}”(hŒ$Mark a ptdesc used to map the kernel”h]”hŒ$Mark a ptdesc used to map the kernel”…”�”}”(hj;¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MŸhj8¶h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjpµh²hh³j‰µh´MŸubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjS¶jHjS¶jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒÜ**Parameters** ``struct ptdesc *ptdesc`` The ptdesc to be marked **Description** Kernel page tables often need special handling. Set a flag so that the handling code knows this ptdesc will not be used for userspace.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj]¶h]”hŒ Parameters”…”�”}”(hj_¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj[¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M£hjW¶ubj¤)�”}”(hhh]”j©)�”}”(hŒ2``struct ptdesc *ptdesc`` The ptdesc to be marked ”h]”(j¯)�”}”(hŒ``struct ptdesc *ptdesc``”h]”jS)�”}”(hj|¶h]”hŒstruct ptdesc *ptdesc”…”�”}”(hj~¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjz¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M hjv¶ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe ptdesc to be marked”h]”hŒThe ptdesc to be marked”…”�”}”(hj•¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‘¶h´M hj’¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjv¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‘¶h´M hjs¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjW¶ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj·¶h]”hŒ Description”…”�”}”(hj¹¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjµ¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M¢hjW¶ubjM)�”}”(hŒ†Kernel page tables often need special handling. Set a flag so that the handling code knows this ptdesc will not be used for userspace.”h]”hŒ†Kernel page tables often need special handling. Set a flag so that the handling code knows this ptdesc will not be used for userspace.”…”�”}”(hjͶh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M¡hjW¶ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ ptdesc_clear_kernel (C function)”Œc.ptdesc_clear_kernel”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ0void ptdesc_clear_kernel (struct ptdesc *ptdesc)”h]”hù)�”}”(hŒ/void ptdesc_clear_kernel(struct ptdesc *ptdesc)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjü¶h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjø¶h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M«ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ·h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjø¶h²hh³j ·h´M«ubhÿ)�”}”(hŒptdesc_clear_kernel”h]”j)�”}”(hŒptdesc_clear_kernel”h]”hŒptdesc_clear_kernel”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj·ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjø¶h²hh³j ·h´M«ubj )�”}”(hŒ(struct ptdesc *ptdesc)”h]”j )�”}”(hŒstruct ptdesc *ptdesc”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj9·h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj5·ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjF·h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj5·ubh)�”}”(hhh]”j)�”}”(hŒptdesc”h]”hŒptdesc”…”�”}”(hjW·h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjT·ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jY·Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj·sbŒc.ptdesc_clear_kernel”†”asbuh1hhj5·ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjw·h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj5·ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj…·h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj5·ubj)�”}”(hŒptdesc”h]”hŒptdesc”…”�”}”(hj’·h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj5·ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj1·ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjø¶h²hh³j ·h´M«ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjô¶h²hh³j ·h´M«ubah}”(h]”jï¶ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j ·h´M«hjñ¶h²hubj4)�”}”(hhh]”jM)�”}”(hŒ1Mark a ptdesc as no longer used to map the kernel”h]”hŒ1Mark a ptdesc as no longer used to map the kernel”…”�”}”(hj¼·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M«hj¹·h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjñ¶h²hh³j ·h´M«ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÔ·jHjÔ·jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒµ**Parameters** ``struct ptdesc *ptdesc`` The ptdesc to be unmarked **Description** Use when the ptdesc is no longer used to map the kernel and no longer needs special handling.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÞ·h]”hŒ Parameters”…”�”}”(hjà·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÜ·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M¯hjØ·ubj¤)�”}”(hhh]”j©)�”}”(hŒ4``struct ptdesc *ptdesc`` The ptdesc to be unmarked ”h]”(j¯)�”}”(hŒ``struct ptdesc *ptdesc``”h]”jS)�”}”(hjý·h]”hŒstruct ptdesc *ptdesc”…”�”}”(hjÿ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjû·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M¬hj÷·ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe ptdesc to be unmarked”h]”hŒThe ptdesc to be unmarked”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¸h´M¬hj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj÷·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¸h´M¬hjô·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjØ·ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M®hjØ·ubjM)�”}”(hŒ]Use when the ptdesc is no longer used to map the kernel and no longer needs special handling.”h]”hŒ]Use when the ptdesc is no longer used to map the kernel and no longer needs special handling.”…”�”}”(hjN¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒptdesc_test_kernel (C function)”Œc.ptdesc_test_kernel”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ5bool ptdesc_test_kernel (const struct ptdesc *ptdesc)”h]”hù)�”}”(hŒ4bool ptdesc_test_kernel(const struct ptdesc *ptdesc)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hj}¸h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjy¸h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M¼ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹¸h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjy¸h²hh³jЏh´M¼ubhÿ)�”}”(hŒptdesc_test_kernel”h]”j)�”}”(hŒptdesc_test_kernel”h]”hŒptdesc_test_kernel”…”�”}”(hj�¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™¸ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjy¸h²hh³jЏh´M¼ubj )�”}”(hŒ(const struct ptdesc *ptdesc)”h]”j )�”}”(hŒconst struct ptdesc *ptdesc”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj¹¸h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjµ¸ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƸh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjµ¸ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÔ¸h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjµ¸ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjá¸h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjµ¸ubh)�”}”(hhh]”j)�”}”(hŒptdesc”h]”hŒptdesc”…”�”}”(hjò¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjï¸ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jô¸Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljŸ¸sbŒc.ptdesc_test_kernel”†”asbuh1hhjµ¸ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjµ¸ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj ¹h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjµ¸ubj)�”}”(hŒptdesc”h]”hŒptdesc”…”�”}”(hj-¹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjµ¸ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj±¸ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjy¸h²hh³jЏh´M¼ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hju¸h²hh³jЏh´M¼ubah}”(h]”jp¸ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jЏh´M¼hjr¸h²hubj4)�”}”(hhh]”jM)�”}”(hŒ+Check if a ptdesc is used to map the kernel”h]”hŒ+Check if a ptdesc is used to map the kernel”…”�”}”(hjW¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M¼hjT¹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjr¸h²hh³jЏh´M¼ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjo¹jHjo¹jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒŽ**Parameters** ``const struct ptdesc *ptdesc`` The ptdesc being tested **Description** Call to tell if the ptdesc used to map the kernel.”h]”(jM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÀhjs¹ubj¤)�”}”(hhh]”j©)�”}”(hŒ8``const struct ptdesc *ptdesc`` The ptdesc being tested ”h]”(j¯)�”}”(hŒ``const struct ptdesc *ptdesc``”h]”jS)�”}”(hj˜¹h]”hŒconst struct ptdesc *ptdesc”…”�”}”(hjš¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj–¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M½hj’¹ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe ptdesc being tested”h]”hŒThe ptdesc being tested”…”�”}”(hj±¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j­¹h´M½hj®¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj’¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j­¹h´M½hj�¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjs¹ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÓ¹h]”hŒ Description”…”�”}”(hjÕ¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjѹubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M¿hjs¹ubjM)�”}”(hŒ2Call to tell if the ptdesc used to map the kernel.”h]”hŒ2Call to tell if the ptdesc used to map the kernel.”…”�”}”(hjé¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M¾hjs¹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpagetable_alloc (C function)”Œc.pagetable_alloc”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ?struct ptdesc * pagetable_alloc (gfp_t gfp, unsigned int order)”h]”hù)�”}”(hŒ=struct ptdesc *pagetable_alloc(gfp_t gfp, unsigned int order)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjºh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÇubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&ºh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjºh²hh³j%ºh´MÇubh)�”}”(hhh]”j)�”}”(hŒptdesc”h]”hŒptdesc”…”�”}”(hj7ºh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4ºubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j9ºŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒpagetable_alloc”sbŒc.pagetable_alloc”†”asbuh1hhjºh²hh³j%ºh´MÇubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXºh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjºh²hh³j%ºh´MÇubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjfºh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjºh²hh³j%ºh´MÇubhÿ)�”}”(hŒpagetable_alloc”h]”j)�”}”(hjUºh]”hŒpagetable_alloc”…”�”}”(hjwºh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjsºubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjºh²hh³j%ºh´MÇubj )�”}”(hŒ(gfp_t gfp, unsigned int order)”h]”(j )�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj•ºh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj’ºubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j—ºŒmodname”NŒ classname”Njpjs)�”}”jv]”jSºŒc.pagetable_alloc”†”asbuh1hhjŽºubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³ºh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŽºubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjÁºh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŽºubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjŠºubj )�”}”(hŒunsigned int order”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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Öºubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(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Öºubj)�”}”(hŒorder”h]”hŒorder”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÖºubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjŠºubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjºh²hh³j%ºh´MÇubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjºh²hh³j%ºh´MÇubah}”(h]”j ºah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j%ºh´MÇhj ºh²hubj4)�”}”(hhh]”jM)�”}”(hŒAllocate pagetables”h]”hŒAllocate pagetables”…”�”}”(hj<»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÇhj9»h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj ºh²hh³j%ºh´MÇubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjT»jHjT»jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``gfp_t gfp`` GFP flags ``unsigned int order`` desired pagetable order **Description** pagetable_alloc allocates memory for page tables as well as a page table descriptor to describe that memory. **Return** The ptdesc describing the allocated page tables.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj^»h]”hŒ Parameters”…”�”}”(hj`»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj\»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MËhjX»ubj¤)�”}”(hhh]”(j©)�”}”(hŒ``gfp_t gfp`` GFP flags ”h]”(j¯)�”}”(hŒ ``gfp_t gfp``”h]”jS)�”}”(hj}»h]”hŒ gfp_t gfp”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj{»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÈhjw»ubjÉ)�”}”(hhh]”jM)�”}”(hŒ GFP flags”h]”hŒ GFP flags”…”�”}”(hj–»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j’»h´MÈhj“»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjw»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j’»h´MÈhjt»ubj©)�”}”(hŒ/``unsigned int order`` desired pagetable order ”h]”(j¯)�”}”(hŒ``unsigned int order``”h]”jS)�”}”(hj¶»h]”hŒunsigned int order”…”�”}”(hj¸»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj´»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÉhj°»ubjÉ)�”}”(hhh]”jM)�”}”(hŒdesired pagetable order”h]”hŒdesired pagetable order”…”�”}”(hjÏ»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jË»h´MÉhjÌ»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj°»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jË»h´MÉhjt»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjX»ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjñ»h]”hŒ Description”…”�”}”(hjó»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjï»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MËhjX»ubjM)�”}”(hŒlpagetable_alloc allocates memory for page tables as well as a page table descriptor to describe that memory.”h]”hŒlpagetable_alloc allocates memory for page tables as well as a page table descriptor to describe that memory.”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÊhjX»ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÍhjX»ubjM)�”}”(hŒ0The ptdesc describing the allocated page tables.”h]”hŒ0The ptdesc describing the allocated page tables.”…”�”}”(hj.¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒpagetable_free (C function)”Œc.pagetable_free”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ'void pagetable_free (struct ptdesc *pt)”h]”hù)�”}”(hŒ&void pagetable_free(struct ptdesc *pt)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj]¼h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjY¼h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MèubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl¼h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjY¼h²hh³jk¼h´Mèubhÿ)�”}”(hŒpagetable_free”h]”j)�”}”(hŒpagetable_free”h]”hŒpagetable_free”…”�”}”(hj~¼h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjz¼ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjY¼h²hh³jk¼h´Mèubj )�”}”(hŒ(struct ptdesc *pt)”h]”j )�”}”(hŒstruct ptdesc *pt”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjš¼h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj–¼ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§¼h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj–¼ubh)�”}”(hhh]”j)�”}”(hŒptdesc”h]”hŒptdesc”…”�”}”(hj¸¼h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjµ¼ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jº¼Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj€¼sbŒc.pagetable_free”†”asbuh1hhj–¼ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjؼh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj–¼ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjæ¼h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj–¼ubj)�”}”(hŒpt”h]”hŒpt”…”�”}”(hjó¼h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj–¼ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj’¼ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjY¼h²hh³jk¼h´Mèubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjU¼h²hh³jk¼h´Mèubah}”(h]”jP¼ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jk¼h´MèhjR¼h²hubj4)�”}”(hhh]”jM)�”}”(hŒFree pagetables”h]”hŒFree pagetables”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mèhj½h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjR¼h²hh³jk¼h´Mèubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj5½jHj5½jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒÕ**Parameters** ``struct ptdesc *pt`` The page table descriptor **Description** pagetable_free frees the memory of all page tables described by a page table descriptor and the memory for the descriptor itself.”h]”(jM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mìhj9½ubj¤)�”}”(hhh]”j©)�”}”(hŒ0``struct ptdesc *pt`` The page table descriptor ”h]”(j¯)�”}”(hŒ``struct ptdesc *pt``”h]”jS)�”}”(hj^½h]”hŒstruct ptdesc *pt”…”�”}”(hj`½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj\½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MéhjX½ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page table descriptor”h]”hŒThe page table descriptor”…”�”}”(hjw½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³js½h´Méhjt½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjX½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³js½h´MéhjU½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj9½ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj™½h]”hŒ Description”…”�”}”(hj›½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj—½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mëhj9½ubjM)�”}”(hŒ�pagetable_free frees the memory of all page tables described by a page table descriptor and the memory for the descriptor itself.”h]”hŒ�pagetable_free frees the memory of all page tables described by a page table descriptor and the memory for the descriptor itself.”…”�”}”(hj¯½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒvma_lookup (C function)”Œ c.vma_lookup”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒMstruct vm_area_struct * vma_lookup (struct mm_struct *mm, unsigned long addr)”h]”hù)�”}”(hŒKstruct vm_area_struct *vma_lookup(struct mm_struct *mm, unsigned long addr)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÞ½h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÚ½h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MúubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjì½h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÚ½h²hh³jë½h´Múubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjý½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjú½ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÿ½Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒ vma_lookup”sbŒ c.vma_lookup”†”asbuh1hhjÚ½h²hh³jë½h´MúubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÚ½h²hh³jë½h´MúubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj,¾h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÚ½h²hh³jë½h´Múubhÿ)�”}”(hŒ vma_lookup”h]”j)�”}”(hj¾h]”hŒ vma_lookup”…”�”}”(hj=¾h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj9¾ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÚ½h²hh³jë½h´Múubj )�”}”(hŒ*(struct mm_struct *mm, unsigned long addr)”h]”(j )�”}”(hŒstruct mm_struct *mm”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjX¾h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjT¾ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hje¾h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjT¾ubh)�”}”(hhh]”j)�”}”(hŒ mm_struct”h]”hŒ mm_struct”…”�”}”(hjv¾h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjs¾ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jx¾Œmodname”NŒ classname”Njpjs)�”}”jv]”j¾Œ c.vma_lookup”†”asbuh1hhjT¾ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”¾h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjT¾ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¢¾h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjT¾ubj)�”}”(hŒmm”h]”hŒmm”…”�”}”(hj¯¾h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjT¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjP¾ubj )�”}”(hŒunsigned long addr”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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ľubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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ľubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjľubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjP¾ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÚ½h²hh³jë½h´Múubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÖ½h²hh³jë½h´Múubah}”(h]”jѽah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jë½h´MúhjÓ½h²hubj4)�”}”(hhh]”jM)�”}”(hŒ Find a VMA at a specific address”h]”hŒ Find a VMA at a specific address”…”�”}”(hj*¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Múhj'¿h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÓ½h²hh³jë½h´Múubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjB¿jHjB¿jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ»**Parameters** ``struct mm_struct *mm`` The process address space. ``unsigned long addr`` The user address. **Return** The vm_area_struct at the given address, ``NULL`` otherwise.”h]”(jM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MþhjF¿ubj¤)�”}”(hhh]”(j©)�”}”(hŒ4``struct mm_struct *mm`` The process address space. ”h]”(j¯)�”}”(hŒ``struct mm_struct *mm``”h]”jS)�”}”(hjk¿h]”hŒstruct mm_struct *mm”…”�”}”(hjm¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhji¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mûhje¿ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe process address space.”h]”hŒThe process address space.”…”�”}”(hj„¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j€¿h´Mûhj�¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhje¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j€¿h´Mûhjb¿ubj©)�”}”(hŒ)``unsigned long addr`` The user address. ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hj¤¿h]”hŒunsigned long addr”…”�”}”(hj¦¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¢¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mühjž¿ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe user address.”h]”hŒThe user address.”…”�”}”(hj½¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¹¿h´Mühjº¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjž¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¹¿h´Mühjb¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjF¿ubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MþhjF¿ubjM)�”}”(hŒvm_start >> PAGE_SHIFT, if faulted then the virtual page offset at the time of first fault. If **vma** is a MAP_PRIVATE file-backed mapping, then this returns the page offset within the file. Edge cases: nommu does not abide by these, MAP_PRIVATE-/dev/zero satisfies vma_is_anonymous() but has file-backed page offset, and MAP_PRIVATE-pfnmap regions have their page offset set to the first PFN in the range. **Return** The page offset of the start of **vma**.”h]”(jM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M3hjNÁubj¤)�”}”(hhh]”j©)�”}”(hŒL``const struct vm_area_struct *vma`` The VMA whose page offset is required. ”h]”(j¯)�”}”(hŒ$``const struct vm_area_struct *vma``”h]”jS)�”}”(hjsÁh]”hŒ const struct vm_area_struct *vma”…”�”}”(hjuÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjqÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M0hjmÁubjÉ)�”}”(hhh]”jM)�”}”(hŒ&The VMA whose page offset is required.”h]”hŒ&The VMA whose page offset is required.”…”�”}”(hjŒÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jˆÁh´M0hj‰Áubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjmÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jˆÁh´M0hjjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjNÁubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj®Áh]”hŒ Description”…”�”}”(hj°Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¬Áubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M2hjNÁubjM)�”}”(hŒAIf the VMA is file-backed, this is the page offset into the file.”h]”hŒAIf the VMA is file-backed, this is the page offset into the file.”…”�”}”(hjÄÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M1hjNÁubjM)�”}”(hŒÆIf **vma** is anonymous, this is the virtual page offset of the start of the VMA - if unfaulted, then vma->vm_start >> PAGE_SHIFT, if faulted then the virtual page offset at the time of first fault.”h]”(hŒIf ”…”�”}”(hjÓÁh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjÛÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÓÁubhŒ¼ is anonymous, this is the virtual page offset of the start of the VMA - if unfaulted, then vma->vm_start >> PAGE_SHIFT, if faulted then the virtual page offset at the time of first fault.”…”�”}”(hjÓÁh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M3hjNÁubjM)�”}”(hŒcIf **vma** is a MAP_PRIVATE file-backed mapping, then this returns the page offset within the file.”h]”(hŒIf ”…”�”}”(hjôÁh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjüÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjôÁubhŒY is a MAP_PRIVATE file-backed mapping, then this returns the page offset within the file.”…”�”}”(hjôÁh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M7hjNÁubjM)�”}”(hŒ×Edge cases: nommu does not abide by these, MAP_PRIVATE-/dev/zero satisfies vma_is_anonymous() but has file-backed page offset, and MAP_PRIVATE-pfnmap regions have their page offset set to the first PFN in the range.”h]”hŒ×Edge cases: nommu does not abide by these, MAP_PRIVATE-/dev/zero satisfies vma_is_anonymous() but has file-backed page offset, and MAP_PRIVATE-pfnmap regions have their page offset set to the first PFN in the range.”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M:hjNÁubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M>hjNÁubjM)�”}”(hŒ(The page offset of the start of **vma**.”h]”(hŒ The page offset of the start of ”…”�”}”(hj<Âh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjDÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj<ÂubhŒ.”…”�”}”(hj<Âh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒvma_end_pgoff (C function)”Œc.vma_end_pgoff”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ8pgoff_t vma_end_pgoff (const struct vm_area_struct *vma)”h]”hù)�”}”(hŒ7pgoff_t vma_end_pgoff(const struct vm_area_struct *vma)”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hj€Âh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj}Âubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j‚ÂŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒ vma_end_pgoff”sbŒc.vma_end_pgoff”†”asbuh1hhjyÂh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MGubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢Âh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjyÂh²hh³j¡Âh´MGubhÿ)�”}”(hŒ vma_end_pgoff”h]”j)�”}”(hjžÂh]”hŒ vma_end_pgoff”…”�”}”(hj´Âh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj°Âubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjyÂh²hh³j¡Âh´MGubj )�”}”(hŒ"(const struct vm_area_struct *vma)”h]”j )�”}”(hŒ const struct vm_area_struct *vma”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjÏÂh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjËÂubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜÂh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjËÂubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjêÂh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjËÂubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷Âh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjËÂubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÃubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j ÃŒmodname”NŒ classname”Njpjs)�”}”jv]”jœÂŒc.vma_end_pgoff”†”asbuh1hhjËÂubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&Ãh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjËÂubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj4Ãh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjËÂubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjAÃh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjËÂubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÇÂubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjyÂh²hh³j¡Âh´MGubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjuÂh²hh³j¡Âh´MGubah}”(h]”jpÂah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¡Âh´MGhjrÂh²hubj4)�”}”(hhh]”jM)�”}”(hŒ3Get the page offset of the exclusive end of **vma**”h]”(hŒ,Get the page offset of the exclusive end of ”…”�”}”(hjkÃh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjsÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjkÃubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MGhjhÃh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjrÂh²hh³j¡Âh´MGubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj‘ÃjHj‘ÃjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXe**Parameters** ``const struct vm_area_struct *vma`` The VMA whose end page offset is required. **Description** This returns the exclusive end page offset of **vma**, which is useful for expressing page offset ranges. See the description of vma_start_pgoff() for a description of VMA page offsets. **Return** The exclusive end page offset of **vma**.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj›Ãh]”hŒ Parameters”…”�”}”(hj�Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj™Ãubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MKhj•Ãubj¤)�”}”(hhh]”j©)�”}”(hŒP``const struct vm_area_struct *vma`` The VMA whose end page offset is required. ”h]”(j¯)�”}”(hŒ$``const struct vm_area_struct *vma``”h]”jS)�”}”(hjºÃh]”hŒ const struct vm_area_struct *vma”…”�”}”(hj¼Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¸Ãubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MHhj´ÃubjÉ)�”}”(hhh]”jM)�”}”(hŒ*The VMA whose end page offset is required.”h]”hŒ*The VMA whose end page offset is required.”…”�”}”(hjÓÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÏÃh´MHhjÐÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj´Ãubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÏÃh´MHhj±Ãubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj•ÃubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjõÃh]”hŒ Description”…”�”}”(hj÷Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjóÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MJhj•ÃubjM)�”}”(hŒiThis returns the exclusive end page offset of **vma**, which is useful for expressing page offset ranges.”h]”(hŒ.This returns the exclusive end page offset of ”…”�”}”(hj Äh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ÄubhŒ4, which is useful for expressing page offset ranges.”…”�”}”(hj Äh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MIhj•ÃubjM)�”}”(hŒOSee the description of vma_start_pgoff() for a description of VMA page offsets.”h]”hŒOSee the description of vma_start_pgoff() for a description of VMA page offsets.”…”�”}”(hj,Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MLhj•ÃubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MOhj•ÃubjM)�”}”(hŒ)The exclusive end page offset of **vma**.”h]”(hŒ!The exclusive end page offset of ”…”�”}”(hjSÄh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hj[Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjSÄubhŒ.”…”�”}”(hjSÄh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MPhj•Ãubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvma_last_pgoff (C function)”Œc.vma_last_pgoff”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ9pgoff_t vma_last_pgoff (const struct vm_area_struct *vma)”h]”hù)�”}”(hŒ8pgoff_t vma_last_pgoff(const struct vm_area_struct *vma)”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hj—Äh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj”Äubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j™ÄŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒvma_last_pgoff”sbŒc.vma_last_pgoff”†”asbuh1hhj�Äh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MXubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹Äh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�Äh²hh³j¸Äh´MXubhÿ)�”}”(hŒvma_last_pgoff”h]”j)�”}”(hjµÄh]”hŒvma_last_pgoff”…”�”}”(hjËÄh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÇÄubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj�Äh²hh³j¸Äh´MXubj )�”}”(hŒ"(const struct vm_area_struct *vma)”h]”j )�”}”(hŒ const struct vm_area_struct *vma”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjæÄh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjâÄubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóÄh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjâÄubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjâÄubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjâÄubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÅubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j!ÅŒmodname”NŒ classname”Njpjs)�”}”jv]”j³ÄŒc.vma_last_pgoff”†”asbuh1hhjâÄubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=Åh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjâÄubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjKÅh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjâÄubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjXÅh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjâÄubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÞÄubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj�Äh²hh³j¸Äh´MXubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjŒÄh²hh³j¸Äh´MXubah}”(h]”j‡Äah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¸Äh´MXhj‰Äh²hubj4)�”}”(hhh]”jM)�”}”(hŒ/Get the page offset of the last page in **vma**”h]”(hŒ(Get the page offset of the last page in ”…”�”}”(hj‚Åh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjŠÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‚Åubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MXhjÅh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj‰Äh²hh³j¸Äh´MXubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¨ÅjHj¨ÅjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX/**Parameters** ``const struct vm_area_struct *vma`` The VMA whose last page offset is required. **Description** This returns the last page offset contained within **vma**. See the description of vma_start_pgoff() for a description of VMA page offsets. **Return** The last page offset of **vma**.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj²Åh]”hŒ Parameters”…”�”}”(hj´Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj°Åubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M\hj¬Åubj¤)�”}”(hhh]”j©)�”}”(hŒQ``const struct vm_area_struct *vma`` The VMA whose last page offset is required. ”h]”(j¯)�”}”(hŒ$``const struct vm_area_struct *vma``”h]”jS)�”}”(hjÑÅh]”hŒ const struct vm_area_struct *vma”…”�”}”(hjÓÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÏÅubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MYhjËÅubjÉ)�”}”(hhh]”jM)�”}”(hŒ+The VMA whose last page offset is required.”h]”hŒ+The VMA whose last page offset is required.”…”�”}”(hjêÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jæÅh´MYhjçÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjËÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jæÅh´MYhjÈÅubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¬ÅubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj Æh]”hŒ Description”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj Æubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M[hj¬ÅubjM)�”}”(hŒ;This returns the last page offset contained within **vma**.”h]”(hŒ3This returns the last page offset contained within ”…”�”}”(hj"Æh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hj*Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj"ÆubhŒ.”…”�”}”(hj"Æh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MZhj¬ÅubjM)�”}”(hŒOSee the description of vma_start_pgoff() for a description of VMA page offsets.”h]”hŒOSee the description of vma_start_pgoff() for a description of VMA page offsets.”…”�”}”(hjCÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M\hj¬ÅubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M_hj¬ÅubjM)�”}”(hŒ The last page offset of **vma**.”h]”(hŒThe last page offset of ”…”�”}”(hjjÆh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjrÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjjÆubhŒ.”…”�”}”(hjjÆh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒ!vma_start_anon_pgoff (C function)”Œc.vma_start_anon_pgoff”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ?pgoff_t vma_start_anon_pgoff (const struct vm_area_struct *vma)”h]”hù)�”}”(hŒ>pgoff_t vma_start_anon_pgoff(const struct vm_area_struct *vma)”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hj®Æh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj«Æubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j°ÆŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒvma_start_anon_pgoff”sbŒc.vma_start_anon_pgoff”†”asbuh1hhj§Æh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MhubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐÆh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj§Æh²hh³jÏÆh´Mhubhÿ)�”}”(hŒvma_start_anon_pgoff”h]”j)�”}”(hjÌÆh]”hŒvma_start_anon_pgoff”…”�”}”(hjâÆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÞÆubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj§Æh²hh³jÏÆh´Mhubj )�”}”(hŒ"(const struct vm_area_struct *vma)”h]”j )�”}”(hŒ const struct vm_area_struct *vma”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjýÆh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjùÆubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Çh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&•]”uh1jÆhjùÆubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjùÆubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%Çh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjùÆubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj6Çh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3Çubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j8ÇŒmodname”NŒ classname”Njpjs)�”}”jv]”jÊÆŒc.vma_start_anon_pgoff”†”asbuh1hhjùÆubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTÇh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjùÆubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjbÇh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjùÆubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjoÇh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjùÆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjõÆubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj§Æh²hh³jÏÆh´Mhubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj£Æh²hh³jÏÆh´Mhubah}”(h]”jžÆah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÏÆh´Mhhj Æh²hubj4)�”}”(hhh]”jM)�”}”(hŒ5Get the anonymous page offset of the start of **vma**”h]”(hŒ.Get the anonymous page offset of the start of ”…”�”}”(hj™Çh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hj¡Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj™Çubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mhhj–Çh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj Æh²hh³jÏÆh´Mhubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¿ÇjHj¿ÇjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXå**Parameters** ``const struct vm_area_struct *vma`` The VMA whose anonymous page offset is required. **Description** If unfaulted, then this is vma->vm_start >> PAGE_SHIFT, if faulted then the anonymous page offset at the time of first fault. If the VMA is anonymous, this returns the same value as vma_start_pgoff(). This value is used for tracking MAP_PRIVATE file-backed mappings by their anonymous page offset. **Return** The anonymous page offset of the start of **vma**.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÉÇh]”hŒ Parameters”…”�”}”(hjËÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÇÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MlhjÃÇubj¤)�”}”(hhh]”j©)�”}”(hŒV``const struct vm_area_struct *vma`` The VMA whose anonymous page offset is required. ”h]”(j¯)�”}”(hŒ$``const struct vm_area_struct *vma``”h]”jS)�”}”(hjèÇh]”hŒ const struct vm_area_struct *vma”…”�”}”(hjêÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjæÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MihjâÇubjÉ)�”}”(hhh]”jM)�”}”(hŒ0The VMA whose anonymous page offset is required.”h]”hŒ0The VMA whose anonymous page offset is required.”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jýÇh´MihjþÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjâÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jýÇh´MihjßÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÃÇubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj#Èh]”hŒ Description”…”�”}”(hj%Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj!Èubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MkhjÃÇubjM)�”}”(hŒ}If unfaulted, then this is vma->vm_start >> PAGE_SHIFT, if faulted then the anonymous page offset at the time of first fault.”h]”hŒ}If unfaulted, then this is vma->vm_start >> PAGE_SHIFT, if faulted then the anonymous page offset at the time of first fault.”…”�”}”(hj9Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MjhjÃÇubjM)�”}”(hŒJIf the VMA is anonymous, this returns the same value as vma_start_pgoff().”h]”hŒJIf the VMA is anonymous, this returns the same value as vma_start_pgoff().”…”�”}”(hjHÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MmhjÃÇubjM)�”}”(hŒ`This value is used for tracking MAP_PRIVATE file-backed mappings by their anonymous page offset.”h]”hŒ`This value is used for tracking MAP_PRIVATE file-backed mappings by their anonymous page offset.”…”�”}”(hjWÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MohjÃÇubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjhÈh]”hŒReturn”…”�”}”(hjjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjfÈubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MrhjÃÇubjM)�”}”(hŒ2The anonymous page offset of the start of **vma**.”h]”(hŒ*The anonymous page offset of the start of ”…”�”}”(hj~Èh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hj†Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj~ÈubhŒ.”…”�”}”(hj~Èh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MshjÃÇubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvma_end_anon_pgoff (C function)”Œc.vma_end_anon_pgoff”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ=pgoff_t vma_end_anon_pgoff (const struct vm_area_struct *vma)”h]”hù)�”}”(hŒGet the anonymous page offset of the exclusive end of **vma**.”h]”(hŒ6Get the anonymous page offset of the exclusive end of ”…”�”}”(hj­Éh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjµÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj­ÉubhŒ.”…”�”}”(hj­Éh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M‚hjªÉh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj´Èh²hh³jãÈh´M‚ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj×ÉjHj×ÉjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX’**Parameters** ``const struct vm_area_struct *vma`` The VMA whose end anonymous page offset is required. **Description** This returns the anonymous exclusive end page offset of **vma**, which is useful for expressing page offset ranges. See the description of vma_start_anon_pgoff() for a description of VMA anonymous page offsets. **Return** The exclusive end anonymous page offset of **vma**.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjáÉh]”hŒ Parameters”…”�”}”(hjãÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjßÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M†hjÛÉubj¤)�”}”(hhh]”j©)�”}”(hŒZ``const struct vm_area_struct *vma`` The VMA whose end anonymous page offset is required. ”h]”(j¯)�”}”(hŒ$``const struct vm_area_struct *vma``”h]”jS)�”}”(hjÊh]”hŒ const struct vm_area_struct *vma”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjþÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M„hjúÉubjÉ)�”}”(hhh]”jM)�”}”(hŒ4The VMA whose end anonymous page offset is required.”h]”hŒ4The VMA whose end anonymous page offset is required.”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÊh´M„hjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjúÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÊh´M„hj÷Éubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÛÉubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M†hjÛÉubjM)�”}”(hŒsThis returns the anonymous exclusive end page offset of **vma**, which is useful for expressing page offset ranges.”h]”(hŒ8This returns the anonymous exclusive end page offset of ”…”�”}”(hjQÊh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjYÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjQÊubhŒ4, which is useful for expressing page offset ranges.”…”�”}”(hjQÊh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M…hjÛÉubjM)�”}”(hŒ^See the description of vma_start_anon_pgoff() for a description of VMA anonymous page offsets.”h]”hŒ^See the description of vma_start_anon_pgoff() for a description of VMA anonymous page offsets.”…”�”}”(hjrÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MˆhjÛÉubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M‹hjÛÉubjM)�”}”(hŒ3The exclusive end anonymous page offset of **vma**.”h]”(hŒ+The exclusive end anonymous page offset of ”…”�”}”(hj™Êh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hj¡Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj™ÊubhŒ.”…”�”}”(hj™Êh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒ vma_last_anon_pgoff (C function)”Œc.vma_last_anon_pgoff”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ>pgoff_t vma_last_anon_pgoff (const struct vm_area_struct *vma)”h]”hù)�”}”(hŒ=pgoff_t vma_last_anon_pgoff(const struct vm_area_struct *vma)”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjÝÊh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÚÊubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jßÊŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒvma_last_anon_pgoff”sbŒc.vma_last_anon_pgoff”†”asbuh1hhjÖÊh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M”ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿÊh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÖÊh²hh³jþÊh´M”ubhÿ)�”}”(hŒvma_last_anon_pgoff”h]”j)�”}”(hjûÊh]”hŒvma_last_anon_pgoff”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Ëubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÖÊh²hh³jþÊh´M”ubj )�”}”(hŒ"(const struct vm_area_struct *vma)”h]”j )�”}”(hŒ const struct vm_area_struct *vma”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj,Ëh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj(ËubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9Ëh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj(Ëubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjGËh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj(ËubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTËh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj(Ëubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjeËh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjbËubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jgËŒmodname”NŒ classname”Njpjs)�”}”jv]”jùÊŒc.vma_last_anon_pgoff”†”asbuh1hhj(ËubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒËh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj(ËubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj‘Ëh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj(Ëubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjžËh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj(Ëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj$Ëubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÖÊh²hh³jþÊh´M”ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÒÊh²hh³jþÊh´M”ubah}”(h]”jÍÊah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jþÊh´M”hjÏÊh²hubj4)�”}”(hhh]”jM)�”}”(hŒ:Get the anonymous page offset of the last page in **vma**.”h]”(hŒ2Get the anonymous page offset of the last page in ”…”�”}”(hjÈËh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjÐËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÈËubhŒ.”…”�”}”(hjÈËh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M”hjÅËh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÏÊh²hh³jþÊh´M”ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjòËjHjòËjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``const struct vm_area_struct *vma`` The VMA whose last anonymous page offset is required. **Description** See the description of vma_start_anon_pgoff() for a description of VMA anonymous page offsets. **Return** The last anonymous page offset of **vma**.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjüËh]”hŒ Parameters”…”�”}”(hjþËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjúËubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M˜hjöËubj¤)�”}”(hhh]”j©)�”}”(hŒ[``const struct vm_area_struct *vma`` The VMA whose last anonymous page offset is required. ”h]”(j¯)�”}”(hŒ$``const struct vm_area_struct *vma``”h]”jS)�”}”(hjÌh]”hŒ const struct vm_area_struct *vma”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÌubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M–hjÌubjÉ)�”}”(hhh]”jM)�”}”(hŒ5The VMA whose last anonymous page offset is required.”h]”hŒ5The VMA whose last anonymous page offset is required.”…”�”}”(hj4Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j0Ìh´M–hj1Ìubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÌubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j0Ìh´M–hjÌubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjöËubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M˜hjöËubjM)�”}”(hŒ^See the description of vma_start_anon_pgoff() for a description of VMA anonymous page offsets.”h]”hŒ^See the description of vma_start_anon_pgoff() for a description of VMA anonymous page offsets.”…”�”}”(hjlÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M—hjöËubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MšhjöËubjM)�”}”(hŒ*The last anonymous page offset of **vma**.”h]”(hŒ"The last anonymous page offset of ”…”�”}”(hj“Ìh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hj›Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj“ÌubhŒ.”…”�”}”(hj“Ìh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒmmap_action_remap (C function)”Œc.mmap_action_remap”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒtvoid mmap_action_remap (struct vm_area_desc *desc, unsigned long start, unsigned long start_pfn, unsigned long size)”h]”hù)�”}”(hŒsvoid mmap_action_remap(struct vm_area_desc *desc, unsigned long start, unsigned long start_pfn, unsigned long size)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÔÌh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÐÌh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M­ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãÌh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÐÌh²hh³jâÌh´M­ubhÿ)�”}”(hŒmmap_action_remap”h]”j)�”}”(hŒmmap_action_remap”h]”hŒmmap_action_remap”…”�”}”(hjõÌh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñÌubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÐÌh²hh³jâÌh´M­ubj )�”}”(hŒ](struct vm_area_desc *desc, unsigned long start, unsigned long start_pfn, unsigned long size)”h]”(j )�”}”(hŒstruct vm_area_desc *desc”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj ÍubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj Íubh)�”}”(hhh]”j)�”}”(hŒ vm_area_desc”h]”hŒ vm_area_desc”…”�”}”(hj/Íh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj,Íubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j1ÍŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj÷ÌsbŒc.mmap_action_remap”†”asbuh1hhj ÍubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOÍh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj ÍubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj]Íh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj Íubj)�”}”(hŒdesc”h]”hŒdesc”…”�”}”(hjjÍh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Íubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj Íubj )�”}”(hŒunsigned long start”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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Íubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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Íubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj»Íh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÍubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj Íubj )�”}”(hŒunsigned long start_pfn”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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ÐÍubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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ÐÍubj)�”}”(hŒ start_pfn”h]”hŒ start_pfn”…”�”}”(hj Îh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÐÍubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj Íubj )�”}”(hŒunsigned long size”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj%Îh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj!ÎubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3Îh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj!Îubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjAÎh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj!ÎubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOÎ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 ]”jah"]”h$]”h&]”uh1jhj!Îubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj Íubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÐÌh²hh³jâÌh´M­ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÌÌh²hh³jâÌh´M­ubah}”(h]”jÇÌah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jâÌh´M­hjÉÌh²hubj4)�”}”(hhh]”jM)�”}”(hŒJhelper for mmap_prepare hook to specify that a pure PFN remap is required.”h]”hŒJhelper for mmap_prepare hook to specify that a pure PFN remap is required.”…”�”}”(hj‡Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M­hj„Îh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÉÌh²hh³jâÌh´M­ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjŸÎjHjŸÎjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXq**Parameters** ``struct vm_area_desc *desc`` The VMA descriptor for the VMA requiring remap. ``unsigned long start`` The virtual address to start the remap from, must be within the VMA. ``unsigned long start_pfn`` The first PFN in the range to remap. ``unsigned long size`` The size of the range to remap, in bytes, at most spanning to the end of the VMA.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj©Îh]”hŒ Parameters”…”�”}”(hj«Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj§Îubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M±hj£Îubj¤)�”}”(hhh]”(j©)�”}”(hŒN``struct vm_area_desc *desc`` The VMA descriptor for the VMA requiring remap. ”h]”(j¯)�”}”(hŒ``struct vm_area_desc *desc``”h]”jS)�”}”(hjÈÎh]”hŒstruct vm_area_desc *desc”…”�”}”(hjÊÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÆÎubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M¯hjÂÎubjÉ)�”}”(hhh]”jM)�”}”(hŒ/The VMA descriptor for the VMA requiring remap.”h]”hŒ/The VMA descriptor for the VMA requiring remap.”…”�”}”(hjáÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÝÎh´M¯hjÞÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÂÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÝÎh´M¯hj¿Îubj©)�”}”(hŒ]``unsigned long start`` The virtual address to start the remap from, must be within the VMA. ”h]”(j¯)�”}”(hŒ``unsigned long start``”h]”jS)�”}”(hjÏh]”hŒunsigned long start”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÿÎubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M°hjûÎubjÉ)�”}”(hhh]”jM)�”}”(hŒDThe virtual address to start the remap from, must be within the VMA.”h]”hŒDThe virtual address to start the remap from, must be within the VMA.”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÏh´M°hjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjûÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÏh´M°hj¿Îubj©)�”}”(hŒA``unsigned long start_pfn`` The first PFN in the range to remap. ”h]”(j¯)�”}”(hŒ``unsigned long start_pfn``”h]”jS)�”}”(hj:Ïh]”hŒunsigned long start_pfn”…”�”}”(hj<Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj8Ïubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M±hj4ÏubjÉ)�”}”(hhh]”jM)�”}”(hŒ$The first PFN in the range to remap.”h]”hŒ$The first PFN in the range to remap.”…”�”}”(hjSÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jOÏh´M±hjPÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj4Ïubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jOÏh´M±hj¿Îubj©)�”}”(hŒh``unsigned long size`` The size of the range to remap, in bytes, at most spanning to the end of the VMA.”h]”(j¯)�”}”(hŒ``unsigned long size``”h]”jS)�”}”(hjsÏh]”hŒunsigned long size”…”�”}”(hjuÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjqÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M²hjmÏubjÉ)�”}”(hhh]”jM)�”}”(hŒQThe size of the range to remap, in bytes, at most spanning to the end of the VMA.”h]”hŒQThe size of the range to remap, in bytes, at most spanning to the end of the VMA.”…”�”}”(hjŒÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jˆÏh´M²hj‰Ïubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjmÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³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”]”(héŒ#mmap_action_remap_full (C function)”Œc.mmap_action_remap_full”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒPvoid mmap_action_remap_full (struct vm_area_desc *desc, unsigned long start_pfn)”h]”hù)�”}”(hŒOvoid mmap_action_remap_full(struct vm_area_desc *desc, unsigned long start_pfn)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÌÏh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÈÏh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÈubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛÏh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÈÏh²hh³jÚÏh´MÈubhÿ)�”}”(hŒmmap_action_remap_full”h]”j)�”}”(hŒmmap_action_remap_full”h]”hŒmmap_action_remap_full”…”�”}”(hjíÏh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjéÏubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÈÏh²hh³jÚÏh´MÈubj )�”}”(hŒ4(struct vm_area_desc *desc, unsigned long start_pfn)”h]”(j )�”}”(hŒstruct vm_area_desc *desc”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj Ðh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÐubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÐubh)�”}”(hhh]”j)�”}”(hŒ vm_area_desc”h]”hŒ vm_area_desc”…”�”}”(hj'Ðh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj$Ðubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j)ÐŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljïÏsbŒc.mmap_action_remap_full”†”asbuh1hhjÐubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGÐh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÐubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjUÐh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÐubj)�”}”(hŒdesc”h]”hŒdesc”…”�”}”(hjbÐh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÐubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÐubj )�”}”(hŒunsigned long start_pfn”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj{Ðh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjwÐubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰Ðh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjwÐubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj—Ðh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjwÐubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥Ðh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjwÐubj)�”}”(hŒ start_pfn”h]”hŒ start_pfn”…”�”}”(hj³Ðh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjwÐubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÐubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÈÏh²hh³jÚÏh´MÈubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÄÏh²hh³jÚÏh´MÈubah}”(h]”j¿Ïah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÚÏh´MÈhjÁÏh²hubj4)�”}”(hhh]”jM)�”}”(hŒZhelper for mmap_prepare hook to specify that the entirety of a VMA should be PFN remapped.”h]”hŒZhelper for mmap_prepare hook to specify that the entirety of a VMA should be PFN remapped.”…”�”}”(hjÝÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÈhjÚÐh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÁÏh²hh³jÚÏh´MÈubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjõÐjHjõÐjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ£**Parameters** ``struct vm_area_desc *desc`` The VMA descriptor for the VMA requiring remap. ``unsigned long start_pfn`` The first PFN in the range to remap.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÿÐh]”hŒ Parameters”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjýÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÌhjùÐubj¤)�”}”(hhh]”(j©)�”}”(hŒN``struct vm_area_desc *desc`` The VMA descriptor for the VMA requiring remap. ”h]”(j¯)�”}”(hŒ``struct vm_area_desc *desc``”h]”jS)�”}”(hjÑh]”hŒstruct vm_area_desc *desc”…”�”}”(hj Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÊhjÑubjÉ)�”}”(hhh]”jM)�”}”(hŒ/The VMA descriptor for the VMA requiring remap.”h]”hŒ/The VMA descriptor for the VMA requiring remap.”…”�”}”(hj7Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j3Ñh´MÊhj4Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j3Ñh´MÊhjÑubj©)�”}”(hŒ@``unsigned long start_pfn`` The first PFN in the range to remap.”h]”(j¯)�”}”(hŒ``unsigned long start_pfn``”h]”jS)�”}”(hjWÑh]”hŒunsigned long start_pfn”…”�”}”(hjYÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjUÑubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÌhjQÑubjÉ)�”}”(hhh]”jM)�”}”(hŒ$The first PFN in the range to remap.”h]”hŒ$The first PFN in the range to remap.”…”�”}”(hjpÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MËhjmÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjQÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jlÑ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”]”(héŒ mmap_action_ioremap (C function)”Œc.mmap_action_ioremap”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒvvoid mmap_action_ioremap (struct vm_area_desc *desc, unsigned long start, unsigned long start_pfn, unsigned long size)”h]”hù)�”}”(hŒuvoid mmap_action_ioremap(struct vm_area_desc *desc, unsigned long start, unsigned long start_pfn, unsigned long size)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj±Ñh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj­Ñh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÔubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀÑh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj­Ñh²hh³j¿Ñh´MÔubhÿ)�”}”(hŒmmap_action_ioremap”h]”j)�”}”(hŒmmap_action_ioremap”h]”hŒmmap_action_ioremap”…”�”}”(hjÒÑh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÎÑubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj­Ñh²hh³j¿Ñh´MÔubj )�”}”(hŒ](struct vm_area_desc *desc, unsigned long start, unsigned long start_pfn, unsigned long size)”h]”(j )�”}”(hŒstruct vm_area_desc *desc”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjîÑh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjêÑubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûÑh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjêÑubh)�”}”(hhh]”j)�”}”(hŒ vm_area_desc”h]”hŒ vm_area_desc”…”�”}”(hj Òh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Òubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÒŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÔÑsbŒc.mmap_action_ioremap”†”asbuh1hhjêÑubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,Òh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjêÑubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj:Òh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjêÑubj)�”}”(hŒdesc”h]”hŒdesc”…”�”}”(hjGÒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjêÑubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjæÑubj )�”}”(hŒunsigned long start”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj`Òh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj\ÒubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnÒh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj\Òubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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\Òubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj˜Òh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj\Òubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjæÑubj )�”}”(hŒunsigned long start_pfn”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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­Òubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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­Òubj)�”}”(hŒ start_pfn”h]”hŒ start_pfn”…”�”}”(hjéÒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj­Òubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjæÑubj )�”}”(hŒunsigned long size”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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þÒubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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þÒubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj:Óh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjþÒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjæÑubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj­Ñh²hh³j¿Ñh´MÔubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj©Ñh²hh³j¿Ñh´MÔubah}”(h]”j¤Ñah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¿Ñh´MÔhj¦Ñh²hubj4)�”}”(hhh]”jM)�”}”(hŒNhelper for mmap_prepare hook to specify that a pure PFN I/O remap is required.”h]”hŒNhelper for mmap_prepare hook to specify that a pure PFN I/O remap is required.”…”�”}”(hjdÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÔhjaÓh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¦Ñh²hh³j¿Ñh´MÔubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj|ÓjHj|ÓjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXq**Parameters** ``struct vm_area_desc *desc`` The VMA descriptor for the VMA requiring remap. ``unsigned long start`` The virtual address to start the remap from, must be within the VMA. ``unsigned long start_pfn`` The first PFN in the range to remap. ``unsigned long size`` The size of the range to remap, in bytes, at most spanning to the end of the VMA.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj†Óh]”hŒ Parameters”…”�”}”(hjˆÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj„Óubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MØhj€Óubj¤)�”}”(hhh]”(j©)�”}”(hŒN``struct vm_area_desc *desc`` The VMA descriptor for the VMA requiring remap. ”h]”(j¯)�”}”(hŒ``struct vm_area_desc *desc``”h]”jS)�”}”(hj¥Óh]”hŒstruct vm_area_desc *desc”…”�”}”(hj§Óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj£Óubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÖhjŸÓubjÉ)�”}”(hhh]”jM)�”}”(hŒ/The VMA descriptor for the VMA requiring remap.”h]”hŒ/The VMA descriptor for the VMA requiring remap.”…”�”}”(hj¾Óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jºÓh´MÖhj»Óubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjŸÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jºÓh´MÖhjœÓubj©)�”}”(hŒ]``unsigned long start`` The virtual address to start the remap from, must be within the VMA. ”h]”(j¯)�”}”(hŒ``unsigned long start``”h]”jS)�”}”(hjÞÓh]”hŒunsigned long start”…”�”}”(hjàÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÜÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M×hjØÓubjÉ)�”}”(hhh]”jM)�”}”(hŒDThe virtual address to start the remap from, must be within the VMA.”h]”hŒDThe virtual address to start the remap from, must be within the VMA.”…”�”}”(hj÷Óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jóÓh´M×hjôÓubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjØÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jóÓh´M×hjœÓubj©)�”}”(hŒA``unsigned long start_pfn`` The first PFN in the range to remap. ”h]”(j¯)�”}”(hŒ``unsigned long start_pfn``”h]”jS)�”}”(hjÔh]”hŒunsigned long start_pfn”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MØhjÔubjÉ)�”}”(hhh]”jM)�”}”(hŒ$The first PFN in the range to remap.”h]”hŒ$The first PFN in the range to remap.”…”�”}”(hj0Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j,Ôh´MØhj-Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j,Ôh´MØhjœÓubj©)�”}”(hŒh``unsigned long size`` The size of the range to remap, in bytes, at most spanning to the end of the VMA.”h]”(j¯)�”}”(hŒ``unsigned long size``”h]”jS)�”}”(hjPÔh]”hŒunsigned long size”…”�”}”(hjRÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjNÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÙhjJÔubjÉ)�”}”(hhh]”jM)�”}”(hŒQThe size of the range to remap, in bytes, at most spanning to the end of the VMA.”h]”hŒQThe size of the range to remap, in bytes, at most spanning to the end of the VMA.”…”�”}”(hjiÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jeÔh´MÙhjfÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjJÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jeÔ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”]”(héŒ%mmap_action_ioremap_full (C function)”Œc.mmap_action_ioremap_full”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒRvoid mmap_action_ioremap_full (struct vm_area_desc *desc, unsigned long start_pfn)”h]”hù)�”}”(hŒQvoid mmap_action_ioremap_full(struct vm_area_desc *desc, unsigned long start_pfn)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj©Ôh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¥Ôh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MæubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸Ôh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¥Ôh²hh³j·Ôh´Mæubhÿ)�”}”(hŒmmap_action_ioremap_full”h]”j)�”}”(hŒmmap_action_ioremap_full”h]”hŒmmap_action_ioremap_full”…”�”}”(hjÊÔh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÆÔubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¥Ôh²hh³j·Ôh´Mæubj )�”}”(hŒ4(struct vm_area_desc *desc, unsigned long start_pfn)”h]”(j )�”}”(hŒstruct vm_area_desc *desc”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjæÔh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjâÔubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóÔh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjâÔubh)�”}”(hhh]”j)�”}”(hŒ vm_area_desc”h]”hŒ vm_area_desc”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÕŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÌÔsbŒc.mmap_action_ioremap_full”†”asbuh1hhjâÔubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$Õh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjâÔubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj2Õh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjâÔubj)�”}”(hŒdesc”h]”hŒdesc”…”�”}”(hj?Õh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjâÔubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÞÔubj )�”}”(hŒunsigned long start_pfn”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjXÕh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjTÕubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfÕh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjTÕubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjtÕh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjTÕubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚Õh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjTÕubj)�”}”(hŒ start_pfn”h]”hŒ start_pfn”…”�”}”(hj�Õh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjTÕubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÞÔubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¥Ôh²hh³j·Ôh´Mæubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¡Ôh²hh³j·Ôh´Mæubah}”(h]”jœÔah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j·Ôh´MæhjžÔh²hubj4)�”}”(hhh]”jM)�”}”(hŒ^helper for mmap_prepare hook to specify that the entirety of a VMA should be PFN I/O remapped.”h]”hŒ^helper for mmap_prepare hook to specify that the entirety of a VMA should be PFN I/O remapped.”…”�”}”(hjºÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mæhj·Õh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjžÔh²hh³j·Ôh´Mæubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÒÕjHjÒÕjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ£**Parameters** ``struct vm_area_desc *desc`` The VMA descriptor for the VMA requiring remap. ``unsigned long start_pfn`` The first PFN in the range to remap.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÜÕh]”hŒ Parameters”…”�”}”(hjÞÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÚÕubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MêhjÖÕubj¤)�”}”(hhh]”(j©)�”}”(hŒN``struct vm_area_desc *desc`` The VMA descriptor for the VMA requiring remap. ”h]”(j¯)�”}”(hŒ``struct vm_area_desc *desc``”h]”jS)�”}”(hjûÕh]”hŒstruct vm_area_desc *desc”…”�”}”(hjýÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjùÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MèhjõÕubjÉ)�”}”(hhh]”jM)�”}”(hŒ/The VMA descriptor for the VMA requiring remap.”h]”hŒ/The VMA descriptor for the VMA requiring remap.”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÖh´MèhjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjõÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÖh´MèhjòÕubj©)�”}”(hŒ@``unsigned long start_pfn`` The first PFN in the range to remap.”h]”(j¯)�”}”(hŒ``unsigned long start_pfn``”h]”jS)�”}”(hj4Öh]”hŒunsigned long start_pfn”…”�”}”(hj6Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj2Öubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mêhj.ÖubjÉ)�”}”(hhh]”jM)�”}”(hŒ$The first PFN in the range to remap.”h]”hŒ$The first PFN in the range to remap.”…”�”}”(hjMÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MéhjJÖubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj.Öubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jIÖ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”]”(héŒ'mmap_action_simple_ioremap (C function)”Œc.mmap_action_simple_ioremap”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒlvoid mmap_action_simple_ioremap (struct vm_area_desc *desc, phys_addr_t start_phys_addr, unsigned long size)”h]”hù)�”}”(hŒkvoid mmap_action_simple_ioremap(struct vm_area_desc *desc, phys_addr_t start_phys_addr, unsigned long size)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjŽÖh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjŠÖh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MòubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Öh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŠÖh²hh³jœÖh´Mòubhÿ)�”}”(hŒmmap_action_simple_ioremap”h]”j)�”}”(hŒmmap_action_simple_ioremap”h]”hŒmmap_action_simple_ioremap”…”�”}”(hj¯Öh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj«Öubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjŠÖh²hh³jœÖh´Mòubj )�”}”(hŒL(struct vm_area_desc *desc, phys_addr_t start_phys_addr, unsigned long size)”h]”(j )�”}”(hŒstruct vm_area_desc *desc”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjËÖh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÇÖubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØÖh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÇÖubh)�”}”(hhh]”j)�”}”(hŒ vm_area_desc”h]”hŒ vm_area_desc”…”�”}”(hjéÖh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjæÖubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jëÖŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj±ÖsbŒc.mmap_action_simple_ioremap”†”asbuh1hhjÇÖubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ×h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÇÖubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÇÖubj)�”}”(hŒdesc”h]”hŒdesc”…”�”}”(hj$×h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÇÖubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÃÖubj )�”}”(hŒphys_addr_t start_phys_addr”h]”(h)�”}”(hhh]”j)�”}”(hŒ phys_addr_t”h]”hŒ phys_addr_t”…”�”}”(hj@×h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj=×ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jB׌modname”NŒ classname”Njpjs)�”}”jv]”j׌c.mmap_action_simple_ioremap”†”asbuh1hhj9×ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^×h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj9×ubj)�”}”(hŒstart_phys_addr”h]”hŒstart_phys_addr”…”�”}”(hjl×h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj9×ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÃÖubj )�”}”(hŒunsigned long size”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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�×ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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�×ubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj½×h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�×ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÃÖubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjŠÖh²hh³jœÖh´Mòubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj†Öh²hh³jœÖh´Mòubah}”(h]”j�Öah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jœÖh´MòhjƒÖh²hubj4)�”}”(hhh]”jM)�”}”(hŒ„helper for mmap_prepare hook to specify that the physical range in [start_phys_addr, start_phys_addr + size) should be I/O remapped.”h]”hŒ„helper for mmap_prepare hook to specify that the physical range in [start_phys_addr, start_phys_addr + size) should be I/O remapped.”…”�”}”(hjç×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mòhjä×h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjƒÖh²hh³jœÖh´Mòubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÿ×jHjÿ×jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXF**Parameters** ``struct vm_area_desc *desc`` The VMA descriptor for the VMA requiring remap. ``phys_addr_t start_phys_addr`` Start of the physical memory to be mapped. ``unsigned long size`` Size of the area to map. **NOTE** Some drivers might want to tweak desc->page_prot for purposes of write-combine or similar.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj Øh]”hŒ Parameters”…”�”}”(hj Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjØubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MöhjØubj¤)�”}”(hhh]”(j©)�”}”(hŒN``struct vm_area_desc *desc`` The VMA descriptor for the VMA requiring remap. ”h]”(j¯)�”}”(hŒ``struct vm_area_desc *desc``”h]”jS)�”}”(hj(Øh]”hŒstruct vm_area_desc *desc”…”�”}”(hj*Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj&Øubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mõhj"ØubjÉ)�”}”(hhh]”jM)�”}”(hŒ/The VMA descriptor for the VMA requiring remap.”h]”hŒ/The VMA descriptor for the VMA requiring remap.”…”�”}”(hjAØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j=Øh´Mõhj>Øubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj"Øubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j=Øh´MõhjØubj©)�”}”(hŒK``phys_addr_t start_phys_addr`` Start of the physical memory to be mapped. ”h]”(j¯)�”}”(hŒ``phys_addr_t start_phys_addr``”h]”jS)�”}”(hjaØh]”hŒphys_addr_t start_phys_addr”…”�”}”(hjcØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj_Øubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Möhj[ØubjÉ)�”}”(hhh]”jM)�”}”(hŒ*Start of the physical memory to be mapped.”h]”hŒ*Start of the physical memory to be mapped.”…”�”}”(hjzØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jvØh´MöhjwØubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj[Øubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jvØh´MöhjØubj©)�”}”(hŒ0``unsigned long size`` Size of the area to map. ”h]”(j¯)�”}”(hŒ``unsigned long size``”h]”jS)�”}”(hjšØh]”hŒunsigned long size”…”�”}”(hjœØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj˜Øubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M÷hj”ØubjÉ)�”}”(hhh]”jM)�”}”(hŒSize of the area to map.”h]”hŒSize of the area to map.”…”�”}”(hj³Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¯Øh´M÷hj°Øubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj”Øubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¯Øh´M÷hjØubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjØubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MùhjØubjM)�”}”(hŒZSome drivers might want to tweak desc->page_prot for purposes of write-combine or similar.”h]”hŒZSome drivers might want to tweak desc->page_prot for purposes of write-combine or similar.”…”�”}”(hjëØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒ)mmap_action_map_kernel_pages (C function)”Œc.mmap_action_map_kernel_pages”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒvoid mmap_action_map_kernel_pages (struct vm_area_desc *desc, unsigned long start, struct page **pages, unsigned long nr_pages)”h]”hù)�”}”(hŒ~void mmap_action_map_kernel_pages(struct vm_area_desc *desc, unsigned long start, struct page **pages, unsigned long nr_pages)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÙh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)Ùh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÙh²hh³j(Ùh´Mubhÿ)�”}”(hŒmmap_action_map_kernel_pages”h]”j)�”}”(hŒmmap_action_map_kernel_pages”h]”hŒmmap_action_map_kernel_pages”…”�”}”(hj;Ùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7Ùubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÙh²hh³j(Ùh´Mubj )�”}”(hŒ](struct vm_area_desc *desc, unsigned long start, struct page **pages, unsigned long nr_pages)”h]”(j )�”}”(hŒstruct vm_area_desc *desc”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjWÙh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjSÙubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdÙh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjSÙubh)�”}”(hhh]”j)�”}”(hŒ vm_area_desc”h]”hŒ vm_area_desc”…”�”}”(hjuÙh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjrÙubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jwÙŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj=ÙsbŒc.mmap_action_map_kernel_pages”†”asbuh1hhjSÙubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•Ùh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjSÙubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj£Ùh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjSÙubj)�”}”(hŒdesc”h]”hŒdesc”…”�”}”(hj°Ùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjSÙubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjOÙubj )�”}”(hŒunsigned long start”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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ÅÙubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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ÅÙubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÅÙubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjOÙubj )�”}”(hŒstruct page **pages”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÚubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'Úh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÚubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj8Úh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj5Úubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j:ÚŒmodname”NŒ classname”Njpjs)�”}”jv]”j‘ÙŒc.mmap_action_map_kernel_pages”†”asbuh1hhjÚubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjVÚh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÚubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjdÚh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÚubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjqÚh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÚubj)�”}”(hŒpages”h]”hŒpages”…”�”}”(hj~Úh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÚubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjOÙubj )�”}”(hŒunsigned long nr_pages”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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“Úubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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“Úubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hjÏÚh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj“Úubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjOÙubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÙh²hh³j(Ùh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÙh²hh³j(Ùh´Mubah}”(h]”j Ùah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j(Ùh´MhjÙh²hubj4)�”}”(hhh]”jM)�”}”(hŒ¦helper for mmap_prepare hook to specify that **num** kernel pages contained in the **pages** array should be mapped to userland starting at virtual address **start**.”h]”(hŒ-helper for mmap_prepare hook to specify that ”…”�”}”(hjùÚh²hh³Nh´NubjŽ)�”}”(hŒ**num**”h]”hŒnum”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjùÚubhŒ kernel pages contained in the ”…”�”}”(hjùÚh²hh³Nh´NubjŽ)�”}”(hŒ **pages**”h]”hŒpages”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjùÚubhŒ@ array should be mapped to userland starting at virtual address ”…”�”}”(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´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MhjöÚh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÙh²hh³j(Ùh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjGÛjHjGÛjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX^**Parameters** ``struct vm_area_desc *desc`` The VMA descriptor for the VMA requiring kernel pags to be mapped. ``unsigned long start`` The virtual address from which to map them. ``struct page **pages`` An array of struct page pointers describing the memory to map. ``unsigned long nr_pages`` The number of entries in the **pages** aray.”h]”(jM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M hjKÛubj¤)�”}”(hhh]”(j©)�”}”(hŒa``struct vm_area_desc *desc`` The VMA descriptor for the VMA requiring kernel pags to be mapped. ”h]”(j¯)�”}”(hŒ``struct vm_area_desc *desc``”h]”jS)�”}”(hjpÛh]”hŒstruct vm_area_desc *desc”…”�”}”(hjrÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjnÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M hjjÛubjÉ)�”}”(hhh]”jM)�”}”(hŒBThe VMA descriptor for the VMA requiring kernel pags to be mapped.”h]”hŒBThe VMA descriptor for the VMA requiring kernel pags to be mapped.”…”�”}”(hj‰Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j…Ûh´M hj†Ûubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjjÛubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j…Ûh´M hjgÛubj©)�”}”(hŒD``unsigned long start`` The virtual address from which to map them. ”h]”(j¯)�”}”(hŒ``unsigned long start``”h]”jS)�”}”(hj©Ûh]”hŒunsigned long start”…”�”}”(hj«Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj§Ûubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M hj£ÛubjÉ)�”}”(hhh]”jM)�”}”(hŒ+The virtual address from which to map them.”h]”hŒ+The virtual address from which to map them.”…”�”}”(hjÂÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¾Ûh´M hj¿Ûubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj£Ûubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¾Ûh´M hjgÛubj©)�”}”(hŒW``struct page **pages`` An array of struct page pointers describing the memory to map. ”h]”(j¯)�”}”(hŒ``struct page **pages``”h]”jS)�”}”(hjâÛh]”hŒstruct page **pages”…”�”}”(hjäÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjàÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M hjÜÛubjÉ)�”}”(hhh]”jM)�”}”(hŒ>An array of struct page pointers describing the memory to map.”h]”hŒ>An array of struct page pointers describing the memory to map.”…”�”}”(hjûÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j÷Ûh´M hjøÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÜÛubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j÷Ûh´M hjgÛubj©)�”}”(hŒG``unsigned long nr_pages`` The number of entries in the **pages** aray.”h]”(j¯)�”}”(hŒ``unsigned long nr_pages``”h]”jS)�”}”(hjÜh]”hŒunsigned long nr_pages”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MhjÜubjÉ)�”}”(hhh]”jM)�”}”(hŒ,The number of entries in the **pages** aray.”h]”(hŒThe number of entries in the ”…”�”}”(hj4Üh²hh³Nh´NubjŽ)�”}”(hŒ **pages**”h]”hŒpages”…”�”}”(hj<Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj4ÜubhŒ aray.”…”�”}”(hj4Üh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mhj1Üubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j0Üh´MhjgÛubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjKÛubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ.mmap_action_map_kernel_pages_full (C function)”Œ#c.mmap_action_map_kernel_pages_full”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒWvoid mmap_action_map_kernel_pages_full (struct vm_area_desc *desc, struct page **pages)”h]”hù)�”}”(hŒVvoid mmap_action_map_kernel_pages_full(struct vm_area_desc *desc, struct page **pages)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‡Üh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjƒÜh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–Üh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjƒÜh²hh³j•Üh´Mubhÿ)�”}”(hŒ!mmap_action_map_kernel_pages_full”h]”j)�”}”(hŒ!mmap_action_map_kernel_pages_full”h]”hŒ!mmap_action_map_kernel_pages_full”…”�”}”(hj¨Üh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤Üubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjƒÜh²hh³j•Üh´Mubj )�”}”(hŒ0(struct vm_area_desc *desc, struct page **pages)”h]”(j )�”}”(hŒstruct vm_area_desc *desc”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÄÜh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÀÜubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑÜh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÀÜubh)�”}”(hhh]”j)�”}”(hŒ vm_area_desc”h]”hŒ vm_area_desc”…”�”}”(hjâÜh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjßÜubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jäÜŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljªÜsbŒ#c.mmap_action_map_kernel_pages_full”†”asbuh1hhjÀÜubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(h•jÝh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÀÜubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÀÜubj)�”}”(hŒdesc”h]”hŒdesc”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÀÜubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¼Üubj )�”}”(hŒstruct page **pages”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj6Ýh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj2ÝubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCÝh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj2Ýubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjTÝh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjQÝubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jVÝŒmodname”NŒ classname”Njpjs)�”}”jv]”jþÜŒ#c.mmap_action_map_kernel_pages_full”†”asbuh1hhj2ÝubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrÝh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj2ÝubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj€Ýh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj2ÝubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj�Ýh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj2Ýubj)�”}”(hŒpages”h]”hŒpages”…”�”}”(hjšÝh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2Ýubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¼Üubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjƒÜh²hh³j•Üh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÜh²hh³j•Üh´Mubah}”(h]”jzÜah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j•Üh´Mhj|Üh²hubj4)�”}”(hhh]”jM)�”}”(hŒžhelper for mmap_prepare hook to specify that kernel pages contained in the **pages** array should be mapped to userland from **desc->start** to **desc->end**.”h]”(hŒKhelper for mmap_prepare hook to specify that kernel pages contained in the ”…”�”}”(hjÄÝh²hh³Nh´NubjŽ)�”}”(hŒ **pages**”h]”hŒpages”…”�”}”(hjÌÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÄÝubhŒ) array should be mapped to userland from ”…”�”}”(hjÄÝh²hh³Nh´NubjŽ)�”}”(hŒ**desc->start**”h]”hŒ desc->start”…”�”}”(hjÞÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÄÝubhŒ to ”…”�”}”(hjÄÝh²hh³Nh´NubjŽ)�”}”(hŒ **desc->end**”h]”hŒ desc->end”…”�”}”(hjðÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÄÝubhŒ.”…”�”}”(hjÄÝh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MhjÁÝh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj|Üh²hh³j•Üh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÞjHjÞjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXQ**Parameters** ``struct vm_area_desc *desc`` The VMA descriptor for the VMA requiring kernel pags to be mapped. ``struct page **pages`` An array of struct page pointers describing the memory to map. **Description** The caller must ensure that **pages** contains sufficient entries to cover the entire range described by **desc**.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÞh]”hŒ Parameters”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M"hjÞubj¤)�”}”(hhh]”(j©)�”}”(hŒa``struct vm_area_desc *desc`` The VMA descriptor for the VMA requiring kernel pags to be mapped. ”h]”(j¯)�”}”(hŒ``struct vm_area_desc *desc``”h]”jS)�”}”(hj;Þh]”hŒstruct vm_area_desc *desc”…”�”}”(hj=Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj9Þubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M!hj5ÞubjÉ)�”}”(hhh]”jM)�”}”(hŒBThe VMA descriptor for the VMA requiring kernel pags to be mapped.”h]”hŒBThe VMA descriptor for the VMA requiring kernel pags to be mapped.”…”�”}”(hjTÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jPÞh´M!hjQÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj5Þubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jPÞh´M!hj2Þubj©)�”}”(hŒW``struct page **pages`` An array of struct page pointers describing the memory to map. ”h]”(j¯)�”}”(hŒ``struct page **pages``”h]”jS)�”}”(hjtÞh]”hŒstruct page **pages”…”�”}”(hjvÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjrÞubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M"hjnÞubjÉ)�”}”(hhh]”jM)�”}”(hŒ>An array of struct page pointers describing the memory to map.”h]”hŒ>An array of struct page pointers describing the memory to map.”…”�”}”(hj�Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‰Þh´M"hjŠÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjnÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‰Þh´M"hj2Þubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÞubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj¯Þh]”hŒ Description”…”�”}”(hj±Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj­Þubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M$hjÞubjM)�”}”(hŒrThe caller must ensure that **pages** contains sufficient entries to cover the entire range described by **desc**.”h]”(hŒThe caller must ensure that ”…”�”}”(hjÅÞh²hh³Nh´NubjŽ)�”}”(hŒ **pages**”h]”hŒpages”…”�”}”(hjÍÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÅÞubhŒD contains sufficient entries to cover the entire range described by ”…”�”}”(hjÅÞh²hh³Nh´NubjŽ)�”}”(hŒ**desc**”h]”hŒdesc”…”�”}”(hjßÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÅÞubhŒ.”…”�”}”(hjÅÞh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒrange_is_subset (C function)”Œc.range_is_subset”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ}bool range_is_subset (unsigned long outer_start, unsigned long outer_end, unsigned long inner_start, unsigned long inner_end)”h]”hù)�”}”(hŒ|bool range_is_subset(unsigned long outer_start, unsigned long outer_end, unsigned long inner_start, unsigned long inner_end)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjßh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M?ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&ßh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjßh²hh³j%ßh´M?ubhÿ)�”}”(hŒrange_is_subset”h]”j)�”}”(hŒrange_is_subset”h]”hŒrange_is_subset”…”�”}”(hj8ßh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4ßubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjßh²hh³j%ßh´M?ubj )�”}”(hŒh(unsigned long outer_start, unsigned long outer_end, unsigned long inner_start, unsigned long inner_end)”h]”(j )�”}”(hŒunsigned long outer_start”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjTßh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjPßubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbßh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjPßubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjpßh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjPßubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~ßh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjPßubj)�”}”(hŒ outer_start”h]”hŒ outer_start”…”�”}”(hjŒßh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjPßubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjLßubj )�”}”(hŒunsigned long outer_end”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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¡ßubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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¡ßubj)�”}”(hŒ outer_end”h]”hŒ outer_end”…”�”}”(hjÝßh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¡ßubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjLßubj )�”}”(hŒunsigned long inner_start”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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òßubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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òßubj)�”}”(hŒ inner_start”h]”hŒ inner_start”…”�”}”(hj.àh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjòßubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjLßubj )�”}”(hŒunsigned long inner_end”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjGàh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjCàubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUàh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjCàubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjcàh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjCàubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqàh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjCàubj)�”}”(hŒ inner_end”h]”hŒ inner_end”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjCàubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjLßubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjßh²hh³j%ßh´M?ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjßh²hh³j%ßh´M?ubah}”(h]”j ßah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j%ßh´M?hj ßh²hubj4)�”}”(hhh]”jM)�”}”(hŒ9Is the specified inner range a subset of the outer range?”h]”hŒ9Is the specified inner range a subset of the outer range?”…”�”}”(hj©àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M?hj¦àh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj ßh²hh³j%ßh´M?ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÁàjHjÁàjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX†**Parameters** ``unsigned long outer_start`` The start of the outer range. ``unsigned long outer_end`` The exclusive end of the outer range. ``unsigned long inner_start`` The start of the inner range. ``unsigned long inner_end`` The exclusive end of the inner range. **Return** ``true`` if [inner_start, inner_end) is a subset of [outer_start, outer_end), otherwise ``false``.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjËàh]”hŒ Parameters”…”�”}”(hjÍàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÉàubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MChjÅàubj¤)�”}”(hhh]”(j©)�”}”(hŒ<``unsigned long outer_start`` The start of the outer range. ”h]”(j¯)�”}”(hŒ``unsigned long outer_start``”h]”jS)�”}”(hjêàh]”hŒunsigned long outer_start”…”�”}”(hjìàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjèàubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M@hjäàubjÉ)�”}”(hhh]”jM)�”}”(hŒThe start of the outer range.”h]”hŒThe start of the outer range.”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÿàh´M@hjáubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjäàubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÿàh´M@hjáàubj©)�”}”(hŒB``unsigned long outer_end`` The exclusive end of the outer range. ”h]”(j¯)�”}”(hŒ``unsigned long outer_end``”h]”jS)�”}”(hj#áh]”hŒunsigned long outer_end”…”�”}”(hj%áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj!áubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MAhjáubjÉ)�”}”(hhh]”jM)�”}”(hŒ%The exclusive end of the outer range.”h]”hŒ%The exclusive end of the outer range.”…”�”}”(hj<áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j8áh´MAhj9áubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjáubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j8áh´MAhjáàubj©)�”}”(hŒ<``unsigned long inner_start`` The start of the inner range. ”h]”(j¯)�”}”(hŒ``unsigned long inner_start``”h]”jS)�”}”(hj\áh]”hŒunsigned long inner_start”…”�”}”(hj^áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjZáubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MBhjVáubjÉ)�”}”(hhh]”jM)�”}”(hŒThe start of the inner range.”h]”hŒThe start of the inner range.”…”�”}”(hjuáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jqáh´MBhjráubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjVáubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jqáh´MBhjáàubj©)�”}”(hŒB``unsigned long inner_end`` The exclusive end of the inner range. ”h]”(j¯)�”}”(hŒ``unsigned long inner_end``”h]”jS)�”}”(hj•áh]”hŒunsigned long inner_end”…”�”}”(hj—áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj“áubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MChj�áubjÉ)�”}”(hhh]”jM)�”}”(hŒ%The exclusive end of the inner range.”h]”hŒ%The exclusive end of the inner range.”…”�”}”(hj®áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jªáh´MChj«áubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�áubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jªáh´MChjáàubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÅàubjM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MEhjÅàubjM)�”}”(hŒb``true`` if [inner_start, inner_end) is a subset of [outer_start, outer_end), otherwise ``false``.”h]”(jS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjêáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjæáubhŒP if [inner_start, inner_end) is a subset of [outer_start, outer_end), otherwise ”…”�”}”(hjæáh²hh³Nh´NubjS)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjüáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjæáubhŒ.”…”�”}”(hjæáh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MEhjÅàubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒrange_in_vma (C function)”Œc.range_in_vma”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ\bool range_in_vma (const struct vm_area_struct *vma, unsigned long start, unsigned long end)”h]”hù)�”}”(hŒ[bool range_in_vma(const struct vm_area_struct *vma, unsigned long start, unsigned long end)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hj5âh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj1âh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MQubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCâh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj1âh²hh³jBâh´MQubhÿ)�”}”(hŒ range_in_vma”h]”j)�”}”(hŒ range_in_vma”h]”hŒ range_in_vma”…”�”}”(hjUâh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjQâubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj1âh²hh³jBâh´MQubj )�”}”(hŒJ(const struct vm_area_struct *vma, unsigned long start, unsigned long end)”h]”(j )�”}”(hŒ const struct vm_area_struct *vma”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjqâh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjmâubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~âh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjmâubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjŒâh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjmâubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™âh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjmâubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjªâh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj§âubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¬âŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljWâsbŒc.range_in_vma”†”asbuh1hhjmâubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊâh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjmâubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjØâh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjmâubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjåâh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjmâubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjiâubj )�”}”(hŒunsigned long start”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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úâubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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úâubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj6ãh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjúâubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjiâubj )�”}”(hŒunsigned long end”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjOãh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjKãubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]ãh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjKãubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjkãh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjKãubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyãh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjKãubj)�”}”(hŒend”h]”hŒend”…”�”}”(hj‡ãh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjKãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjiâubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj1âh²hh³jBâh´MQubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj-âh²hh³jBâh´MQubah}”(h]”j(âah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jBâh´MQhj*âh²hubj4)�”}”(hhh]”jM)�”}”(hŒ@is the specified [**start**, **end**) range a subset of the VMA?”h]”(hŒis the specified [”…”�”}”(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Œ**end**”h]”hŒend”…”�”}”(hjËãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj±ãubhŒ) range a subset of the VMA?”…”�”}”(hj±ãh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MQhj®ãh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj*âh²hh³jBâh´MQubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjíãjHjíãjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXy**Parameters** ``const struct vm_area_struct *vma`` The VMA against which we want to check [**start**, **end**). ``unsigned long start`` The start of the range we wish to check. ``unsigned long end`` The exclusive end of the range we wish to check. **Return** ``true`` if [**start**, **end**) is a subset of [**vma->vm_start**, **vma->vm_end**), ``false`` otherwise.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj÷ãh]”hŒ Parameters”…”�”}”(hjùãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjõãubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MUhjñãubj¤)�”}”(hhh]”(j©)�”}”(hŒb``const struct vm_area_struct *vma`` The VMA against which we want to check [**start**, **end**). ”h]”(j¯)�”}”(hŒ$``const struct vm_area_struct *vma``”h]”jS)�”}”(hjäh]”hŒ const struct vm_area_struct *vma”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjäubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MRhjäubjÉ)�”}”(hhh]”jM)�”}”(hŒvm_start**, **vma->vm_end**), ``false`` otherwise.”h]”(jS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjýäubhŒ if [”…”�”}”(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Œ**end**”h]”hŒend”…”�”}”(hj%åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjýäubhŒ) is a subset of [”…”�”}”(hjýäh²hh³Nh´NubjŽ)�”}”(hŒ**vma->vm_start**”h]”hŒ vma->vm_start”…”�”}”(hj7åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjýäubhŒ, ”…”�”}”(hjýäh²hh³Nh´NubjŽ)�”}”(hŒ**vma->vm_end**”h]”hŒ vma->vm_end”…”�”}”(hjIåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjýäubhŒ), ”…”�”}”(hjýäh²hh³Nh´NubjS)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj[åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjýäubhŒ otherwise.”…”�”}”(hjýäh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MVhjñãubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒrange_in_vma_desc (C function)”Œc.range_in_vma_desc”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ`bool range_in_vma_desc (const struct vm_area_desc *desc, unsigned long start, unsigned long end)”h]”hù)�”}”(hŒ_bool range_in_vma_desc(const struct vm_area_desc *desc, unsigned long start, unsigned long end)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hj”åh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj�åh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´McubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢åh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�åh²hh³j¡åh´Mcubhÿ)�”}”(hŒrange_in_vma_desc”h]”j)�”}”(hŒrange_in_vma_desc”h]”hŒrange_in_vma_desc”…”�”}”(hj´åh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj°åubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj�åh²hh³j¡åh´Mcubj )�”}”(hŒI(const struct vm_area_desc *desc, unsigned long start, unsigned long end)”h]”(j )�”}”(hŒconst struct vm_area_desc *desc”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjÐåh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÌåubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝåh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÌåubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjëåh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÌåubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjøåh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÌåubh)�”}”(hhh]”j)�”}”(hŒ vm_area_desc”h]”hŒ vm_area_desc”…”�”}”(hj æh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjæubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j æŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj¶åsbŒc.range_in_vma_desc”†”asbuh1hhjÌåubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)æh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÌåubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj7æh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÌåubj)�”}”(hŒdesc”h]”hŒdesc”…”�”}”(hjDæh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÌåubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÈåubj )�”}”(hŒunsigned long start”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj]æh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjYæubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkæh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjYæubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjyæh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjYæubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡æh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjYæubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj•æh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjYæubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÈåubj )�”}”(hŒunsigned long end”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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ªæubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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ªæubj)�”}”(hŒend”h]”hŒend”…”�”}”(hjææh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjªæubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÈåubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj�åh²hh³j¡åh´Mcubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjŒåh²hh³j¡åh´Mcubah}”(h]”j‡åah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¡åh´Mchj‰åh²hubj4)�”}”(hhh]”jM)�”}”(hŒhis the specified [**start**, **end**) range a subset of the VMA described by **desc**, a VMA descriptor?”h]”(hŒis the specified [”…”�”}”(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Œ**end**”h]”hŒend”…”�”}”(hj*çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjçubhŒ)) range a subset of the VMA described by ”…”�”}”(hjçh²hh³Nh´NubjŽ)�”}”(hŒ**desc**”h]”hŒdesc”…”�”}”(hj<çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjçubhŒ, a VMA descriptor?”…”�”}”(hjçh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mchj çh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj‰åh²hh³j¡åh´Mcubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj^çjHj^çjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``const struct vm_area_desc *desc`` The VMA descriptor against which we want to check [**start**, **end**). ``unsigned long start`` The start of the range we wish to check. ``unsigned long end`` The exclusive end of the range we wish to check. **Return** ``true`` if [**start**, **end**) is a subset of [**desc->start**, **desc->end**), ``false`` otherwise.”h]”(jM)�”}”(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&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mghjbçubj¤)�”}”(hhh]”(j©)�”}”(hŒl``const struct vm_area_desc *desc`` The VMA descriptor against which we want to check [**start**, **end**). ”h]”(j¯)�”}”(hŒ#``const struct vm_area_desc *desc``”h]”jS)�”}”(hj‡çh]”hŒconst struct vm_area_desc *desc”…”�”}”(hj‰çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj…çubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mehj�çubjÉ)�”}”(hhh]”jM)�”}”(hŒGThe VMA descriptor against which we want to check [**start**, **end**).”h]”(hŒ3The VMA descriptor against which we want to check [”…”�”}”(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Œ**end**”h]”hŒend”…”�”}”(hjºçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj çubhŒ).”…”�”}”(hj çh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jœçh´Mehj�çubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�çubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jœçh´Mehj~çubj©)�”}”(hŒA``unsigned long start`` The start of the range we wish to check. ”h]”(j¯)�”}”(hŒ``unsigned long start``”h]”jS)�”}”(hjäçh]”hŒunsigned long start”…”�”}”(hjæçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjâçubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MfhjÞçubjÉ)�”}”(hhh]”jM)�”}”(hŒ(The start of the range we wish to check.”h]”hŒ(The start of the range we wish to check.”…”�”}”(hjýçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jùçh´Mfhjúçubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÞçubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jùçh´Mfhj~çubj©)�”}”(hŒG``unsigned long end`` The exclusive end of the range we wish to check. ”h]”(j¯)�”}”(hŒ``unsigned long end``”h]”jS)�”}”(hjèh]”hŒunsigned long end”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjèubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MghjèubjÉ)�”}”(hhh]”jM)�”}”(hŒ0The exclusive end of the range we wish to check.”h]”hŒ0The exclusive end of the range we wish to check.”…”�”}”(hj6èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j2èh´Mghj3èubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjèubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j2èh´Mghj~çubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjbçubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjXèh]”hŒReturn”…”�”}”(hjZèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjVèubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MihjbçubjM)�”}”(hŒf``true`` if [**start**, **end**) is a subset of [**desc->start**, **desc->end**), ``false`` otherwise.”h]”(jS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjrèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjnèubhŒ if [”…”�”}”(hjnèh²hh³Nh´NubjŽ)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hj„èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjnèubhŒ, ”…”�”}”(hjnèh²hh³Nh´NubjŽ)�”}”(hŒ**end**”h]”hŒend”…”�”}”(hj–èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjnèubhŒ) is a subset of [”…”�”}”(hjnèh²hh³Nh´NubjŽ)�”}”(hŒ**desc->start**”h]”hŒ desc->start”…”�”}”(hj¨èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjnèubhŒ, ”…”�”}”hjnèsbjŽ)�”}”(hŒ **desc->end**”h]”hŒ desc->end”…”�”}”(hjºèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjnèubhŒ), ”…”�”}”(hjnèh²hh³Nh´NubjS)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjÌèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjnèubhŒ otherwise.”…”�”}”(hjnèh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´Mihjbçubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒclear_pages (C function)”Œ c.clear_pages”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ2void clear_pages (void *addr, unsigned int npages)”h]”hù)�”}”(hŒ1void clear_pages(void *addr, unsigned int npages)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjéh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M¿ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjéh²hh³jéh´M¿ubhÿ)�”}”(hŒ clear_pages”h]”j)�”}”(hŒ clear_pages”h]”hŒ clear_pages”…”�”}”(hj&éh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj"éubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjéh²hh³jéh´M¿ubj )�”}”(hŒ!(void *addr, unsigned int npages)”h]”(j )�”}”(hŒ void *addr”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjBéh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj>éubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPéh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj>éubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj^éh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj>éubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjkéh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>éubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj:éubj )�”}”(hŒunsigned int npages”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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€éubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(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€éubj)�”}”(hŒnpages”h]”hŒnpages”…”�”}”(hj¼éh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj€éubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj:éubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjéh²hh³jéh´M¿ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjýèh²hh³jéh´M¿ubah}”(h]”jøèah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jéh´M¿hjúèh²hubj4)�”}”(hhh]”jM)�”}”(hŒ+clear a page range for kernel-internal use.”h]”hŒ+clear a page range for kernel-internal use.”…”�”}”(hjæéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´M¿hjãéh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjúèh²hh³jéh´M¿ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjþéjHjþéjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX¢**Parameters** ``void *addr`` start address ``unsigned int npages`` number of pages **Description** Use clear_user_pages() instead when clearing a page range to be mapped to user space. Does absolutely no exception handling. Note that even though the clearing operation is preemptible, clear_pages() does not (and on architectures where it reduces to a few long-running instructions, might not be able to) call cond_resched() to check if rescheduling is required. When running under preemptible models this is not a problem. Under cooperatively scheduled models, however, the caller is expected to limit **npages** to no more than PROCESS_PAGES_NON_PREEMPT_BATCH.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjêh]”hŒ Parameters”…”�”}”(hj êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÃhjêubj¤)�”}”(hhh]”(j©)�”}”(hŒ``void *addr`` start address ”h]”(j¯)�”}”(hŒ``void *addr``”h]”jS)�”}”(hj'êh]”hŒ void *addr”…”�”}”(hj)êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj%êubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÀhj!êubjÉ)�”}”(hhh]”jM)�”}”(hŒ start address”h]”hŒ start address”…”�”}”(hj@êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j<êh´MÀhj=êubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj!êubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j<êh´MÀhjêubj©)�”}”(hŒ(``unsigned int npages`` number of pages ”h]”(j¯)�”}”(hŒ``unsigned int npages``”h]”jS)�”}”(hj`êh]”hŒunsigned int npages”…”�”}”(hjbêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj^êubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÁhjZêubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages”h]”hŒnumber of pages”…”�”}”(hjyêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³juêh´MÁhjvêubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjZêubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³juêh´MÁhjêubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjêubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj›êh]”hŒ Description”…”�”}”(hj�êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj™êubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÃhjêubjM)�”}”(hŒUUse clear_user_pages() instead when clearing a page range to be mapped to user space.”h]”hŒUUse clear_user_pages() instead when clearing a page range to be mapped to user space.”…”�”}”(hj±êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÂhjêubjM)�”}”(hŒ&Does absolutely no exception handling.”h]”hŒ&Does absolutely no exception handling.”…”�”}”(hjÀêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÅhjêubjM)�”}”(hŒîNote that even though the clearing operation is preemptible, clear_pages() does not (and on architectures where it reduces to a few long-running instructions, might not be able to) call cond_resched() to check if rescheduling is required.”h]”hŒîNote that even though the clearing operation is preemptible, clear_pages() does not (and on architectures where it reduces to a few long-running instructions, might not be able to) call cond_resched() to check if rescheduling is required.”…”�”}”(hjÏêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.h”h´MÇhjêubjM)�”}”(hŒÇWhen running under preemptible models this is not a problem. Under cooperatively scheduled models, however, the caller is expected to limit **npages** to no more than PROCESS_PAGES_NON_PREEMPT_BATCH.”h]”(hŒŒWhen running under preemptible models this is not a problem. Under cooperatively scheduled models, however, the caller is expected to limit ”…”�”}”(hjÞêh²hh³Nh´NubjŽ)�”}”(hŒ **npages**”h]”hŒnpages”…”�”}”(hjæêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÞêubhŒ1 to no more than PROCESS_PAGES_NON_PREEMPT_BATCH.”…”�”}”(hjÞêh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:107: ./include/linux/mm.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”]”(héŒfolio_ref_count (C function)”Œc.folio_ref_count”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ/int folio_ref_count (const struct folio *folio)”h]”hù)�”}”(hŒ.int folio_ref_count(const struct folio *folio)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjëh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:109: ./include/linux/page_ref.h”h´KGubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.ëh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjëh²hh³j-ëh´KGubhÿ)�”}”(hŒfolio_ref_count”h]”j)�”}”(hŒfolio_ref_count”h]”hŒfolio_ref_count”…”�”}”(hj@ëh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj<ëubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjëh²hh³j-ëh´KGubj )�”}”(hŒ(const struct folio *folio)”h]”j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj\ëh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjXëubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjiëh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjXëubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjwëh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjXëubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„ëh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjXëubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj•ëh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj’ëubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j—ëŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljBësbŒc.folio_ref_count”†”asbuh1hhjXëubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµëh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjXëubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÃëh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjXëubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÐëh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjXëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjTëubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjëh²hh³j-ëh´KGubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjëh²hh³j-ëh´KGubah}”(h]”jëah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j-ëh´KGhjëh²hubj4)�”}”(hhh]”jM)�”}”(hŒ"The reference count on this folio.”h]”hŒ"The reference count on this folio.”…”�”}”(hjúëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:109: ./include/linux/page_ref.h”h´KGhj÷ëh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjëh²hh³j-ëh´KGubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjìjHjìjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX“**Parameters** ``const struct folio *folio`` The folio. **Description** Folios contain a reference count. When that reference count reaches zero, the folio is referred to as frozen. At this point, it will usually be returned to the memory allocator, but some parts of the kernel freeze folios in order to perform unusual operations on them such as splitting or migration. The refcount is usually incremented by calls to folio_get() and decremented by calls to folio_put(). Some typical users of the folio refcount: - Each reference from a page table - The page cache - Filesystem private data - The LRU list - Pipes - Direct IO which references this page in the process address space The reference count has three components: expected, temporary and spurious. The expected reference count of a folio is that which we would logically expect it to be from just reading the code. Temporary refcounts are gained by threads which need a temporary reference to make sure the folio isn't reallocated while they use it. Spurious refcounts are gained by threads which, thanks to RCU walks of the page tables or file cache, find a stale pointer to a folio. These threads will drop the refcount after discoveering the pointer is stale, but it can surprise other users to see the spurious refcount on a freshly allocated folio (eg they may see a refcount of 2 instead of 1). **Return** The number of references to this folio.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjìh]”hŒ Parameters”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjìubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:109: ./include/linux/page_ref.h”h´KKhjìubj¤)�”}”(hhh]”j©)�”}”(hŒ)``const struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hj;ìh]”hŒconst struct folio *folio”…”�”}”(hj=ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj9ìubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:109: ./include/linux/page_ref.h”h´KHhj5ìubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hjTìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jPìh´KHhjQìubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj5ìubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jPìh´KHhj2ìubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjìubjM)�”}”(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&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:109: ./include/linux/page_ref.h”h´KJhjìubjM)�”}”(hX-Folios contain a reference count. When that reference count reaches zero, the folio is referred to as frozen. At this point, it will usually be returned to the memory allocator, but some parts of the kernel freeze folios in order to perform unusual operations on them such as splitting or migration.”h]”hX-Folios contain a reference count. When that reference count reaches zero, the folio is referred to as frozen. At this point, it will usually be returned to the memory allocator, but some parts of the kernel freeze folios in order to perform unusual operations on them such as splitting or migration.”…”�”}”(hjŒìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:109: ./include/linux/page_ref.h”h´KIhjìubjM)�”}”(hŒ�The refcount is usually incremented by calls to folio_get() and decremented by calls to folio_put(). Some typical users of the folio refcount:”h]”hŒ�The refcount is usually incremented by calls to folio_get() and decremented by calls to folio_put(). Some typical users of the folio refcount:”…”�”}”(hj›ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:109: ./include/linux/page_ref.h”h´KOhjìubjaW)�”}”(hhh]”(jÕ/)�”}”(hŒ Each reference from a page table”h]”jM)�”}”(hj¯ìh]”hŒ Each reference from a page table”…”�”}”(hj±ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:109: ./include/linux/page_ref.h”h´KShj­ìubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjªìubjÕ/)�”}”(hŒThe page cache”h]”jM)�”}”(hjÇìh]”hŒThe page cache”…”�”}”(hjÉìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:109: ./include/linux/page_ref.h”h´KThjÅìubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjªìubjÕ/)�”}”(hŒFilesystem private data”h]”jM)�”}”(hjßìh]”hŒFilesystem private data”…”�”}”(hjáìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:109: ./include/linux/page_ref.h”h´KUhjÝìubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjªìubjÕ/)�”}”(hŒ The LRU list”h]”jM)�”}”(hj÷ìh]”hŒ The LRU list”…”�”}”(hjùìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:109: ./include/linux/page_ref.h”h´KVhjõìubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjªìubjÕ/)�”}”(hŒPipes”h]”jM)�”}”(hjíh]”hŒPipes”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:109: ./include/linux/page_ref.h”h´KWhj íubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjªìubjÕ/)�”}”(hŒBDirect IO which references this page in the process address space ”h]”jM)�”}”(hŒADirect IO which references this page in the process address space”h]”hŒADirect IO which references this page in the process address space”…”�”}”(hj)íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:109: ./include/linux/page_ref.h”h´KXhj%íubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjªìubeh}”(h]”h ]”h"]”h$]”h&]”jƒWj„Wuh1j`Wh³j¾ìh´KShjìubjM)�”}”(hX§The reference count has three components: expected, temporary and spurious. The expected reference count of a folio is that which we would logically expect it to be from just reading the code. Temporary refcounts are gained by threads which need a temporary reference to make sure the folio isn't reallocated while they use it. Spurious refcounts are gained by threads which, thanks to RCU walks of the page tables or file cache, find a stale pointer to a folio. These threads will drop the refcount after discoveering the pointer is stale, but it can surprise other users to see the spurious refcount on a freshly allocated folio (eg they may see a refcount of 2 instead of 1).”h]”hX©The reference count has three components: expected, temporary and spurious. The expected reference count of a folio is that which we would logically expect it to be from just reading the code. Temporary refcounts are gained by threads which need a temporary reference to make sure the folio isn’t reallocated while they use it. Spurious refcounts are gained by threads which, thanks to RCU walks of the page tables or file cache, find a stale pointer to a folio. These threads will drop the refcount after discoveering the pointer is stale, but it can surprise other users to see the spurious refcount on a freshly allocated folio (eg they may see a refcount of 2 instead of 1).”…”�”}”(hjDíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:109: ./include/linux/page_ref.h”h´KZhjìubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjUíh]”hŒReturn”…”�”}”(hjWíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjSíubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:109: ./include/linux/page_ref.h”h´KfhjìubjM)�”}”(hŒ'The number of references to this folio.”h]”hŒ'The number of references to this folio.”…”�”}”(hjkíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:109: ./include/linux/page_ref.h”h´Kghjìubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_try_get (C function)”Œc.folio_try_get”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ(bool folio_try_get (struct folio *folio)”h]”hù)�”}”(hŒ'bool folio_try_get(struct folio *folio)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjšíh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj–íh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:109: ./include/linux/page_ref.h”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨íh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj–íh²hh³j§íh´Mubhÿ)�”}”(hŒ folio_try_get”h]”j)�”}”(hŒ folio_try_get”h]”hŒ folio_try_get”…”�”}”(hjºíh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¶íubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj–íh²hh³j§íh´Mubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÖíh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÒíubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãíh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÒíubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjôíh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñíubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jöíŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj¼ísbŒc.folio_try_get”†”asbuh1hhjÒíubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÒíubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj"îh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÒíubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj/îh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÒíubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÎíubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj–íh²hh³j§íh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj’íh²hh³j§íh´Mubah}”(h]”j�íah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j§íh´Mhj�íh²hubj4)�”}”(hhh]”jM)�”}”(hŒ,Attempt to increase the refcount on a folio.”h]”hŒ,Attempt to increase the refcount on a folio.”…”�”}”(hjYîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:109: ./include/linux/page_ref.h”h´MhjVîh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj�íh²hh³j§íh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjqîjHjqîjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX„**Parameters** ``struct folio *folio`` The folio. **Description** If you do not already have a reference to a folio, you can attempt to get one using this function. It may fail if, for example, the folio has been freed since you found a pointer to it, or it is frozen for the purposes of splitting or migration. **Return** True if the reference count was successfully incremented.”h]”(jM)�”}”(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&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:109: ./include/linux/page_ref.h”h´M hjuîubj¤)�”}”(hhh]”j©)�”}”(hŒ#``struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjšîh]”hŒstruct folio *folio”…”�”}”(hjœîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj˜îubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:109: ./include/linux/page_ref.h”h´M hj”îubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hj³îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¯îh´M hj°îubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj”îubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¯îh´M hj‘îubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjuîubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÕîh]”hŒ Description”…”�”}”(hj×îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÓîubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:109: ./include/linux/page_ref.h”h´M hjuîubjM)�”}”(hŒöIf you do not already have a reference to a folio, you can attempt to get one using this function. It may fail if, for example, the folio has been freed since you found a pointer to it, or it is frozen for the purposes of splitting or migration.”h]”hŒöIf you do not already have a reference to a folio, you can attempt to get one using this function. It may fail if, for example, the folio has been freed since you found a pointer to it, or it is frozen for the purposes of splitting or migration.”…”�”}”(hjëîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:109: ./include/linux/page_ref.h”h´M hjuîubjM)�”}”(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&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:109: ./include/linux/page_ref.h”h´MhjuîubjM)�”}”(hŒ9True if the reference count was successfully incremented.”h]”hŒ9True if the reference count was successfully incremented.”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:109: ./include/linux/page_ref.h”h´Mhjuîubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒis_highmem (C function)”Œ c.is_highmem”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ(int is_highmem (const struct zone *zone)”h]”hù)�”}”(hŒ'int is_highmem(const struct zone *zone)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjAïh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj=ïh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MÒubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPïh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj=ïh²hh³jOïh´MÒubhÿ)�”}”(hŒ is_highmem”h]”j)�”}”(hŒ is_highmem”h]”hŒ is_highmem”…”�”}”(hjbïh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj^ïubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj=ïh²hh³jOïh´MÒubj )�”}”(hŒ(const struct zone *zone)”h]”j )�”}”(hŒconst struct zone *zone”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj~ïh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjzïubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹ïh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjzïubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj™ïh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjzïubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦ïh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjzïubh)�”}”(hhh]”j)�”}”(hŒzone”h]”hŒzone”…”�”}”(hj·ïh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj´ïubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¹ïŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljdïsbŒ c.is_highmem”†”asbuh1hhjzïubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×ïh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjzïubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjåïh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjzïubj)�”}”(hŒzone”h]”hŒzone”…”�”}”(hjòïh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjzïubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjvïubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj=ïh²hh³jOïh´MÒubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj9ïh²hh³jOïh´MÒubah}”(h]”j4ïah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jOïh´MÒhj6ïh²hubj4)�”}”(hhh]”jM)�”}”(hŒ°helper function to quickly check if a struct zone is a highmem zone or not. This is an attempt to keep references to ZONE_{DMA/NORMAL/HIGHMEM/etc} in general code to a minimum.”h]”hŒ°helper function to quickly check if a struct zone is a highmem zone or not. This is an attempt to keep references to ZONE_{DMA/NORMAL/HIGHMEM/etc} in general code to a minimum.”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MÒhjðh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj6ïh²hh³jOïh´MÒubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj4ðjHj4ðjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ|**Parameters** ``const struct zone *zone`` pointer to struct zone variable **Return** 1 for a highmem zone, 0 otherwise”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj>ðh]”hŒ Parameters”…”�”}”(hj@ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj<ðubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MÖhj8ðubj¤)�”}”(hhh]”j©)�”}”(hŒ<``const struct zone *zone`` pointer to struct zone variable ”h]”(j¯)�”}”(hŒ``const struct zone *zone``”h]”jS)�”}”(hj]ðh]”hŒconst struct zone *zone”…”�”}”(hj_ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj[ðubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MÕhjWðubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to struct zone variable”h]”hŒpointer to struct zone variable”…”�”}”(hjvðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jrðh´MÕhjsðubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjWðubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jrðh´MÕhjTðubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj8ðubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´M×hj8ðubjM)�”}”(hŒ!1 for a highmem zone, 0 otherwise”h]”hŒ!1 for a highmem zone, 0 otherwise”…”�”}”(hj®ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MÖhj8ðubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfor_each_online_pgdat (C macro)”Œc.for_each_online_pgdat”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒfor_each_online_pgdat”h]”hù)�”}”(hŒfor_each_online_pgdat”h]”hÿ)�”}”(hŒfor_each_online_pgdat”h]”j)�”}”(hj×ðh]”hŒfor_each_online_pgdat”…”�”}”(hjáðh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÝðubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÙðh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´Mûubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÕðh²hh³jôðh´Mûubah}”(h]”jÐðah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jôðh´MûhjÒðh²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÒðh²hh³jôðh´Mûubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGj ñjHj ñjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´NubjM)�”}”(hŒ!``for_each_online_pgdat (pgdat)``”h]”jS)�”}”(hjñh]”hŒfor_each_online_pgdat (pgdat)”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjñubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MýhjÞÁh²hubji)�”}”(hŒ.helper macro to iterate over all online nodes ”h]”jM)�”}”(hŒ-helper macro to iterate over all online nodes”h]”hŒ-helper macro to iterate over all online nodes”…”�”}”(hj-ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´Mûhj)ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j;ñh´MûhjÞÁh²hubj„)�”}”(hŒ;**Parameters** ``pgdat`` pointer to a pg_data_t variable”h]”(jM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MÿhjBñubj¤)�”}”(hhh]”j©)�”}”(hŒ)``pgdat`` pointer to a pg_data_t variable”h]”(j¯)�”}”(hŒ ``pgdat``”h]”jS)�”}”(hjgñh]”hŒpgdat”…”�”}”(hjiñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjeñubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MhjañubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to a pg_data_t variable”h]”hŒpointer to a pg_data_t variable”…”�”}”(hj€ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´Mühj}ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjañubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j|ñh´Mhj^ñubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjBñubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfor_each_zone (C macro)”Œc.for_each_zone”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ for_each_zone”h]”hù)�”}”(hŒ for_each_zone”h]”hÿ)�”}”(hŒ for_each_zone”h]”j)�”}”(hj»ñh]”hŒ for_each_zone”…”�”}”(hjÅñh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÁñubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj½ñh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¹ñh²hh³jØñh´Mubah}”(h]”j´ñah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jØñh´Mhj¶ñh²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¶ñh²hh³jØñh´Mubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGjññjHjññjI‰jJ‰jK‰u•<h1híh²hhjÞÁh³Nh´NubjM)�”}”(hŒ``for_each_zone (zone)``”h]”jS)�”}”(hj÷ñh]”hŒfor_each_zone (zone)”…”�”}”(hjùñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjõñubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MhjÞÁh²hubji)�”}”(hŒ.helper macro to iterate over all memory zones ”h]”jM)�”}”(hŒ-helper macro to iterate over all memory zones”h]”hŒ-helper macro to iterate over all memory zones”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´Mhj òubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jòh´MhjÞÁh²hubj„)�”}”(hŒ™**Parameters** ``zone`` pointer to struct zone variable **Description** The user only needs to declare the zone variable, for_each_zone fills it in.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj,òh]”hŒ Parameters”…”�”}”(hj.òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj*òubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´Mhj&òubj¤)�”}”(hhh]”j©)�”}”(hŒ)``zone`` pointer to struct zone variable ”h]”(j¯)�”}”(hŒ``zone``”h]”jS)�”}”(hjKòh]”hŒzone”…”�”}”(hjMòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjIòubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MhjEòubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to struct zone variable”h]”hŒpointer to struct zone variable”…”�”}”(hjdòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j`òh´Mhjaòubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjEòubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j`òh´MhjBòubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj&òubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj†òh]”hŒ Description”…”�”}”(hjˆòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj„òubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´Mhj&òubjM)�”}”(hŒLThe user only needs to declare the zone variable, for_each_zone fills it in.”h]”hŒLThe user only needs to declare the zone variable, for_each_zone fills it in.”…”�”}”(hjœòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´Mhj&òubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ next_zones_zonelist (C function)”Œc.next_zones_zonelist”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒqstruct zoneref * next_zones_zonelist (struct zoneref *z, enum zone_type highest_zoneidx, const nodemask_t *nodes)”h]”hù)�”}”(hŒostruct zoneref *next_zones_zonelist(struct zoneref *z, enum zone_type highest_zoneidx, const nodemask_t *nodes)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjËòh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÇòh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´M*ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙòh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÇòh²hh³jØòh´M*ubh)�”}”(hhh]”j)�”}”(hŒzoneref”h]”hŒzoneref”…”�”}”(hjêòh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjçòubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jìòŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒnext_zones_zonelist”sbŒc.next_zones_zonelist”†”asbuh1hhjÇòh²hh³jØòh´M*ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj óh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÇòh²hh³jØòh´M*ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÇòh²hh³jØòh´M*ubhÿ)�”}”(hŒnext_zones_zonelist”h]”j)�”}”(hjóh]”hŒnext_zones_zonelist”…”�”}”(hj*óh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj&óubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÇòh²hh³jØòh´M*ubj )�”}”(hŒL(struct zoneref *z, enum zone_type highest_zoneidx, const nodemask_t *nodes)”h]”(j )�”}”(hŒstruct zoneref *z”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjEóh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjAóubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRóh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjAóubh)�”}”(hhh]”j)�”}”(hŒzoneref”h]”hŒzoneref”…”�”}”(hjcóh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj`óubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jeóŒmodname”NŒ classname”Njpjs)�”}”jv]”jóŒc.next_zones_zonelist”†”asbuh1hhjAóubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�óh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjAóubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj�óh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjAóubj)�”}”(hŒz”h]”hŒz”…”�”}”(hjœóh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjAóubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj=óubj )�”}”(hŒenum zone_type highest_zoneidx”h]”(j5)�”}”(hj‘ôh]”hŒenum”…”�”}”(hjµóh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj±óubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂóh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj±óubh)�”}”(hhh]”j)�”}”(hŒ zone_type”h]”hŒ zone_type”…”�”}”(hjÓóh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÐóubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÕóŒmodname”NŒ classname”Njpjs)�”}”jv]”jóŒc.next_zones_zonelist”†”asbuh1hhj±óubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñóh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj±óubj)�”}”(hŒhighest_zoneidx”h]”hŒhighest_zoneidx”…”�”}”(hjÿóh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj±óubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj=óubj )�”}”(hŒconst nodemask_t *nodes”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjôubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%ôh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjôubh)�”}”(hhh]”j)�”}”(hŒ nodemask_t”h]”hŒ nodemask_t”…”�”}”(hj6ôh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3ôubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j8ôŒmodname”NŒ classname”Njpjs)�”}”jv]”jóŒc.next_zones_zonelist”†”asbuh1hhjôubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTôh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjôubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjbôh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjôubj)�”}”(hŒnodes”h]”hŒnodes”…”�”}”(hjoôh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjôubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj=óubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÇòh²hh³jØòh´M*ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÃòh²hh³jØòh´M*ubah}”(h]”j¾òah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jØòh´M*hjÀòh²hubj4)�”}”(hhh]”jM)�”}”(hŒ‚Returns the next zone at or below highest_zoneidx within the allowed nodemask using a cursor within a zonelist as a starting point”h]”hŒ‚Returns the next zone at or below highest_zoneidx within the allowed nodemask using a cursor within a zonelist as a starting point”…”�”}”(hj™ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´M*hj–ôh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÀòh²hh³jØòh´M*ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj±ôjHj±ôjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXÌ**Parameters** ``struct zoneref *z`` The cursor used as a starting point for the search ``enum zone_type highest_zoneidx`` The zone index of the highest zone to return ``const nodemask_t *nodes`` An optional nodemask to filter the zonelist with **Description** This function returns the next zone at or below a given zone index that is within the allowed nodemask using a cursor as the starting point for the search. The zoneref returned is a cursor that represents the current zone being examined. It should be advanced by one before calling next_zones_zonelist again. **Return** the next zone at or below highest_zoneidx within the allowed nodemask using a cursor within a zonelist as a starting point”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj»ôh]”hŒ Parameters”…”�”}”(hj½ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¹ôubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´M.hjµôubj¤)�”}”(hhh]”(j©)�”}”(hŒI``struct zoneref *z`` The cursor used as a starting point for the search ”h]”(j¯)�”}”(hŒ``struct zoneref *z``”h]”jS)�”}”(hjÚôh]”hŒstruct zoneref *z”…”�”}”(hjÜôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjØôubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´M+hjÔôubjÉ)�”}”(hhh]”jM)�”}”(hŒ2The cursor used as a starting point for the search”h]”hŒ2The cursor used as a starting point for the search”…”�”}”(hjóôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jïôh´M+hjðôubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÔôubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jïôh´M+hjÑôubj©)�”}”(hŒP``enum zone_type highest_zoneidx`` The zone index of the highest zone to return ”h]”(j¯)�”}”(hŒ"``enum zone_type highest_zoneidx``”h]”jS)�”}”(hjõh]”hŒenum zone_type highest_zoneidx”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjõubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´M,hj õubjÉ)�”}”(hhh]”jM)�”}”(hŒ,The zone index of the highest zone to return”h]”hŒ,The zone index of the highest zone to return”…”�”}”(hj,õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j(õh´M,hj)õubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj õubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j(õh´M,hjÑôubj©)�”}”(hŒM``const nodemask_t *nodes`` An optional nodemask to filter the zonelist with ”h]”(j¯)�”}”(hŒ``const nodemask_t *nodes``”h]”jS)�”}”(hjLõh]”hŒconst nodemask_t *nodes”…”�”}”(hjNõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjJõubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´M-hjFõubjÉ)�”}”(hhh]”jM)�”}”(hŒ0An optional nodemask to filter the zonelist with”h]”hŒ0An optional nodemask to filter the zonelist with”…”�”}”(hjeõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jaõh´M-hjbõubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjFõubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jaõh´M-hjÑôubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjµôubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj‡õh]”hŒ Description”…”�”}”(hj‰õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj…õubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´M/hjµôubjM)�”}”(hX4This function returns the next zone at or below a given zone index that is within the allowed nodemask using a cursor as the starting point for the search. The zoneref returned is a cursor that represents the current zone being examined. It should be advanced by one before calling next_zones_zonelist again.”h]”hX4This function returns the next zone at or below a given zone index that is within the allowed nodemask using a cursor as the starting point for the search. The zoneref returned is a cursor that represents the current zone being examined. It should be advanced by one before calling next_zones_zonelist again.”…”�”}”(hj�õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´M.hjµôubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´M4hjµôubjM)�”}”(hŒzthe next zone at or below highest_zoneidx within the allowed nodemask using a cursor within a zonelist as a starting point”h]”hŒzthe next zone at or below highest_zoneidx within the allowed nodemask using a cursor within a zonelist as a starting point”…”�”}”(hjÄõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´M5hjµôubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!first_zones_zonelist (C function)”Œc.first_zones_zonelist”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒzstruct zoneref * first_zones_zonelist (struct zonelist *zonelist, enum zone_type highest_zoneidx, const nodemask_t *nodes)”h]”hù)�”}”(hŒxstruct zoneref *first_zones_zonelist(struct zonelist *zonelist, enum zone_type highest_zoneidx, const nodemask_t *nodes)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjóõh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjïõh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MBubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjïõh²hh³jöh´MBubh)�”}”(hhh]”j)�”}”(hŒzoneref”h]”hŒzoneref”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjöubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jöŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒfirst_zones_zonelist”sbŒc.first_zones_zonelist”†”asbuh1hhjïõh²hh³jöh´MBubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3öh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjïõh²hh³jöh´MBubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjAöh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjïõh²hh³jöh´MBubhÿ)�”}”(hŒfirst_zones_zonelist”h]”j)�”}”(hj0öh]”hŒfirst_zones_zonelist”…”�”}”(hjRöh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjNöubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjïõh²hh³jöh´MBubj )�”}”(hŒT(struct zonelist *zonelist, enum zone_type highest_zoneidx, const nodemask_t *nodes)”h]”(j )�”}”(hŒstruct zonelist *zonelist”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjmöh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjiöubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzöh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjiöubh)�”}”(hhh]”j)�”}”(hŒzonelist”h]”hŒzonelist”…”�”}”(hj‹öh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjˆöubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j�öŒmodname”NŒ classname”Njpjs)�”}”jv]”j.öŒc.first_zones_zonelist”†”asbuh1hhjiöubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©öh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjiöubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj·öh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjiöubj)�”}”(hŒzonelist”h]”hŒzonelist”…”�”}”(hjÄöh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjiöubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjeöubj )�”}”(hŒenum zone_type highest_zoneidx”h]”(j5)�”}”(hj‘ôh]”hŒenum”…”�”}”(hjÝöh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÙöubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêöh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÙöubh)�”}”(hhh]”j)�”}”(hŒ zone_type”h]”hŒ zone_type”…”�”}”(hjûöh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjøöubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jýöŒmodname”NŒ classname”Njpjs)�”}”jv]”j.öŒc.first_zones_zonelist”†”asbuh1hhjÙöubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÙöubj)�”}”(hŒhighest_zoneidx”h]”hŒhighest_zoneidx”…”�”}”(hj'÷h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙöubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjeöubj )�”}”(hŒconst nodemask_t *nodes”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj@÷h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj<÷ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjM÷h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj<÷ubh)�”}”(hhh]”j)�”}”(hŒ nodemask_t”h]”hŒ nodemask_t”…”�”}”(hj^÷h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj[÷ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j`÷Œmodname”NŒ classname”Njpjs)�”}”jv]”j.öŒc.first_zones_zonelist”†”asbuh1hhj<÷ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|÷h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj<÷ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjŠ÷h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj<÷ubj)�”}”(hŒnodes”h]”hŒnodes”…”�”}”(hj—÷h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj<÷ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjeöubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjïõh²hh³jöh´MBubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjëõh²hh³jöh´MBubah}”(h]”jæõah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jöh´MBhjèõh²hubj4)�”}”(hhh]”jM)�”}”(hŒ\Returns the first zone at or below highest_zoneidx within the allowed nodemask in a zonelist”h]”hŒ\Returns the first zone at or below highest_zoneidx within the allowed nodemask in a zonelist”…”�”}”(hjÁ÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MBhj¾÷h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjèõh²hh³jöh´MBubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÙ÷jHjÙ÷jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXû**Parameters** ``struct zonelist *zonelist`` The zonelist to search for a suitable zone ``enum zone_type highest_zoneidx`` The zone index of the highest zone to return ``const nodemask_t *nodes`` An optional nodemask to filter the zonelist with **Description** This function returns the first zone at or below a given zone index that is within the allowed nodemask. The zoneref returned is a cursor that can be used to iterate the zonelist with next_zones_zonelist by advancing it by one before calling. When no eligible zone is found, zoneref->zone is NULL (zoneref itself is never NULL). This may happen either genuinely, or due to concurrent nodemask update due to cpuset modification. **Return** Zoneref pointer for the first suitable zone found”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjã÷h]”hŒ Parameters”…”�”}”(hjå÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjá÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MFhjÝ÷ubj¤)�”}”(hhh]”(j©)�”}”(hŒI``struct zonelist *zonelist`` The zonelist to search for a suitable zone ”h]”(j¯)�”}”(hŒ``struct zonelist *zonelist``”h]”jS)�”}”(hjøh]”hŒstruct zonelist *zonelist”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjøubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MChjü÷ubjÉ)�”}”(hhh]”jM)�”}”(hŒ*The zonelist to search for a suitable zone”h]”hŒ*The zonelist to search for a suitable zone”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jøh´MChjøubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjü÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jøh´MChjù÷ubj©)�”}”(hŒP``enum zone_type highest_zoneidx`` The zone index of the highest zone to return ”h]”(j¯)�”}”(hŒ"``enum zone_type highest_zoneidx``”h]”jS)�”}”(hj;øh]”hŒenum zone_type highest_zoneidx”…”�”}”(hj=øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj9øubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MDhj5øubjÉ)�”}”(hhh]”jM)�”}”(hŒ,The zone index of the highest zone to return”h]”hŒ,The zone index of the highest zone to return”…”�”}”(hjTøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jPøh´MDhjQøubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj5øubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jPøh´MDhjù÷ubj©)�”}”(hŒM``const nodemask_t *nodes`` An optional nodemask to filter the zonelist with ”h]”(j¯)�”}”(hŒ``const nodemask_t *nodes``”h]”jS)�”}”(hjtøh]”hŒconst nodemask_t *nodes”…”�”}”(hjvøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjrøubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MEhjnøubjÉ)�”}”(hhh]”jM)�”}”(hŒ0An optional nodemask to filter the zonelist with”h]”hŒ0An optional nodemask to filter the zonelist with”…”�”}”(hj�øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‰øh´MEhjŠøubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjnøubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‰øh´MEhjù÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÝ÷ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj¯øh]”hŒ Description”…”�”}”(hj±øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj­øubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MGhjÝ÷ubjM)�”}”(hŒòThis function returns the first zone at or below a given zone index that is within the allowed nodemask. The zoneref returned is a cursor that can be used to iterate the zonelist with next_zones_zonelist by advancing it by one before calling.”h]”hŒòThis function returns the first zone at or below a given zone index that is within the allowed nodemask. The zoneref returned is a cursor that can be used to iterate the zonelist with next_zones_zonelist by advancing it by one before calling.”…”�”}”(hjÅøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MFhjÝ÷ubjM)�”}”(hŒ¸When no eligible zone is found, zoneref->zone is NULL (zoneref itself is never NULL). This may happen either genuinely, or due to concurrent nodemask update due to cpuset modification.”h]”hŒ¸When no eligible zone is found, zoneref->zone is NULL (zoneref itself is never NULL). This may happen either genuinely, or due to concurrent nodemask update due to cpuset modification.”…”�”}”(hjÔøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MKhjÝ÷ubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MOhjÝ÷ubjM)�”}”(hŒ1Zoneref pointer for the first suitable zone found”h]”hŒ1Zoneref pointer for the first suitable zone found”…”�”}”(hjûøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MPhjÝ÷ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ)for_each_zone_zonelist_nodemask (C macro)”Œ!c.for_each_zone_zonelist_nodemask”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒfor_each_zone_zonelist_nodemask”h]”hù)�”}”(hŒfor_each_zone_zonelist_nodemask”h]”hÿ)�”}”(hŒfor_each_zone_zonelist_nodemask”h]”j)�”}”(hj$ùh]”hŒfor_each_zone_zonelist_nodemask”…”�”}”(hj.ùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj*ùubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj&ùh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´M[ubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj"ùh²hh³jAùh´M[ubah}”(h]”jùah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jAùh´M[hjùh²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hjùh²hh³jAùh´M[ubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGjZùjHjZùjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´NubjM)�”}”(hŒG``for_each_zone_zonelist_nodemask (zone, z, zlist, highidx, nodemask)``”h]”jS)�”}”(hj`ùh]”hŒCfor_each_zone_zonelist_nodemask (zone, z, zlist, highidx, nodemask)”…”�”}”(hjbùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj^ùubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´M]hjÞÁh²hubji)�”}”(hŒlhelper macro to iterate over valid zones in a zonelist at or below a given zone index and within a nodemask ”h]”jM)�”}”(hŒkhelper macro to iterate over valid zones in a zonelist at or below a given zone index and within a nodemask”h]”hŒkhelper macro to iterate over valid zones in a zonelist at or below a given zone index and within a nodemask”…”�”}”(hjzùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´M[hjvùubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jˆùh´M[hjÞÁh²hubj„)�”}”(hXŽ**Parameters** ``zone`` The current zone in the iterator ``z`` The current pointer within zonelist->_zonerefs being iterated ``zlist`` The zonelist being iterated ``highidx`` The zone index of the highest zone to return ``nodemask`` Nodemask allowed by the allocator **Description** This iterator iterates though all zones at or below a given zone index and within a given nodemask”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj•ùh]”hŒ Parameters”…”�”}”(hj—ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj“ùubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´M_hj�ùubj¤)�”}”(hhh]”(j©)�”}”(hŒ*``zone`` The current zone in the iterator ”h]”(j¯)�”}”(hŒ``zone``”h]”jS)�”}”(hj´ùh]”hŒzone”…”�”}”(hj¶ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj²ùubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´M\hj®ùubjÉ)�”}”(hhh]”jM)�”}”(hŒ The current zone in the iterator”h]”hŒ The current zone in the iterator”…”�”}”(hjÍùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÉùh´M\hjÊùubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj®ùubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÉùh´M\hj«ùubj©)�”}”(hŒD``z`` The current pointer within zonelist->_zonerefs being iterated ”h]”(j¯)�”}”(hŒ``z``”h]”jS)�”}”(hjíùh]”hŒz”…”�”}”(hjïùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjëùubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´M]hjçùubjÉ)�”}”(hhh]”jM)�”}”(hŒ=The current pointer within zonelist->_zonerefs being iterated”h]”hŒ=The current pointer within zonelist->_zonerefs being iterated”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³júh´M]hjúubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjçùubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³júh´M]hj«ùubj©)�”}”(hŒ&``zlist`` The zonelist being iterated ”h]”(j¯)�”}”(hŒ ``zlist``”h]”jS)�”}”(hj&úh]”hŒzlist”…”�”}”(hj(úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj$úubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´M^hj úubjÉ)�”}”(hhh]”jM)�”}”(hŒThe zonelist being iterated”h]”hŒThe zonelist being iterated”…”�”}”(hj?úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j;úh´M^hj<úubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj úubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j;úh´M^hj«ùubj©)�”}”(hŒ9``highidx`` The zone index of the highest zone to return ”h]”(j¯)�”}”(hŒ ``highidx``”h]”jS)�”}”(hj_úh]”hŒhighidx”…”�”}”(hjaúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj]úubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´M_hjYúubjÉ)�”}”(hhh]”jM)�”}”(hŒ,The zone index of the highest zone to return”h]”hŒ,The zone index of the highest zone to return”…”�”}”(hjxúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jtúh´M_hjuúubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjYúubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jtúh´M_hj«ùubj©)�”}”(hŒ/``nodemask`` Nodemask allowed by the allocator ”h]”(j¯)�”}”(hŒ ``nodemask``”h]”jS)�”}”(hj˜úh]”hŒnodemask”…”�”}”(hjšúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj–úubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´M`hj’úubjÉ)�”}”(hhh]”jM)�”}”(hŒ!Nodemask allowed by the allocator”h]”hŒ!Nodemask allowed by the allocator”…”�”}”(hj±úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j­úh´M`hj®úubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj’úubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j­úh´M`hj«ùubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj�ùubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÓúh]”hŒ Description”…”�”}”(hjÕúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÑúubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´Mbhj�ùubjM)�”}”(hŒbThis iterator iterates though all zones at or below a given zone index and within a given nodemask”h]”hŒbThis iterator iterates though all zones at or below a given zone index and within a given nodemask”…”�”}”(hjéúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´Mahj�ùubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ for_each_zone_zonelist (C macro)”Œc.for_each_zone_zonelist”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒfor_each_zone_zonelist”h]”hù)�”}”(hŒfor_each_zone_zonelist”h]”hÿ)�”}”(hŒfor_each_zone_zonelist”h]”j)�”}”(hjûh]”hŒfor_each_zone_zonelist”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjûubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjûh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´Msubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjûh²hh³j/ûh´Msubah}”(h]”j ûah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j/ûh´Mshj ûh²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hj ûh²hh³j/ûh´Msubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGjHûjHjHûjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´NubjM)�”}”(hŒ4``for_each_zone_zonelist (zone, z, zlist, highidx)``”h]”jS)�”}”(hjNûh]”hŒ0for_each_zone_zonelist (zone, z, zlist, highidx)”…”�”}”(hjPûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjLûubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MuhjÞÁh²hubji)�”}”(hŒVhelper macro to iterate over valid zones in a zonelist at or below a given zone index ”h]”jM)�”}”(hŒUhelper macro to iterate over valid zones in a zonelist at or below a given zone index”h]”hŒUhelper macro to iterate over valid zones in a zonelist at or below a given zone index”…”�”}”(hjhûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´Mshjdûubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jvûh´MshjÞÁh²hubj„)�”}”(hX=**Parameters** ``zone`` The current zone in the iterator ``z`` The current pointer within zonelist->zones being iterated ``zlist`` The zonelist being iterated ``highidx`` The zone index of the highest zone to return **Description** This iterator iterates though all zones at or below a given zone index.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjƒûh]”hŒ Parameters”…”�”}”(hj…ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�ûubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´Mwhj}ûubj¤)�”}”(hhh]”(j©)�”}”(hŒ*``zone`` The current zone in the iterator ”h]”(j¯)�”}”(hŒ``zone``”h]”jS)�”}”(hj¢ûh]”hŒzone”…”�”}”(hj¤ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj ûubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MthjœûubjÉ)�”}”(hhh]”jM)�”}”(hŒ The current zone in the iterator”h]”hŒ The current zone in the iterator”…”�”}”(hj»ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j·ûh´Mthj¸ûubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjœûubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j·ûh´Mthj™ûubj©)�”}”(hŒ@``z`` The current pointer within zonelist->zones being iterated ”h]”(j¯)�”}”(hŒ``z``”h]”jS)�”}”(hjÛûh]”hŒz”…”�”}”(hjÝûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÙûubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MuhjÕûubjÉ)�”}”(hhh]”jM)�”}”(hŒ9The current pointer within zonelist->zones being iterated”h]”hŒ9The current pointer within zonelist->zones being iterated”…”�”}”(hjôûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jðûh´Muhjñûubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÕûubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jðûh´Muhj™ûubj©)�”}”(hŒ&``zlist`` The zonelist being iterated ”h]”(j¯)�”}”(hŒ ``zlist``”h]”jS)�”}”(hjüh]”hŒzlist”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjüubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MvhjüubjÉ)�”}”(hhh]”jM)�”}”(hŒThe zonelist being iterated”h]”hŒThe zonelist being iterated”…”�”}”(hj-üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j)üh´Mvhj*üubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjüubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j)üh´Mvhj™ûubj©)�”}”(hŒ9``highidx`` The zone index of the highest zone to return ”h]”(j¯)�”}”(hŒ ``highidx``”h]”jS)�”}”(hjMüh]”hŒhighidx”…”�”}”(hjOüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjKüubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MwhjGüubjÉ)�”}”(hhh]”jM)�”}”(hŒ,The zone index of the highest zone to return”h]”hŒ,The zone index of the highest zone to return”…”�”}”(hjfüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jbüh´Mwhjcüubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjGüubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jbüh´Mwhj™ûubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj}ûubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjˆüh]”hŒ Description”…”�”}”(hjŠüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj†üubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´Myhj}ûubjM)�”}”(hŒGThis iterator iterates though all zones at or below a given zone index.”h]”hŒGThis iterator iterates though all zones at or below a given zone index.”…”�”}”(hjžüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´Mxhj}ûubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpfn_valid (C function)”Œ c.pfn_valid”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ!int pfn_valid (unsigned long pfn)”h]”hù)�”}”(hŒ int pfn_valid(unsigned long pfn)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjÍüh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÉüh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MÉubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜüh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÉüh²hh³jÛüh´MÉubhÿ)�”}”(hŒ pfn_valid”h]”j)�”}”(hŒ pfn_valid”h]”hŒ pfn_valid”…”�”}”(hjîüh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjêüubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÉüh²hh³jÛüh´MÉubj )�”}”(hŒ(unsigned long pfn)”h]”j )�”}”(hŒunsigned long pfn”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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ýubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj&ýh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjýubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4ýh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjýubj)�”}”(hŒpfn”h]”hŒpfn”…”�”}”(hjBýh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjýubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjýubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÉüh²hh³jÛüh´MÉubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÅüh²hh³jÛüh´MÉubah}”(h]”jÀüah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÛüh´MÉhjÂüh²hubj4)�”}”(hhh]”jM)�”}”(hŒ4check if there is a valid memory map entry for a PFN”h]”hŒ4check if there is a valid memory map entry for a PFN”…”�”}”(hjlýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MÉhjiýh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÂüh²hh³jÛüh´MÉubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj„ýjHj„ýjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXœ**Parameters** ``unsigned long pfn`` the page frame number to check **Description** Check if there is a valid memory map entry aka struct page for the **pfn**. Note, that availability of the memory map entry does not imply that there is actual usable memory at that **pfn**. The struct page may represent a hole or an unusable page frame. **Return** 1 for PFNs that have memory map entries and 0 otherwise”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjŽýh]”hŒ Parameters”…”�”}”(hj�ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŒýubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MÍhjˆýubj¤)�”}”(hhh]”j©)�”}”(hŒ5``unsigned long pfn`` the page frame number to check ”h]”(j¯)�”}”(hŒ``unsigned long pfn``”h]”jS)�”}”(hj­ýh]”hŒunsigned long pfn”…”�”}”(hj¯ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj«ýubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MÊhj§ýubjÉ)�”}”(hhh]”jM)�”}”(hŒthe page frame number to check”h]”hŒthe page frame number to check”…”�”}”(hjÆýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÂýh´MÊhjÃýubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj§ýubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÂýh´MÊhj¤ýubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjˆýubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjèýh]”hŒ Description”…”�”}”(hjêýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjæýubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MÌhjˆýubjM)�”}”(hŒþCheck if there is a valid memory map entry aka struct page for the **pfn**. Note, that availability of the memory map entry does not imply that there is actual usable memory at that **pfn**. The struct page may represent a hole or an unusable page frame.”h]”(hŒCCheck if there is a valid memory map entry aka struct page for the ”…”�”}”(hjþýh²hh³Nh´NubjŽ)�”}”(hŒ**pfn**”h]”hŒpfn”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjþýubhŒl. Note, that availability of the memory map entry does not imply that there is actual usable memory at that ”…”�”}”(hjþýh²hh³Nh´NubjŽ)�”}”(hŒ**pfn**”h]”hŒpfn”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjþýubhŒA. The struct page may represent a hole or an unusable page frame.”…”�”}”(hjþýh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MËhjˆýubjM)�”}”(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&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.h”h´MÐhjˆýubjM)�”}”(hŒ71 for PFNs that have memory map entries and 0 otherwise”h]”hŒ71 for PFNs that have memory map entries and 0 otherwise”…”�”}”(hjIþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./include/linux/mmzone.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”]”(héŒfolio_mapping (C function)”Œc.folio_mapping”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ@struct address_space * folio_mapping (const struct folio *folio)”h]”hù)�”}”(hŒ>struct address_space *folio_mapping(const struct folio *folio)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjxþh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjtþh²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./mm/util.c”h´MÆubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†þh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjtþh²hh³j…þh´MÆubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj—þh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj”þubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j™þŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒ folio_mapping”sbŒc.folio_mapping”†”asbuh1hhjtþh²hh³j…þh´MÆubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸þh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjtþh²hh³j…þh´MÆubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÆþh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjtþh²hh³j…þh´MÆubhÿ)�”}”(hŒ folio_mapping”h]”j)�”}”(hjµþh]”hŒ folio_mapping”…”�”}”(hj×þh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÓþubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjtþh²hh³j…þh´MÆubj )�”}”(hŒ(const struct folio *folio)”h]”j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjòþh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjîþubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿþh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjîþubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj ÿh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjîþubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjîþubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj+ÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj(ÿubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j-ÿŒmodname”NŒ classname”Njpjs)�”}”jv]”j³þŒc.folio_mapping”†”asbuh1hhjîþubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIÿh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjîþubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjWÿh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjîþubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjdÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjîþubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjêþubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjtþh²hh³j…þh´MÆubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjpþh²hh³j…þh´MÆubah}”(h]”jkþah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j…þh´MÆhjmþh²hubj4)�”}”(hhh]”jM)�”}”(hŒ,Find the mapping where this folio is stored.”h]”hŒ,Find the mapping where this folio is stored.”…”�”}”(hjŽÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./mm/util.c”h´MÆhj‹ÿh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjmþh²hh³j…þh´MÆubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¦ÿjHj¦ÿjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX°**Parameters** ``const struct folio *folio`` The folio. **Description** For folios which are in the page cache, return the mapping that this page belongs to. Folios in the swap cache return the swap mapping this page is stored in (which is different from the mapping for the swap file or swap device where the data is stored). You can call this for folios which aren't in the swap cache or page cache and it will return NULL.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj°ÿh]”hŒ Parameters”…”�”}”(hj²ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj®ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./mm/util.c”h´MÊhjªÿubj¤)�”}”(hhh]”j©)�”}”(hŒ)``const struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjÏÿh]”hŒconst struct folio *folio”…”�”}”(hjÑÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÍÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./mm/util.c”h´MÇhjÉÿubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hjèÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jäÿh´MÇhjåÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÉÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jäÿh´MÇhjÆÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjªÿubjM)�”}”(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&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./mm/util.c”h´MÉhjªÿubjM)�”}”(hŒÿFor folios which are in the page cache, return the mapping that this page belongs to. Folios in the swap cache return the swap mapping this page is stored in (which is different from the mapping for the swap file or swap device where the data is stored).”h]”hŒÿFor folios which are in the page cache, return the mapping that this page belongs to. Folios in the swap cache return the swap mapping this page is stored in (which is different from the mapping for the swap file or swap device where the data is stored).”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./mm/util.c”h´MÈhjªÿubjM)�”}”(hŒbYou can call this for folios which aren't in the swap cache or page cache and it will return NULL.”h]”hŒdYou can call this for folios which aren’t in the swap cache or page cache and it will return NULL.”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:111: ./mm/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”]”(héŒ__anon_vma_prepare (C function)”Œc.__anon_vma_prepare”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ3int __anon_vma_prepare (struct vm_area_struct *vma)”h]”hù)�”}”(hŒ2int __anon_vma_prepare(struct vm_area_struct *vma)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjZh²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´K ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjZh²hh³jlh´K ubhÿ)�”}”(hŒ__anon_vma_prepare”h]”j)�”}”(hŒ__anon_vma_prepare”h]”hŒ__anon_vma_prepare”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj{ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjZh²hh³jlh´K ubj )�”}”(hŒ(struct vm_area_struct *vma)”h]”j )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj—ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj—ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¶ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j»Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj�sbŒc.__anon_vma_prepare”†”asbuh1hhj—ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj—ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj—ubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj“ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjZh²hh³jlh´K ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjVh²hh³jlh´K ubah}”(h]”jQah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jlh´K hjSh²hubj4)�”}”(hhh]”jM)�”}”(hŒ%attach an anon_vma to a memory region”h]”hŒ%attach an anon_vma to a memory region”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´K hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjSh²hh³jlh´K ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj6jHj6jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXó**Parameters** ``struct vm_area_struct *vma`` the memory region in question **Description** This makes sure the memory mapping described by 'vma' has an 'anon_vma' attached to it, so that we can associate the anonymous pages mapped into it with that anon_vma. The common case will be that we already have one, which is handled inline by anon_vma_prepare(). But if not we either need to find an adjacent mapping that we can re-use the anon_vma from (very common when the only reason for splitting a vma has been mprotect()), or we allocate a new one. Anon-vma allocations are very subtle, because we may have optimistically looked up an anon_vma in folio_lock_anon_vma_read() and that may actually touch the rwsem even in the newly allocated vma (it depends on RCU to make sure that the anon_vma isn't actually destroyed). As a result, we need to do proper anon_vma locking even for the new allocation. At the same time, we do not want to do any locking for the common case of already having an anon_vma.”h]”(jM)�”}”(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&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´K¤hj:ubj¤)�”}”(hhh]”j©)�”}”(hŒ=``struct vm_area_struct *vma`` the memory region in question ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hj_h]”hŒstruct vm_area_struct *vma”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´K¡hjYubjÉ)�”}”(hhh]”jM)�”}”(hŒthe memory region in question”h]”hŒthe memory region in question”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jth´K¡hjuubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjYubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jth´K¡hjVubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj:ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjšh]”hŒ Description”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´K£hj:ubjM)�”}”(hŒ§This makes sure the memory mapping described by 'vma' has an 'anon_vma' attached to it, so that we can associate the anonymous pages mapped into it with that anon_vma.”h]”hŒ¯This makes sure the memory mapping described by ‘vma’ has an ‘anon_vma’ attached to it, so that we can associate the anonymous pages mapped into it with that anon_vma.”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´K¢hj:ubjM)�”}”(hX!The common case will be that we already have one, which is handled inline by anon_vma_prepare(). But if not we either need to find an adjacent mapping that we can re-use the anon_vma from (very common when the only reason for splitting a vma has been mprotect()), or we allocate a new one.”h]”hX!The common case will be that we already have one, which is handled inline by anon_vma_prepare(). But if not we either need to find an adjacent mapping that we can re-use the anon_vma from (very common when the only reason for splitting a vma has been mprotect()), or we allocate a new one.”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´K¦hj:ubjM)�”}”(hXAnon-vma allocations are very subtle, because we may have optimistically looked up an anon_vma in folio_lock_anon_vma_read() and that may actually touch the rwsem even in the newly allocated vma (it depends on RCU to make sure that the anon_vma isn't actually destroyed).”h]”hXAnon-vma allocations are very subtle, because we may have optimistically looked up an anon_vma in folio_lock_anon_vma_read() and that may actually touch the rwsem even in the newly allocated vma (it depends on RCU to make sure that the anon_vma isn’t actually destroyed).”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´K­hj:ubjM)�”}”(hŒµAs a result, we need to do proper anon_vma locking even for the new allocation. At the same time, we do not want to do any locking for the common case of already having an anon_vma.”h]”hŒµAs a result, we need to do proper anon_vma locking even for the new allocation. At the same time, we do not want to do any locking for the common case of already having an anon_vma.”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.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”]”(héŒanon_vma_clone (C function)”Œc.anon_vma_clone”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒiint anon_vma_clone (struct vm_area_struct *dst, struct vm_area_struct *src, enum vma_operation operation)”h]”hù)�”}”(hŒhint anon_vma_clone(struct vm_area_struct *dst, struct vm_area_struct *src, enum vma_operation operation)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjh²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M)ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjh²hh³jh´M)ubhÿ)�”}”(hŒanon_vma_clone”h]”j)�”}”(hŒanon_vma_clone”h]”hŒanon_vma_clone”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj)ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjh²hh³jh´M)ubj )�”}”(hŒV(struct vm_area_struct *dst, struct vm_area_struct *src, enum vma_operation operation)”h]”(j )�”}”(hŒstruct vm_area_struct *dst”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjEubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjEubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjdubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jiŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj/sbŒc.anon_vma_clone”†”asbuh1hhjEubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjEubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjEubj)�”}”(hŒdst”h]”hŒdst”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjAubj )�”}”(hŒstruct vm_area_struct *src”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj·ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj·ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÖubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÛŒmodname”NŒ classname”Njpjs)�”}”jv]”jƒŒc.anon_vma_clone”†”asbuh1hhj·ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj·ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj·ubj)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj·ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjAubj )�”}”(hŒenum vma_operation operation”h]”(j5)�”}”(hj‘ôh]”hŒenum”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj'ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj'ubh)�”}”(hhh]”j)�”}”(hŒ vma_operation”h]”hŒ vma_operation”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjFubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jKŒmodname”NŒ classname”Njpjs)�”}”jv]”jƒŒc.anon_vma_clone”†”asbuh1hhj'ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj'ubj)�”}”(hŒ operation”h]”hŒ operation”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjAubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjh²hh³jh´M)ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjh²hh³jh´M)ubah}”(h]”jÿah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jh´M)hjh²hubj4)�”}”(hhh]”jM)�”}”(hŒƒEstablishes new anon_vma_chain objects in **dst** linking to all of the anon_vma objects contained within **src** anon_vma_chain's.”h]”(hŒ*Establishes new anon_vma_chain objects in ”…”�”}”(hjŸh²hh³Nh´NubjŽ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŸubhŒ9 linking to all of the anon_vma objects contained within ”…”�”}”(hjŸh²hh³Nh´NubjŽ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŸubhŒ anon_vma_chain’s.”…”�”}”(hjŸh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M)hjœh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjh²hh³jh´M)ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÛjHjÛjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXç**Parameters** ``struct vm_area_struct *dst`` The destination VMA with an empty anon_vma_chain. ``struct vm_area_struct *src`` The source VMA we wish to duplicate. ``enum vma_operation operation`` The type of operation which resulted in the clone. **Description** This is the heart of the VMA side of the anon_vma implementation - we invoke this function whenever we need to set up a new VMA's anon_vma state. This is invoked for: - VMA Merge, but only when **dst** is unfaulted and **src** is faulted - meaning we clone **src** into **dst**. - VMA split. - VMA (m)remap. - Fork of faulted VMA. In all cases other than fork this is simply a duplication. Fork additionally adds a new active anon_vma. ONLY in the case of fork do we try to 'reuse' existing anon_vma's in an anon_vma hierarchy, reusing anon_vma's which have no VMA associated with them but do have a single child. This is to avoid waste of memory when repeatedly forking. **Return** 0 on success, -ENOMEM on failure.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjåh]”hŒ Parameters”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjãubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M-hjßubj¤)�”}”(hhh]”(j©)�”}”(hŒQ``struct vm_area_struct *dst`` The destination VMA with an empty anon_vma_chain. ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *dst``”h]”jS)�”}”(hjh]”hŒstruct vm_area_struct *dst”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M+hjþubjÉ)�”}”(hhh]”jM)�”}”(hŒ1The destination VMA with an empty anon_vma_chain.”h]”hŒ1The destination VMA with an empty anon_vma_chain.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jh´M+hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjþubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jh´M+hjûubj©)�”}”(hŒD``struct vm_area_struct *src`` The source VMA we wish to duplicate. ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *src``”h]”jS)�”}”(hj=h]”hŒstruct vm_area_struct *src”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M,hj7ubjÉ)�”}”(hhh]”jM)�”}”(hŒ$The source VMA we wish to duplicate.”h]”hŒ$The source VMA we wish to duplicate.”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jRh´M,hjSubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jRh´M,hjûubj©)�”}”(hŒT``enum vma_operation operation`` The type of operation which resulted in the clone. ”h]”(j¯)�”}”(hŒ ``enum vma_operation operation``”h]”jS)�”}”(hjvh]”hŒenum vma_operation operation”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjtubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M-hjpubjÉ)�”}”(hhh]”jM)�”}”(hŒ2The type of operation which resulted in the clone.”h]”hŒ2The type of operation which resulted in the clone.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‹h´M-hjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjpubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‹h´M-hjûubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjßubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj±h]”hŒ Description”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M/hjßubjM)�”}”(hŒ‘This is the heart of the VMA side of the anon_vma implementation - we invoke this function whenever we need to set up a new VMA's anon_vma state.”h]”hŒ“This is the heart of the VMA side of the anon_vma implementation - we invoke this function whenever we need to set up a new VMA’s anon_vma state.”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M.hjßubjM)�”}”(hŒThis is invoked for:”h]”hŒThis is invoked for:”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M1hjßubjaW)�”}”(hhh]”(jÕ/)�”}”(hŒmVMA Merge, but only when **dst** is unfaulted and **src** is faulted - meaning we clone **src** into **dst**.”h]”jM)�”}”(hŒmVMA Merge, but only when **dst** is unfaulted and **src** is faulted - meaning we clone **src** into **dst**.”h]”(hŒVMA Merge, but only when ”…”�”}”(hjìh²hh³Nh´NubjŽ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjìubhŒ is unfaulted and ”…”�”}”(hjìh²hh³Nh´NubjŽ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjìubhŒ is faulted - meaning we clone ”…”�”}”(hjìh²hh³Nh´NubjŽ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjìubhŒ into ”…”�”}”(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&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”•*h´M3hjèubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjåubjÕ/)�”}”(hŒ VMA split.”h]”jM)�”}”(hjKh]”hŒ VMA split.”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M5hjIubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjåubjÕ/)�”}”(hŒ VMA (m)remap.”h]”jM)�”}”(hjch]”hŒ VMA (m)remap.”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M6hjaubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjåubjÕ/)�”}”(hŒFork of faulted VMA. ”h]”jM)�”}”(hŒFork of faulted VMA.”h]”hŒFork of faulted VMA.”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M7hjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjåubeh}”(h]”h ]”h"]”h$]”h&]”jƒWj„Wuh1j`Wh³jBh´M3hjßubjM)�”}”(hŒhIn all cases other than fork this is simply a duplication. Fork additionally adds a new active anon_vma.”h]”hŒhIn all cases other than fork this is simply a duplication. Fork additionally adds a new active anon_vma.”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M9hjßubjM)�”}”(hŒëONLY in the case of fork do we try to 'reuse' existing anon_vma's in an anon_vma hierarchy, reusing anon_vma's which have no VMA associated with them but do have a single child. This is to avoid waste of memory when repeatedly forking.”h]”hŒóONLY in the case of fork do we try to ‘reuse’ existing anon_vma’s in an anon_vma hierarchy, reusing anon_vma’s which have no VMA associated with them but do have a single child. This is to avoid waste of memory when repeatedly forking.”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M<hjßubjM)�”}”(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&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MAhjßubjM)�”}”(hŒ!0 on success, -ENOMEM on failure.”h]”hŒ!0 on success, -ENOMEM on failure.”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MBhjßubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒunlink_anon_vmas (C function)”Œc.unlink_anon_vmas”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ2void unlink_anon_vmas (struct vm_area_struct *vma)”h]”hù)�”}”(hŒ1void unlink_anon_vmas(struct vm_area_struct *vma)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjùh²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÚubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjùh²hh³j h´MÚubhÿ)�”}”(hŒunlink_anon_vmas”h]”j)�”}”(hŒunlink_anon_vmas”h]”hŒunlink_anon_vmas”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjùh²hh³j h´MÚubj )�”}”(hŒ(struct vm_area_struct *vma)”h]”j )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj6ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj6ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjUubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jZŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj sbŒc.unlink_anon_vmas”†”asbuh1hhj6ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj6ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj6ubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj2ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjùh²hh³j h´MÚubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjõh²hh³j h´MÚubah}”(h]”jðah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j h´MÚhjòh²hubj4)�”}”(hhh]”jM)�”}”(hŒNremove all links between a VMA and anon_vma's, freeing anon_vma_chain objects.”h]”hŒPremove all links between a VMA and anon_vma’s, freeing anon_vma_chain objects.”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÚhjºh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjòh²hh³j h´MÚubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÕjHjÕjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXK**Parameters** ``struct vm_area_struct *vma`` The VMA whose links to anon_vma objects is to be severed. **Description** As part of the process anon_vma_chain's are freed, anon_vma->num_children,num_active_vmas is updated as required and, if the relevant anon_vma references no further VMAs, its reference count is decremented.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjßh]”hŒ Parameters”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÞhjÙubj¤)�”}”(hhh]”j©)�”}”(hŒY``struct vm_area_struct *vma`` The VMA whose links to anon_vma objects is to be severed. ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hjþh]”hŒstruct vm_area_struct *vma”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjüubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÜhjøubjÉ)�”}”(hhh]”jM)�”}”(hŒ9The VMA whose links to anon_vma objects is to be severed.”h]”hŒ9The VMA whose links to anon_vma objects is to be severed.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jh´MÜhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjøubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jh´MÜhjõubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÙubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj9h]”hŒ Description”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÞhjÙubjM)�”}”(hŒÎAs part of the process anon_vma_chain's are freed, anon_vma->num_children,num_active_vmas is updated as required and, if the relevant anon_vma references no further VMAs, its reference count is decremented.”h]”hŒÐAs part of the process anon_vma_chain’s are freed, anon_vma->num_children,num_active_vmas is updated as required and, if the relevant anon_vma references no further VMAs, its reference count is decremented.”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.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”]”(héŒ page_address_in_vma (C function)”Œc.page_address_in_vma”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒxunsigned long page_address_in_vma (const struct folio *folio, const struct page *page, const struct vm_area_struct *vma)”h]”hù)�”}”(hŒwunsigned long page_address_in_vma(const struct folio *folio, const struct page *page, const struct vm_area_struct *vma)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjzh²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MKubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjzh²hh³jŒh´MKubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjzh²hh³jŒh´MKubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjzh²hh³jŒh´MKubhÿ)�”}”(hŒpage_address_in_vma”h]”j)�”}”(hŒpage_address_in_vma”h]”hŒpage_address_in_vma”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj·ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjzh²hh³jŒh´MKubj )�”}”(hŒV(const struct folio *folio, const struct page *page, const struct vm_area_struct *vma)”h]”(j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÓubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÓubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÓubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÓubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj½sbŒc.page_address_in_vma”†”asbuh1hhjÓubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÓubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÓubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÓubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÏubj )�”}”(hŒconst struct page *page”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj`ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj`ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj`ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj`ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjšubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jŸŒmodname”NŒ classname”Njpjs)�”}”jv]”j,Œc.page_address_in_vma”†”asbuh1hhj`ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj`ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj`ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÏubj )�”}”(hŒ const struct vm_area_struct *vma”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjëubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjëubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjëubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjëubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj% ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j* Œmodname”NŒ classname”Njpjs)�”}”jv]”j,Œc.page_address_in_vma”†”asbuh1hhjëubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjF h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjëubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjT h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjëubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hja h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÏubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjzh²hh³jŒh´MKubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjvh²hh³jŒh´MKubah}”(h]”jqah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jŒh´MKhjsh²hubj4)�”}”(hhh]”jM)�”}”(hŒ*The virtual address of a page in this VMA.”h]”hŒ*The virtual address of a page in this VMA.”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MKhjˆ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjsh²hh³jŒh´MKubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj£ jHj£ jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXû**Parameters** ``const struct folio *folio`` The folio containing the page. ``const struct page *page`` The page within the folio. ``const struct vm_area_struct *vma`` The VMA we need to know the address in. **Description** Calculates the user virtual address of this page in the specified VMA. It is the caller's responsibility to check the page is actually within the VMA. There may not currently be a PTE pointing at this page, but if a page fault occurs at this address, this is the page which will be accessed. **Context** Caller should hold a reference to the folio. Caller should hold a lock (eg the i_mmap_lock or the mmap_lock) which keeps the VMA from being altered. **Return** The virtual address corresponding to this page in the VMA.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj­ h]”hŒ Parameters”…”�”}”(hj¯ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj« ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MOhj§ ubj¤)�”}”(hhh]”(j©)�”}”(hŒ=``const struct folio *folio`` The folio containing the page. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjÌ h]”hŒconst struct folio *folio”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÊ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MLhjÆ ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio containing the page.”h]”hŒThe folio containing the page.”…”�”}”(hjå h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³já h´MLhjâ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÆ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³já h´MLhjà ubj©)�”}”(hŒ7``const struct page *page`` The page within the folio. ”h]”(j¯)�”}”(hŒ``const struct page *page``”h]”jS)�”}”(hj h]”hŒconst struct page *page”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MMhjÿ ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page within the folio.”h]”hŒThe page within the folio.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j h´MMhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÿ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j h´MMhjà ubj©)�”}”(hŒM``const struct vm_area_struct *vma`` The VMA we need to know the address in. ”h]”(j¯)�”}”(hŒ$``const struct vm_area_struct *vma``”h]”jS)�”}”(hj> h]”hŒ const struct vm_area_struct *vma”…”�”}”(hj@ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj< ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MNhj8 ubjÉ)�”}”(hhh]”jM)�”}”(hŒ'The VMA we need to know the address in.”h]”hŒ'The VMA we need to know the address in.”…”�”}”(hjW h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jS h´MNhjT ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj8 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jS h´MNhjà ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj§ ubjM)�”}”(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&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MPhj§ ubjM)�”}”(hX$Calculates the user virtual address of this page in the specified VMA. It is the caller's responsibility to check the page is actually within the VMA. There may not currently be a PTE pointing at this page, but if a page fault occurs at this address, this is the page which will be accessed.”h]”hX&Calculates the user virtual address of this page in the specified VMA. It is the caller’s responsibility to check the page is actually within the VMA. There may not currently be a PTE pointing at this page, but if a page fault occurs at this address, this is the page which will be accessed.”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MOhj§ ubjM)�”}”(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&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MUhj§ ubjM)�”}”(hŒ•Caller should hold a reference to the folio. Caller should hold a lock (eg the i_mmap_lock or the mmap_lock) which keeps the VMA from being altered.”h]”hŒ•Caller should hold a reference to the folio. Caller should hold a lock (eg the i_mmap_lock or the mmap_lock) which keeps the VMA from being altered.”…”�”}”(hj¶ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MVhj§ ubjM)�”}”(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&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MZhj§ ubjM)�”}”(hŒ:The virtual address corresponding to this page in the VMA.”h]”hŒ:The virtual address corresponding to this page in the VMA.”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MZhj§ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_referenced (C function)”Œc.folio_referenced”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒkint folio_referenced (struct folio *folio, int is_locked, struct mem_cgroup *memcg, vma_flags_t *vma_flags)”h]”hù)�”}”(hŒjint folio_referenced(struct folio *folio, int is_locked, struct mem_cgroup *memcg, vma_flags_t *vma_flags)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj h²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M%ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj h²hh³j h´M%ubhÿ)�”}”(hŒfolio_referenced”h]”j)�”}”(hŒfolio_referenced”h]”hŒfolio_referenced”…”�”}”(hj- h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj) ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj h²hh³j h´M%ubj )�”}”(hŒV(struct folio *folio, int is_locked, struct mem_cgroup *memcg, vma_flags_t *vma_flags)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjI h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjE ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjE ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjg h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjd ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”ji Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj/ sbŒc.folio_referenced”†”asbuh1hhjE ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡ h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjE ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj• h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjE ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj¢ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjE ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjA ubj )�”}”(hŒ int is_locked”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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· ubj)�”}”(hŒ is_locked”h]”hŒ is_locked”…”�”}”(hj× h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj· ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjA ubj )�”}”(hŒstruct mem_cgroup *memcg”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjð h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjì ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjì ubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j Œmodname”NŒ classname”Njpjs)�”}”jv]”jƒ Œc.folio_referenced”†”asbuh1hhjì ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj, h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjì ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj: h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjì ubj)�”}”(hŒmemcg”h]”hŒmemcg”…”�”}”(hjG h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjì ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjA ubj )�”}”(hŒvma_flags_t *vma_flags”h]”(h)�”}”(hhh]”j)�”}”(hŒ vma_flags_t”h]”hŒ vma_flags_t”…”�”}”(hjc h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj` ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”je Œmodname”NŒ classname”Njpjs)�”}”jv]”jƒ Œc.folio_referenced”†”asbuh1hhj\ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj\ ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj\ ubj)�”}”(hŒ vma_flags”h]”hŒ vma_flags”…”�”}”(hjœ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj\ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjA ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj h²hh³j h´M%ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj h²hh³j h´M%ubah}”(h]”jÿ ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j h´M%hj h²hubj4)�”}”(hhh]”jM)�”}”(hŒ!Test if the folio was referenced.”h]”hŒ!Test if the folio was referenced.”…”�”}”(hjÆ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M%hjà h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj h²hh³j h´M%ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÞ jHjÞ jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXÕ**Parameters** ``struct folio *folio`` The folio to test. ``int is_locked`` Caller holds lock on the folio. ``struct mem_cgroup *memcg`` target memory cgroup ``vma_flags_t *vma_flags`` A combination of all the vma->flags which referenced the folio. **Description** Quick test_and_clear_referenced for all mappings of a folio, **Return** The number of mappings which referenced the folio. Return -1 if the function bailed out due to rmap lock contention.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjè h]”hŒ Parameters”…”�”}”(hjê h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjæ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M)hjâ ubj¤)�”}”(hhh]”(j©)�”}”(hŒ+``struct folio *folio`` The folio to test. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj h]”hŒstruct folio *folio”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M&hj ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to test.”h]”hŒThe folio to test.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j h´M&hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j h´M&hjþ ubj©)�”}”(hŒ2``int is_locked`` Caller holds lock on the folio. ”h]”(j¯)�”}”(hŒ``int is_locked``”h]”jS)�”}”(hj@ h]”hŒ int is_locked”…”�”}”(hjB h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj> ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M'hj: ubjÉ)�”}”(hhh]”jM)�”}”(hŒCaller holds lock on the folio.”h]”hŒCaller holds lock on the folio.”…”�”}”(hjY h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jU h´M'hjV ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj: ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jU h´M'hjþ ubj©)�”}”(hŒ2``struct mem_cgroup *memcg`` target memory cgroup ”h]”(j¯)�”}”(hŒ``struct mem_cgroup *memcg``”h]”jS)�”}”(hjy h]”hŒstruct mem_cgroup *memcg”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjw ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M(hjs ubjÉ)�”}”(hhh]”jM)�”}”(hŒtarget memory cgroup”h]”hŒtarget memory cgroup”…”�”}”(hj’ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jŽ h´M(hj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjs ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŽ h´M(hjþ ubj©)�”}”(hŒ[``vma_flags_t *vma_flags`` A combination of all the vma->flags which referenced the folio. ”h]”(j¯)�”}”(hŒ``vma_flags_t *vma_flags``”h]”jS)�”}”(hj² h]”hŒvma_flags_t *vma_flags”…”�”}”(hj´ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj° ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M)hj¬ ubjÉ)�”}”(hhh]”jM)�”}”(hŒ?A combination of all the vma->flags which referenced the folio.”h]”hŒ?A combination of all the vma->flags which referenced the folio.”…”�”}”(hjË h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÇ h´M)hjÈ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¬ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÇ h´M)hjþ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjâ ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjí h]”hŒ Description”…”�”}”(hjï h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjë ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M+hjâ ubjM)�”}”(hŒubjÉ)�”}”(hhh]”jM)�”}”(hŒ6The mapping whose reverse mapping should be traversed.”h]”hŒ6The mapping whose reverse mapping should be traversed.”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jYh´MñhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jYh´Mñhj;ubj©)�”}”(hŒQ``pgoff_t pgoff`` The page offset at which **pfn** is mapped within **mapping**. ”h]”(j¯)�”}”(hŒ``pgoff_t pgoff``”h]”jS)�”}”(hj}h]”hŒ pgoff_t pgoff”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MòhjwubjÉ)�”}”(hhh]”jM)�”}”(hŒ>The page offset at which **pfn** is mapped within **mapping**.”h]”(hŒThe page offset at which ”…”�”}”(hj–h²hh³Nh´NubjŽ)�”}”(hŒ**pfn**”h]”hŒpfn”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj–ubhŒ is mapped within ”…”�”}”(hj–h²hh³Nh´NubjŽ)�”}”(hŒ **mapping**”h]”hŒmapping”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj–ubhŒ.”…”�”}”(hj–h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j’h´Mòhj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjwubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j’h´Mòhj;ubj©)�”}”(hŒN``unsigned long pfn`` The PFN of the page mapped in **mapping** at **pgoff**. ”h]”(j¯)�”}”(hŒ``unsigned long pfn``”h]”jS)�”}”(hjÚh]”hŒunsigned long pfn”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjØubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MóhjÔubjÉ)�”}”(hhh]”jM)�”}”(hŒ7The PFN of the page mapped in **mapping** at **pgoff**.”h]”(hŒThe PFN of the page mapped in ”…”�”}”(hjóh²hh³Nh´NubjŽ)�”}”(hŒ **mapping**”h]”hŒmapping”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjóubhŒ at ”…”�”}”(hjóh²hh³Nh´NubjŽ)�”}”(hŒ **pgoff**”h]”hŒpgoff”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjóubhŒ.”…”�”}”(hjóh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jïh´Móhjðubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jïh´Móhj;ubj©)�”}”(hŒS``unsigned long nr_pages`` The number of physically contiguous base pages spanned. ”h]”(j¯)�”}”(hŒ``unsigned long nr_pages``”h]”jS)�”}”(hj7h]”hŒunsigned long nr_pages”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Môhj1ubjÉ)�”}”(hhh]”jM)�”}”(hŒ7The number of physically contiguous base pages spanned.”h]”hŒ7The number of physically contiguous base pages spanned.”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jLh´MôhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jLh´Môhj;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjrh]”hŒ Description”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjpubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MöhjubjM)�”}”(hX(Traverses the reverse mapping, finding all VMAs which contain a shared mapping of the pages in the specified range in **mapping**, and write-protects them (that is, updates the page tables to mark the mappings read-only such that a write protection fault arises when the mappings are written to).”h]”(hŒvTraverses the reverse mapping, finding all VMAs which contain a shared mapping of the pages in the specified range in ”…”�”}”(hjˆh²hh³Nh´NubjŽ)�”}”(hŒ **mapping**”h]”hŒmapping”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjˆubhŒ§, and write-protects them (that is, updates the page tables to mark the mappings read-only such that a write protection fault arises when the mappings are written to).”…”�”}”(hjˆh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MõhjubjM)�”}”(hXThe **pfn** value need not refer to a folio, but rather can reference a kernel allocation which is mapped into userland. We therefore do not require that the page maps to a folio with a valid mapping or index field, rather the caller specifies these in **mapping** and **pgoff**.”h]”(hŒThe ”…”�”}”(hj©h²hh³Nh´NubjŽ)�”}”(hŒ**pfn**”h]”hŒpfn”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj©ubhŒò value need not refer to a folio, but rather can reference a kernel allocation which is mapped into userland. We therefore do not require that the page maps to a folio with a valid mapping or index field, rather the caller specifies these in ”…”�”}”(hj©h²hh³Nh´NubjŽ)�”}”(hŒ **mapping**”h]”hŒmapping”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj©ubhŒ and ”…”�”}”(hj©h²hh³Nh´NubjŽ)�”}”(hŒ **pgoff**”h]”hŒpgoff”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj©ubhŒ.”…”�”}”(hj©h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MúhjubjM)�”}”(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&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÿhjubjM)�”}”(hŒ0the number of write-protected PTEs, or an error.”h]”hŒ0the number of write-protected PTEs, or an error.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mhjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpfn_mkclean_range (C function)”Œc.pfn_mkclean_range”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒlint pfn_mkclean_range (unsigned long pfn, unsigned long nr_pages, pgoff_t pgoff, struct vm_area_struct *vma)”h]”hù)�”}”(hŒkint pfn_mkclean_range(unsigned long pfn, unsigned long nr_pages, pgoff_t pgoff, struct vm_area_struct *vma)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj1h²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj1h²hh³jCh´Mubhÿ)�”}”(hŒpfn_mkclean_range”h]”j)�”}”(hŒpfn_mkclean_range”h]”hŒpfn_mkclean_range”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjRubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj1h²hh³jCh´Mubj )�”}”(hŒV(unsigned long pfn, unsigned long nr_pages, pgoff_t pgoff, struct vm_area_struct *vma)”h]”(j )�”}”(hŒunsigned long pfn”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjnubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjnubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjnubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjnubj)�”}”(hŒpfn”h]”hŒpfn”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjnubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjjubj )�”}”(hŒunsigned long nr_pages”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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¿ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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¿ubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¿ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjjubj )�”}”(hŒ pgoff_t pgoff”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljXsbŒc.pfn_mkclean_range”†”asbuh1hhjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubj)�”}”(hŒpgoff”h]”hŒpgoff”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjjubj )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjZubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjZubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjyubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j~Œmodname”NŒ classname”Njpjs)�”}”jv]”j3Œc.pfn_mkclean_range”†”asbuh1hhjZubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjZubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjZubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjjubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj1h²hh³jCh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj-h²hh³jCh´Mubah}”(h]”j(ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jCh´Mhj*h²hubj4)�”}”(hhh]”jM)�”}”(hŒèCleans the PTEs (including PMDs) mapped with range of [**pfn**, **pfn** + **nr_pages**) at the specific offset (**pgoff**) within the **vma** of shared mappings. And since clean PTEs should also be readonly, write protects them too.”h]”(hŒ7Cleans the PTEs (including PMDs) mapped with range of [”…”�”}”(hjßh²hh³Nh´NubjŽ)�”}”(hŒ**pfn**”h]”hŒpfn”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjßubhŒ, ”…”�”}”(hjßh²hh³Nh´NubjŽ)�”}”(hŒ**pfn**”h]”hŒpfn”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjßubhŒ + ”…”�”}”(hjßh²hh³Nh´NubjŽ)�”}”(hŒ **nr_pages**”h]”hŒnr_pages”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjßubhŒ) at the specific offset (”…”�”}”(hjßh²hh³Nh´NubjŽ)�”}”(hŒ **pgoff**”h]”hŒpgoff”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjßubhŒ ) within the ”…”�”}”(hjßh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjßubhŒ[ of shared mappings. And since clean PTEs should also be readonly, write protects them too.”…”�”}”(hjßh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MhjÜh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj*h²hh³jCh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjQjHjQjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXU**Parameters** ``unsigned long pfn`` start pfn. ``unsigned long nr_pages`` number of physically contiguous pages srarting with **pfn**. ``pgoff_t pgoff`` page offset that the **pfn** mapped with. ``struct vm_area_struct *vma`` vma that **pfn** mapped within. **Description** Returns the number of cleaned PTEs (including PMDs).”h]”(jM)�”}”(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&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M hjUubj¤)�”}”(hhh]”(j©)�”}”(hŒ!``unsigned long pfn`` start pfn. ”h]”(j¯)�”}”(hŒ``unsigned long pfn``”h]”jS)�”}”(hjzh]”hŒunsigned long pfn”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjxubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M hjtubjÉ)�”}”(hhh]”jM)�”}”(hŒ start pfn.”h]”hŒ start pfn.”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�h´M hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjtubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�h´M hjqubj©)�”}”(hŒX``unsigned long nr_pages`` number of physically contiguous pages srarting with **pfn**. ”h]”(j¯)�”}”(hŒ``unsigned long nr_pages``”h]”jS)�”}”(hj³h]”hŒunsigned long nr_pages”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M!hj­ubjÉ)�”}”(hhh]”jM)�”}”(hŒubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj>ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj]ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jbŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj(sbŒc.__folio_set_anon”†”asbuh1hhj>ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj>ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj>ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj:ubj )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj°ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj°ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÏubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÔŒmodname”NŒ classname”Njpjs)�”}”jv]”j|Œc.__folio_set_anon”†”asbuh1hhj°ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj°ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj°ubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj°ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj:ubj )�”}”(hŒunsigned long address”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj ubj)�”}”(hŒaddress”h]”hŒaddress”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj:ubj )�”}”(hŒbool exclusive”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjqubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjqubj)�”}”(hŒ exclusive”h]”hŒ exclusive”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjqubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj:ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjh²hh³jh´M»ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjýh²hh³jh´M»ubah}”(h]”jøah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jh´M»hjúh²hubj4)�”}”(hhh]”jM)�”}”(hŒ'set up a new anonymous rmap for a folio”h]”hŒ'set up a new anonymous rmap for a folio”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M»hj·h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjúh²hh³jh´M»ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÒjHjÒjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``struct folio *folio`` The folio to set up the new anonymous rmap for. ``struct vm_area_struct *vma`` VM area to add the folio to. ``unsigned long address`` User virtual address of the mapping ``bool exclusive`` Whether the folio is exclusive to the process.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÜh]”hŒ Parameters”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M¿hjÖubj¤)�”}”(hhh]”(j©)�”}”(hŒH``struct folio *folio`` The folio to set up the new anonymous rmap for. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjûh]”hŒstruct folio *folio”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjùubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M¼hjõubjÉ)�”}”(hhh]”jM)�”}”(hŒ/The folio to set up the new anonymous rmap for.”h]”hŒ/The folio to set up the new anonymous rmap for.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jh´M¼hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjõubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jh´M¼hjòubj©)�”}”(hŒ<``struct vm_area_struct *vma`` VM area to add the folio to. ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hj4h]”hŒstruct vm_area_struct *vma”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M½hj.ubjÉ)�”}”(hhh]”jM)�”}”(hŒVM area to add the folio to.”h]”hŒVM area to add the folio to.”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jIh´M½hjJubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jIh´M½hjòubj©)�”}”(hŒ>``unsigned long address`` User virtual address of the mapping ”h]”(j¯)�”}”(hŒ``unsigned long address``”h]”jS)�”}”(hjmh]”hŒunsigned long address”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjkubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M¾hjgubjÉ)�”}”(hhh]”jM)�”}”(hŒ#User virtual address of the mapping”h]”hŒ#User virtual address of the mapping”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‚h´M¾hjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‚h´M¾hjòubj©)�”}”(hŒA``bool exclusive`` Whether the folio is exclusive to the process.”h]”(j¯)�”}”(hŒ``bool exclusive``”h]”jS)�”}”(hj¦h]”hŒbool exclusive”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÀhj ubjÉ)�”}”(hhh]”jM)�”}”(hŒ.Whether the folio is exclusive to the process.”h]”hŒ.Whether the folio is exclusive to the process.”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M¿hj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³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”]”(héŒ#__page_check_anon_rmap (C function)”Œc.__page_check_anon_rmap”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒƒvoid __page_check_anon_rmap (const struct folio *folio, const struct page *page, struct vm_area_struct *vma, unsigned long address)”•h]”hù)�”}”(hŒ‚void __page_check_anon_rmap(const struct folio *folio, const struct page *page, struct vm_area_struct *vma, unsigned long address)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjüh²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÛubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjüh²hh³jh´MÛubhÿ)�”}”(hŒ__page_check_anon_rmap”h]”j)�”}”(hŒ__page_check_anon_rmap”h]”hŒ__page_check_anon_rmap”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjüh²hh³jh´MÛubj )�”}”(hŒg(const struct folio *folio, const struct page *page, struct vm_area_struct *vma, unsigned long address)”h]”(j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj9ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj9ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj9ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj9ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjsubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jxŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj#sbŒc.__page_check_anon_rmap”†”asbuh1hhj9ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj9ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj9ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj5ubj )�”}”(hŒconst struct page *page”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÆubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÆubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÆubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÆubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jŒmodname”NŒ classname”Njpjs)�”}”jv]”j’Œc.__page_check_anon_rmap”†”asbuh1hhjÆubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÆubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÆubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj5ubj )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjQubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjQubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjpubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”juŒmodname”NŒ classname”Njpjs)�”}”jv]”j’Œc.__page_check_anon_rmap”†”asbuh1hhjQubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjQubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjQubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjQubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj5ubj )�”}”(hŒunsigned long address”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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Áubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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Áubj)�”}”(hŒaddress”h]”hŒaddress”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÁubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj5ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjüh²hh³jh´MÛubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjøh²hh³jh´MÛubah}”(h]”jóah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jh´MÛhjõh²hubj4)�”}”(hhh]”jM)�”}”(hŒ$sanity check anonymous rmap addition”h]”hŒ$sanity check anonymous rmap addition”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÛhj$h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjõh²hh³jh´MÛubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj?jHj?jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``const struct folio *folio`` The folio containing **page**. ``const struct page *page`` the page to check the mapping of ``struct vm_area_struct *vma`` the vm area in which the mapping is added ``unsigned long address`` the user virtual address mapped”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjIh]”hŒ Parameters”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjGubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MßhjCubj¤)�”}”(hhh]”(j©)�”}”(hŒ=``const struct folio *folio`` The folio containing **page**. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjhh]”hŒconst struct folio *folio”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjfubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÜhjbubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio containing **page**.”h]”(hŒThe folio containing ”…”�”}”(hj�h²hh³Nh´NubjŽ)�”}”(hŒ**page**”h]”hŒpage”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�ubhŒ.”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j}h´MÜhj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j}h´MÜhj_ubj©)�”}”(hŒ=``const struct page *page`` the page to check the mapping of ”h]”(j¯)�”}”(hŒ``const struct page *page``”h]”jS)�”}”(hj³h]”hŒconst struct page *page”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÝhj­ubjÉ)�”}”(hhh]”jM)�”}”(hŒ the page to check the mapping of”h]”hŒ the page to check the mapping of”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÈh´MÝhjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÈh´MÝhj_ubj©)�”}”(hŒI``struct vm_area_struct *vma`` the vm area in which the mapping is added ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hjìh]”hŒstruct vm_area_struct *vma”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÞhjæubjÉ)�”}”(hhh]”jM)�”}”(hŒ)the vm area in which the mapping is added”h]”hŒ)the vm area in which the mapping is added”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jh´MÞhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjæubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jh´MÞhj_ubj©)�”}”(hŒ9``unsigned long address`` the user virtual address mapped”h]”(j¯)�”}”(hŒ``unsigned long address``”h]”jS)�”}”(hj%h]”hŒunsigned long address”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MàhjubjÉ)�”}”(hhh]”jM)�”}”(hŒthe user virtual address mapped”h]”hŒthe user virtual address mapped”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mßhj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j:h´Mà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”]”(héŒ%folio_add_anon_rmap_ptes (C function)”Œc.folio_add_anon_rmap_ptes”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ•void folio_add_anon_rmap_ptes (struct folio *folio, struct page *page, int nr_pages, struct vm_area_struct *vma, unsigned long address, rmap_t flags)”h]”hù)�”}”(hŒ”void folio_add_anon_rmap_ptes(struct folio *folio, struct page *page, int nr_pages, struct vm_area_struct *vma, unsigned long address, rmap_t flags)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj{h²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M6ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj{h²hh³j�h´M6ubhÿ)�”}”(hŒfolio_add_anon_rmap_ptes”h]”j)�”}”(hŒfolio_add_anon_rmap_ptes”h]”hŒfolio_add_anon_rmap_ptes”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjœubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj{h²hh³j�h´M6ubj )�”}”(hŒw(struct folio *folio, struct page *page, int nr_pages, struct vm_area_struct *vma, unsigned long address, rmap_t flags)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¸ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¸ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj×ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÜŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj¢sbŒc.folio_add_anon_rmap_ptes”†”asbuh1hhj¸ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¸ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¸ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¸ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj´ubj )�”}”(hŒstruct page *page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj*ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj*ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjIubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jNŒmodname”NŒ classname”Njpjs)�”}”jv]”jöŒc.folio_add_anon_rmap_ptes”†”asbuh1hhj*ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj*ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj*ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj´ubj )�”}”(hŒ int nr_pages”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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šubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjšubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj´ubj )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÏubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÏubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjîubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jóŒmodname”NŒ classname”Njpjs)�”}”jv]”jöŒc.folio_add_anon_rmap_ptes”†”asbuh1hhjÏubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÏubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÏubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hj* h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÏubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj´ubj )�”}”(hŒunsigned long address”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjC h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj? ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj? ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj_ h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj? ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjm 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 ]”jah"]”h$]”h&]”uh1jhj? ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj´ubj )�”}”(hŒ rmap_t flags”h]”(h)�”}”(hhh]”j)�”}”(hŒrmap_t”h]”hŒrmap_t”…”�”}”(hj— h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj” ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j™ Œmodname”NŒ classname”Njpjs)�”}”jv]”jöŒc.folio_add_anon_rmap_ptes”†”asbuh1hhj� ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµ h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj� ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj� ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj´ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj{h²hh³j�h´M6ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjwh²hh³j�h´M6ubah}”(h]”jrah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j�h´M6hjth²hubj4)�”}”(hhh]”jM)�”}”(hŒ1add PTE mappings to a page range of an anon folio”h]”hŒ1add PTE mappings to a page range of an anon folio”…”�”}”(hjí h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M6hjê h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjth²hh³j�h´M6ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj!jHj!jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXÚ**Parameters** ``struct folio *folio`` The folio to add the mappings to ``struct page *page`` The first page to add ``int nr_pages`` The number of pages which will be mapped ``struct vm_area_struct *vma`` The vm area in which the mappings are added ``unsigned long address`` The user virtual address of the first page to map ``rmap_t flags`` The rmap flags **Description** The page range of folio is defined by [first_page, first_page + nr_pages) The caller needs to hold the page table lock, and the page must be locked in the anon_vma case: to serialize mapping,index checking after setting, and to ensure that an anon folio is not being upgraded racily to a KSM folio (but KSM folios are never downgraded).”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj!h]”hŒ Parameters”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj !ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M:hj !ubj¤)�”}”(hhh]”(j©)�”}”(hŒ9``struct folio *folio`` The folio to add the mappings to ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj.!h]”hŒstruct folio *folio”…”�”}”(hj0!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj,!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M7hj(!ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio to add the mappings to”h]”hŒ The folio to add the mappings to”…”�”}”(hjG!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jC!h´M7hjD!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj(!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jC!h´M7hj%!ubj©)�”}”(hŒ,``struct page *page`` The first page to add ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hjg!h]”hŒstruct page *page”…”�”}”(hji!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhje!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M8hja!ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe first page to add”h]”hŒThe first page to add”…”�”}”(hj€!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j|!h´M8hj}!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhja!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j|!h´M8hj%!ubj©)�”}”(hŒ:``int nr_pages`` The number of pages which will be mapped ”h]”(j¯)�”}”(hŒ``int nr_pages``”h]”jS)�”}”(hj !h]”hŒ int nr_pages”…”�”}”(hj¢!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjž!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M9hjš!ubjÉ)�”}”(hhh]”jM)�”}”(hŒ(The number of pages which will be mapped”h]”hŒ(The number of pages which will be mapped”…”�”}”(hj¹!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jµ!h´M9hj¶!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjš!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jµ!h´M9hj%!ubj©)�”}”(hŒK``struct vm_area_struct *vma`` The vm area in which the mappings are added ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hjÙ!h]”hŒstruct vm_area_struct *vma”…”�”}”(hjÛ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj×!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M:hjÓ!ubjÉ)�”}”(hhh]”jM)�”}”(hŒ+The vm area in which the mappings are added”h]”hŒ+The vm area in which the mappings are added”…”�”}”(hjò!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jî!h´M:hjï!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÓ!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jî!h´M:hj%!ubj©)�”}”(hŒL``unsigned long address`` The user virtual address of the first page to map ”h]”(j¯)�”}”(hŒ``unsigned long address``”h]”jS)�”}”(hj"h]”hŒunsigned long address”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M;hj "ubjÉ)�”}”(hhh]”jM)�”}”(hŒ1The user virtual address of the first page to map”h]”hŒ1The user virtual address of the first page to map”…”�”}”(hj+"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j'"h´M;hj("ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj "ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j'"h´M;hj%!ubj©)�”}”(hŒ ``rmap_t flags`` The rmap flags ”h]”(j¯)�”}”(hŒ``rmap_t flags``”h]”jS)�”}”(hjK"h]”hŒ rmap_t flags”…”�”}”(hjM"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjI"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M<hjE"ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe rmap flags”h]”hŒThe rmap flags”…”�”}”(hjd"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j`"h´M<hja"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjE"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j`"h´M<hj%!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj !ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj†"h]”hŒ Description”…”�”}”(hjˆ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj„"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M>hj !ubjM)�”}”(hŒIThe page range of folio is defined by [first_page, first_page + nr_pages)”h]”hŒIThe page range of folio is defined by [first_page, first_page + nr_pages)”…”�”}”(hjœ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M=hj !ubjM)�”}”(hXThe caller needs to hold the page table lock, and the page must be locked in the anon_vma case: to serialize mapping,index checking after setting, and to ensure that an anon folio is not being upgraded racily to a KSM folio (but KSM folios are never downgraded).”h]”hXThe caller needs to hold the page table lock, and the page must be locked in the anon_vma case: to serialize mapping,index checking after setting, and to ensure that an anon folio is not being upgraded racily to a KSM folio (but KSM folios are never downgraded).”…”�”}”(hj«"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.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”]”(héŒ$folio_add_anon_rmap_pmd (C function)”Œc.folio_add_anon_rmap_pmd”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ†void folio_add_anon_rmap_pmd (struct folio *folio, struct page *page, struct vm_area_struct *vma, unsigned long address, rmap_t flags)”h]”hù)�”}”(hŒ…void folio_add_anon_rmap_pmd(struct folio *folio, struct page *page, struct vm_area_struct *vma, unsigned long address, rmap_t flags)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÚ"h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÖ"h²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MNubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé"h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÖ"h²hh³jè"h´MNubhÿ)�”}”(hŒfolio_add_anon_rmap_pmd”h]”j)�”}”(hŒfolio_add_anon_rmap_pmd”h]”hŒfolio_add_anon_rmap_pmd”…”�”}”(hjû"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj÷"ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÖ"h²hh³jè"h´MNubj )�”}”(hŒi(struct folio *folio, struct page *page, struct vm_area_struct *vma, unsigned long address, rmap_t flags)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj#ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$#h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj#ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj5#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j7#Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljý"sbŒc.folio_add_anon_rmap_pmd”†”asbuh1hhj#ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjU#h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj#ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjc#h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj#ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjp#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj#ubj )�”}”(hŒstruct page *page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj‰#h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj…#ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–#h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj…#ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj§#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j©#Œmodname”NŒ classname”Njpjs)�”}”jv]”jQ#Œc.folio_add_anon_rmap_pmd”†”asbuh1hhj…#ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅ#h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj…#ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÓ#h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj…#ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjà#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj…#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj#ubj )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjù#h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjõ#ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjõ#ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j$Œmodname”NŒ classname”Njpjs)�”}”jv]”jQ#Œc.folio_add_anon_rmap_pmd”†”asbuh1hhjõ#ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5$h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjõ#ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjC$h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjõ#ubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjP$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjõ#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj#ubj )�”}”(hŒunsigned long address”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hji$h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hje$ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjw$h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhje$ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj…$h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hje$ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“$h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhje$ubj)�”}”(hŒaddress”h]”hŒaddress”…”�”}”(hj¡$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhje$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj#ubj )�”}”(hŒ rmap_t flags”h]”(h)�”}”(hhh]”j)�”}”(hŒrmap_t”h]”hŒrmap_t”…”�”}”(hj½$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjº$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¿$Œmodname”NŒ classname”Njpjs)�”}”jv]”jQ#Œc.folio_add_anon_rmap_pmd”†”asbuh1hhj¶$ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛ$h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¶$ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjé$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¶$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj#ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÖ"h²hh³jè"h´MNubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÒ"h²hh³jè"h´MNubah}”(h]”jÍ"ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jè"h´MNhjÏ"h²hubj4)�”}”(hhh]”jM)�”}”(hŒ2add a PMD mapping to a page range of an anon folio”h]”hŒ2add a PMD mapping to a page range of an anon folio”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MNhj%h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÏ"h²hh³jè"h´MNubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj+%jHj+%jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX***Parameters** ``struct folio *folio`` The folio to add the mapping to ``struct page *page`` The first page to add ``struct vm_area_struct *vma`` The vm area in which the mapping is added ``unsigned long address`` The user virtual address of the first page to map ``rmap_t flags`` The rmap flags **Description** The page range of folio is defined by [first_page, first_page + HPAGE_PMD_NR) The caller needs to hold the page table lock, and the page must be locked in the anon_vma case: to serialize mapping,index checking after setting.”h]”(jM)�”}”(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&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MRhj/%ubj¤)�”}”(hhh]”(j©)�”}”(hŒ8``struct folio *folio`` The folio to add the mapping to ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjT%h]”hŒstruct folio *folio”…”�”}”(hjV%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjR%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MOhjN%ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to add the mapping to”h]”hŒThe folio to add the mapping to”…”�”}”(hjm%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ji%h´MOhjj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjN%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³ji%h´MOhjK%ubj©)�”}”(hŒ,``struct page *page`` The first page to add ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hj�%h]”hŒstruct page *page”…”�”}”(hj�%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‹%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MPhj‡%ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe first page to add”h]”hŒThe first page to add”…”�”}”(hj¦%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¢%h´MPhj£%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‡%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¢%h´MPhjK%ubj©)�”}”(hŒI``struct vm_area_struct *vma`` The vm area in which the mapping is added ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hjÆ%h]”hŒstruct vm_area_struct *vma”…”�”}”(hjÈ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÄ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MQhjÀ%ubjÉ)�”}”(hhh]”jM)�”}”(hŒ)The vm area in which the mapping is added”h]”hŒ)The vm area in which the mapping is added”…”�”}”(hjß%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÛ%h´MQhjÜ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÀ%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÛ%h´MQhjK%ubj©)�”}”(hŒL``unsigned long address`` The user virtual address of the first page to map ”h]”(j¯)�”}”(hŒ``unsigned long address``”h]”jS)�”}”(hjÿ%h]”hŒunsigned long address”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjý%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MRhjù%ubjÉ)�”}”(hhh]”jM)�”}”(hŒ1The user virtual address of the first page to map”h]”hŒ1The user virtual address of the first page to map”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j&h´MRhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjù%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j&h´MRhjK%ubj©)�”}”(hŒ ``rmap_t flags`` The rmap flags ”h]”(j¯)�”}”(hŒ``rmap_t flags``”h]”jS)�”}”(hj8&h]”hŒ rmap_t flags”…”�”}”(hj:&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj6&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MShj2&ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe rmap flags”h]”hŒThe rmap flags”…”�”}”(hjQ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jM&h´MShjN&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj2&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jM&h´MShjK%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj/%ubjM)�”}”(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&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MUhj/%ubjM)�”}”(hŒMThe page range of folio is defined by [first_page, first_page + HPAGE_PMD_NR)”h]”hŒMThe page range of folio is defined by [first_page, first_page + HPAGE_PMD_NR)”…”�”}”(hj‰&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MThj/%ubjM)�”}”(hŒ’The caller needs to hold the page table lock, and the page must be locked in the anon_vma case: to serialize mapping,index checking after setting.”h]”hŒ’The caller needs to hold the page table lock, and the page must be locked in the anon_vma case: to serialize mapping,index checking after setting.”…”�”}”(hj˜&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MVhj/%ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$folio_add_new_anon_rmap (C function)”Œc.folio_add_new_anon_rmap”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒsvoid folio_add_new_anon_rmap (struct folio *folio, struct vm_area_struct *vma, unsigned long address, rmap_t flags)”h]”hù)�”}”(hŒrvoid folio_add_new_anon_rmap(struct folio *folio, struct vm_area_struct *vma, unsigned long address, rmap_t flags)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÇ&h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÃ&h²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MfubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖ&h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÃ&h²hh³jÕ&h´Mfubhÿ)�”}”(hŒfolio_add_new_anon_rmap”h]”j)�”}”(hŒfolio_add_new_anon_rmap”h]”hŒfolio_add_new_anon_rmap”…”�”}”(hjè&h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjä&ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÃ&h²hh³jÕ&h´Mfubj )�”}”(hŒV(struct folio *folio, struct vm_area_struct *vma, unsigned long address, rmap_t flags)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj'ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj'ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj"'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j$'Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljê&sbŒc.folio_add_new_anon_rmap”†”asbuh1hhj'ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjB'h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj'ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjP'h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj'ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj]'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjü&ubj )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjv'h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjr'ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒ'h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjr'ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj”'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‘'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j–'Œmodname”NŒ classname”Njpjs)�”}”jv]”j>'Œc.folio_add_new_anon_rmap”†”asbuh1hhjr'ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²'h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjr'ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÀ'h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjr'ubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjÍ'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjr'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjü&ubj )�”}”(hŒunsigned long address”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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â'ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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â'ubj)�”}”(hŒaddress”h]”hŒaddress”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjâ'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjü&ubj )�”}”(hŒ rmap_t flags”h]”(h)�”}”(hhh]”j)�”}”(hŒrmap_t”h]”hŒrmap_t”…”�”}”(hj:(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7(ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j<(Œmodname”NŒ classname”Njpjs)�”}”jv]”j>'Œc.folio_add_new_anon_rmap”†”asbuh1hhj3(ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjX(h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj3(ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjf(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3(ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjü&ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÃ&h²hh³jÕ&h´Mfubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¿&h²hh³jÕ&h´Mfubah}”(h]”jº&ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÕ&h´Mfhj¼&h²hubj4)�”}”(hhh]”jM)�”}”(hŒ%Add mapping to a new anonymous folio.”h]”hŒ%Add mapping to a new anonymous folio.”…”�”}”(hj�(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mfhj�(h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¼&h²hh³jÕ&h´Mfubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¨(jHj¨(jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXS**Parameters** ``struct folio *folio`` The folio to add the mapping to. ``struct vm_area_struct *vma`` the vm area in which the mapping is added ``unsigned long address`` the user virtual address mapped ``rmap_t flags`` The rmap flags **Description** Like folio_add_anon_rmap_*() but must only be called on *new* folios. This means the inc-and-test can be bypassed. The folio doesn't necessarily need to be locked while it's exclusive unless two threads map it concurrently. However, the folio must be locked if it's shared. If the folio is pmd-mappable, it is accounted as a THP.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj²(h]”hŒ Parameters”…”�”}”(hj´(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj°(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mjhj¬(ubj¤)�”}”(hhh]”(j©)�”}”(hŒ9``struct folio *folio`` The folio to add the mapping to. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjÑ(h]”hŒstruct folio *folio”…”�”}”(hjÓ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÏ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MghjË(ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio to add the mapping to.”h]”hŒ The folio to add the mapping to.”…”�”}”(hjê(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jæ(h´Mghjç(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjË(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jæ(h´MghjÈ(ubj©)�”}”(hŒI``struct vm_area_struct *vma`` the vm area in which the mapping is added ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hj )h]”hŒstruct vm_area_struct *vma”…”�”}”(hj )h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mhhj)ubjÉ)�”}”(hhh]”jM)�”}”(hŒ)the vm area in which the mapping is added”h]”hŒ)the vm area in which the mapping is added”…”�”}”(hj#)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j)h´Mhhj )ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j)h´MhhjÈ(ubj©)�”}”(hŒ:``unsigned long address`` the user virtual address mapped ”h]”(j¯)�”}”(hŒ``unsigned long address``”h]”jS)�”}”(hjC)h]”hŒunsigned long address”…”�”}”(hjE)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjA)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mihj=)ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe user virtual address mapped”h]”hŒthe user virtual address mapped”…”�”}”(hj\)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jX)h´MihjY)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj=)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jX)h´MihjÈ(ubj©)�”}”(hŒ ``rmap_t flags`` The rmap flags ”h]”(j¯)�”}”(hŒ``rmap_t flags``”h]”jS)�”}”(hj|)h]”hŒ rmap_t flags”…”�”}”(hj~)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjz)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mjhjv)ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe rmap flags”h]”hŒThe rmap flags”…”�”}”(hj•)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‘)h´Mjhj’)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjv)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‘)h´MjhjÈ(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¬(ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj·)h]”hŒ Description”…”�”}”(hj¹)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjµ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mlhj¬(ubjM)�”}”(hXLike folio_add_anon_rmap_*() but must only be called on *new* folios. This means the inc-and-test can be bypassed. The folio doesn't necessarily need to be locked while it's exclusive unless two threads map it concurrently. However, the folio must be locked if it's shared.”h]”(hŒ8Like folio_add_anon_rmap_*() but must only be called on ”…”�”}”(hjÍ)h²hh³Nh´NubjB)�”}”(hŒ*new*”h]”hŒnew”…”�”}”(hjÕ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jAhjÍ)ubhŒÚ folios. This means the inc-and-test can be bypassed. The folio doesn’t necessarily need to be locked while it’s exclusive unless two threads map it concurrently. However, the folio must be locked if it’s shared.”…”�”}”(hjÍ)h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mkhj¬(ubjM)�”}”(hŒ7If the folio is pmd-mappable, it is accounted as a THP.”h]”hŒ7If the folio is pmd-mappable, it is accounted as a THP.”…”�”}”(hjî)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mqhj¬(ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%folio_add_file_rmap_ptes (C function)”Œc.folio_add_file_rmap_ptes”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒpvoid folio_add_file_rmap_ptes (struct folio *folio, struct page *page, int nr_pages, struct vm_area_struct *vma)”h]”hù)�”}”(hŒovoid folio_add_file_rmap_ptes(struct folio *folio, struct page *page, int nr_pages, struct vm_area_struct *vma)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj*h²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÁubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,*h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj*h²hh³j+*h´MÁubhÿ)�”}”(hŒfolio_add_file_rmap_ptes”h]”j)�”}”(hŒfolio_add_file_rmap_ptes”h]”hŒfolio_add_file_rmap_ptes”…”�”}”(hj>*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj:*ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj*h²hh³j+*h´MÁubj )�”}”(hŒR(struct folio *folio, struct page *page, int nr_pages, struct vm_area_struct *vma)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjZ*h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjV*ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjg*h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjV*ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjx*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhju*ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jz*Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj@*sbŒc.folio_add_file_rmap_ptes”†”asbuh1hhjV*ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜*h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjV*ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¦*h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjV*ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj³*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjV*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjR*ubj )�”}”(hŒstruct page *page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÌ*h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÈ*ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙ*h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÈ*ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjê*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjç*ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jì*Œmodname”NŒ classname”Njpjs)�”}”jv]”j”*Œc.folio_add_file_rmap_ptes”†”asbuh1hhjÈ*ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÈ*ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÈ*ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj#+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÈ*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjR*ubj )�”}”(hŒ int nr_pages”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj<+h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj8+ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJ+h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj8+ubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hjX+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj8+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjR*ubj )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjq+h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjm+ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~+h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjm+ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj�+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŒ+ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j‘+Œmodname”NŒ classname”Njpjs)�”}”jv]”j”*Œc.folio_add_file_rmap_ptes”†”asbuh1hhjm+ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­+h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjm+ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj»+h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjm+ubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjÈ+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjm+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjR*ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj*h²hh³j+*h´MÁubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj*h²hh³j+*h´MÁubah}”(h]”j*ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j+*h´MÁhj*h²hubj4)�”}”(hhh]”jM)�”}”(hŒ+add PTE mappings to a page range of a folio”h]”hŒ+add PTE mappings to a page range of a folio”…”�”}”(hjò+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÁhjï+h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj*h²hh³j+*h´MÁubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj ,jHj ,jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX‘**Parameters** ``struct folio *folio`` The folio to add the mappings to ``struct page *page`` The first page to add ``int nr_pages`` The number of pages that will be mapped using PTEs ``struct vm_area_struct *vma`` The vm area in which the mappings are added **Description** The page range of the folio is defined by [page, page + nr_pages) The caller needs to hold the page table lock.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj,h]”hŒ Parameters”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÅhj,ubj¤)�”}”(hhh]”(j©)�”}”(hŒ9``struct folio *folio`` The folio to add the mappings to ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj3,h]”hŒstruct folio *folio”…”�”}”(hj5,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj1,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÂhj-,ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio to add the mappings to”h]”hŒ The folio to add the mappings to”…”�”}”(hjL,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jH,h´MÂhjI,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj-,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jH,h´MÂhj*,ubj©)�”}”(hŒ,``struct page *page`` The first page to add ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hjl,h]”hŒstruct page *page”…”�”}”(hjn,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÃhjf,ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe first page to add”h]”hŒThe first page to add”…”�”}”(hj…,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�,h´MÃhj‚,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjf,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�,h´MÃhj*,ubj©)�”}”(hŒD``int nr_pages`` The number of pages that will be mapped using PTEs ”h]”(j¯)�”}”(hŒ``int nr_pages``”h]”jS)�”}”(hj¥,h]”hŒ int nr_pages”…”�”}”(hj§,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj£,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÄhjŸ,ubjÉ)�”}”(hhh]”jM)�”}”(hŒ2The number of pages that will be mapped using PTEs”h]”hŒ2The number of pages that will be mapped using PTEs”…”�”}”(hj¾,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jº,h´MÄhj»,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjŸ,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jº,h´MÄhj*,ubj©)�”}”(hŒK``struct vm_area_struct *vma`` The vm area in which the mappings are added ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hjÞ,h]”hŒstruct vm_area_struct *vma”…”�”}”(hjà,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÜ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÅhjØ,ubjÉ)�”}”(hhh]”jM)�”}”(hŒ+The vm area in which the mappings are added”h]”hŒ+The vm area in which the mappings are added”…”�”}”(hj÷,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jó,h´MÅhjô,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjØ,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jó,h´MÅhj*,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj,ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj-h]”hŒ Description”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÇhj,ubjM)�”}”(hŒAThe page range of the folio is defined by [page, page + nr_pages)”h]”hŒAThe page range of the folio is defined by [page, page + nr_pages)”…”�”}”(hj/-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÆhj,ubjM)�”}”(hŒ-The caller needs to hold the page table lock.”h]”hŒ-The caller needs to hold the page table lock.”…”�”}”(hj>-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.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”]”(héŒ$folio_add_file_rmap_pmd (C function)”Œc.folio_add_file_rmap_pmd”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒavoid folio_add_file_rmap_pmd (struct folio *folio, struct page *page, struct vm_area_struct *vma)”h]”hù)�”}”(hŒ`void folio_add_file_rmap_pmd(struct folio *folio, struct page *page, struct vm_area_struct *vma)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjm-h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hji-h²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÒubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|-h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhji-h²hh³j{-h´MÒubhÿ)�”}”(hŒfolio_add_file_rmap_pmd”h]”j)�”}”(hŒfolio_add_file_rmap_pmd”h]”hŒfolio_add_file_rmap_pmd”…”�”}”(hjŽ-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŠ-ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhji-h²hh³j{-h´MÒubj )�”}”(hŒD(struct folio *folio, struct page *page, struct vm_area_struct *vma)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjª-h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¦-ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·-h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¦-ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÈ-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÅ-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÊ-Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj�-sbŒc.folio_add_file_rmap_pmd”†”asbuh1hhj¦-ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjè-h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¦-ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjö-h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¦-ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¢-ubj )�”}”(hŒstruct page *page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj.ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj).h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj.ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj:.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7.ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j<.Œmodname”NŒ classname”Njpjs)�”}”jv]”jä-Œc.folio_add_file_rmap_pmd”†”asbuh1hhj.ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjX.h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj.ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjf.h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj.ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjs.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¢-ubj )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjŒ.h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjˆ.ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™.h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjˆ.ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjª.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj§.ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¬.Œmodname”NŒ classname”Njpjs)�”}”jv]”jä-Œc.folio_add_file_rmap_pmd”†”asbuh1hhjˆ.ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈ.h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjˆ.ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÖ.h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjˆ.ubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjã.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjˆ.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¢-ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hji-h²hh³j{-h´MÒubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hje-h²hh³j{-h´MÒubah}”(h]”j`-ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j{-h´MÒhjb-h²hubj4)�”}”(hhh]”jM)�”}”(hŒ,add a PMD mapping to a page range of a folio”h]”hŒ,add a PMD mapping to a page range of a folio”…”�”}”(hj /h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÒhj /h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjb-h²hh³j{-h´MÒubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj%/jHj%/jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXK**Parameters** ``struct folio *folio`` The folio to add the mapping to ``struct page *page`` The first page to add ``struct vm_area_struct *vma`` The vm area in which the mapping is added **Description** The page range of the folio is defined by [page, page + HPAGE_PMD_NR) The caller needs to hold the page table lock.”h]”(jM)�”}”(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&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÖhj)/ubj¤)�”}”(hhh]”(j©)�”}”(hŒ8``struct folio *folio`` The folio to add the mapping to ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjN/h]”hŒstruct folio *folio”…”�”}”(hjP/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjL/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÓhjH/ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to add the mapping to”h]”hŒThe folio to add the mapping to”…”�”}”(hjg/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jc/h´MÓhjd/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjH/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jc/h´MÓhjE/ubj©)�”}”(hŒ,``struct page *page`` The first page to add ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hj‡/h]”hŒstruct page *page”…”�”}”(hj‰/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj…/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÔhj�/ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe first page to add”h]”hŒThe first page to add”…”�”}”(hj /h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jœ/h´MÔhj�/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jœ/h´MÔhjE/ubj©)�”}”(hŒI``struct vm_area_struct *vma`` The vm area in which the mapping is added ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hjÀ/h]”hŒstruct vm_area_struct *vma”…”�”}”(hjÂ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¾/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÕhjº/ubjÉ)�”}”(hhh]”jM)�”}”(hŒ)The vm area in which the mapping is added”h]”hŒ)The vm area in which the mapping is added”…”�”}”(hjÙ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÕ/h´MÕhjÖ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjº/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÕ/h´MÕhjE/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj)/ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjû/h]”hŒ Description”…”�”}”(hjý/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjù/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M×hj)/ubjM)�”}”(hŒEThe page range of the folio is defined by [page, page + HPAGE_PMD_NR)”h]”hŒEThe page range of the folio is defined by [page, page + HPAGE_PMD_NR)”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MÖhj)/ubjM)�”}”(hŒ-The caller needs to hold the page table lock.”h]”hŒ-The caller needs to hold the page table lock.”…”�”}”(hj 0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.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”]”(héŒ$folio_add_file_rmap_pud (C function)”Œc.folio_add_file_rmap_pud”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒavoid folio_add_file_rmap_pud (struct folio *folio, struct page *page, struct vm_area_struct *vma)”h]”hù)�”}”(hŒ`void folio_add_file_rmap_pud(struct folio *folio, struct page *page, struct vm_area_struct *vma)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjO0h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjK0h²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MæubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^0h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjK0h²hh³j]0h´Mæubhÿ)�”}”(hŒfolio_add_file_rmap_pud”h]”j)�”}”(hŒfolio_add_file_rmap_pud”h]”hŒfolio_add_file_rmap_pud”…”�”}”(hjp0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjl0ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjK0h²hh³j]0h´Mæubj )�”}”(hŒD(struct folio *folio, struct page *page, struct vm_area_struct *vma)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjŒ0h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjˆ0ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™0h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjˆ0ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjª0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj§0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¬0Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljr0sbŒc.folio_add_file_rmap_pud”†”asbuh1hhjˆ0ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊ0h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjˆ0ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjØ0h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjˆ0ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjå0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjˆ0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj„0ubj )�”}”(hŒstruct page *page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjþ0h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjú0ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 1h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjú0ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj1ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j1Œmodname”NŒ classname”Njpjs)�”}”jv]”jÆ0Œc.folio_add_file_rmap_pud”†”asbuh1hhjú0ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:1h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjú0ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjH1h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjú0ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjU1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjú0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj„0ubj )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjn1h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjj1ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{1h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjj1ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjŒ1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‰1ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jŽ1Œmodname”NŒ classname”Njpjs)�”}”jv]”jÆ0Œc.folio_add_file_rmap_pud”†”asbuh1hhjj1ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª1h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjj1ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¸1h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjj1ubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjÅ1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjj1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj„0ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjK0h²hh³j]0h´Mæubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjG0h²hh³j]0h´Mæubah}”(h]”jB0ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j]0h´MæhjD0h²hubj4)�”}”(hhh]”jM)�”}”(hŒ,add a PUD mapping to a page range of a folio”h]”hŒ,add a PUD mapping to a page range of a folio”…”�”}”(hjï1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mæhjì1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjD0h²hh³j]0h´Mæubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj2jHj2jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXK**Parameters** ``struct folio *folio`` The folio to add the mapping to ``struct page *page`` The first page to add ``struct vm_area_struct *vma`` The vm area in which the mapping is added **Description** The page range of the folio is defined by [page, page + HPAGE_PUD_NR) The caller needs to hold the page table lock.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj2•fh]”hŒ Parameters”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mêhj 2ubj¤)�”}”(hhh]”(j©)�”}”(hŒ8``struct folio *folio`` The folio to add the mapping to ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj02h]”hŒstruct folio *folio”…”�”}”(hj22h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj.2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mçhj*2ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to add the mapping to”h]”hŒThe folio to add the mapping to”…”�”}”(hjI2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jE2h´MçhjF2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj*2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jE2h´Mçhj'2ubj©)�”}”(hŒ,``struct page *page`` The first page to add ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hji2h]”hŒstruct page *page”…”�”}”(hjk2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjg2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mèhjc2ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe first page to add”h]”hŒThe first page to add”…”�”}”(hj‚2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j~2h´Mèhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjc2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j~2h´Mèhj'2ubj©)�”}”(hŒI``struct vm_area_struct *vma`` The vm area in which the mapping is added ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hj¢2h]”hŒstruct vm_area_struct *vma”…”�”}”(hj¤2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj 2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Méhjœ2ubjÉ)�”}”(hhh]”jM)�”}”(hŒ)The vm area in which the mapping is added”h]”hŒ)The vm area in which the mapping is added”…”�”}”(hj»2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j·2h´Méhj¸2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjœ2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j·2h´Méhj'2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj 2ubjM)�”}”(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&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mëhj 2ubjM)�”}”(hŒEThe page range of the folio is defined by [page, page + HPAGE_PUD_NR)”h]”hŒEThe page range of the folio is defined by [page, page + HPAGE_PUD_NR)”…”�”}”(hjó2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mêhj 2ubjM)�”}”(hŒ-The caller needs to hold the page table lock.”h]”hŒ-The caller needs to hold the page table lock.”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mìhj 2ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ#folio_remove_rmap_ptes (C function)”Œc.folio_remove_rmap_ptes”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒnvoid folio_remove_rmap_ptes (struct folio *folio, struct page *page, int nr_pages, struct vm_area_struct *vma)”h]”hù)�”}”(hŒmvoid folio_remove_rmap_ptes(struct folio *folio, struct page *page, int nr_pages, struct vm_area_struct *vma)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj13h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj-3h²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MiubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@3h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj-3h²hh³j?3h´Miubhÿ)�”}”(hŒfolio_remove_rmap_ptes”h]”j)�”}”(hŒfolio_remove_rmap_ptes”h]”hŒfolio_remove_rmap_ptes”…”�”}”(hjR3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjN3ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj-3h²hh³j?3h´Miubj )�”}”(hŒR(struct folio *folio, struct page *page, int nr_pages, struct vm_area_struct *vma)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjn3h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjj3ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{3h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjj3ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjŒ3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‰3ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jŽ3Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljT3sbŒc.folio_remove_rmap_ptes”†”asbuh1hhjj3ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬3h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjj3ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjº3h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjj3ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÇ3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjj3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjf3ubj )�”}”(hŒstruct page *page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjà3h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÜ3ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí3h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÜ3ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjþ3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjû3ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j4Œmodname”NŒ classname”Njpjs)�”}”jv]”j¨3Œc.folio_remove_rmap_ptes”†”asbuh1hhjÜ3ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÜ3ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj*4h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÜ3ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj74h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÜ3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjf3ubj )�”}”(hŒ int nr_pages”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjP4h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjL4ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^4h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjL4ubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hjl4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjL4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjf3ubj )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj…4h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj�4ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’4h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�4ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj£4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj 4ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¥4Œmodname”NŒ classname”Njpjs)�”}”jv]”j¨3Œc.folio_remove_rmap_ptes”†”asbuh1hhj�4ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁ4h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�4ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÏ4h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj�4ubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjÜ4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjf3ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj-3h²hh³j?3h´Miubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj)3h²hh³j?3h´Miubah}”(h]”j$3ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j?3h´Mihj&3h²hubj4)�”}”(hhh]”jM)�”}”(hŒ0remove PTE mappings from a page range of a folio”h]”hŒ0remove PTE mappings from a page range of a folio”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mihj5h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj&3h²hh³j?3h´Miubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj5jHj5jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX¤**Parameters** ``struct folio *folio`` The folio to remove the mappings from ``struct page *page`` The first page to remove ``int nr_pages`` The number of pages that will be removed from the mapping ``struct vm_area_struct *vma`` The vm area from which the mappings are removed **Description** The page range of the folio is defined by [page, page + nr_pages) The caller needs to hold the page table lock.”h]”(jM)�”}”(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&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mmhj"5ubj¤)�”}”(hhh]”(j©)�”}”(hŒ>``struct folio *folio`` The folio to remove the mappings from ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjG5h]”hŒstruct folio *folio”…”�”}”(hjI5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjE5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MjhjA5ubjÉ)�”}”(hhh]”jM)�”}”(hŒ%The folio to remove the mappings from”h]”hŒ%The folio to remove the mappings from”…”�”}”(hj`5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j\5h´Mjhj]5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjA5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j\5h´Mjhj>5ubj©)�”}”(hŒ/``struct page *page`` The first page to remove ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hj€5h]”hŒstruct page *page”…”�”}”(hj‚5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj~5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mkhjz5ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe first page to remove”h]”hŒThe first page to remove”…”�”}”(hj™5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j•5h´Mkhj–5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjz5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j•5h´Mkhj>5ubj©)�”}”(hŒK``int nr_pages`` The number of pages that will be removed from the mapping ”h]”(j¯)�”}”(hŒ``int nr_pages``”h]”jS)�”}”(hj¹5h]”hŒ int nr_pages”…”�”}”(hj»5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj·5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mlhj³5ubjÉ)�”}”(hhh]”jM)�”}”(hŒ9The number of pages that will be removed from the mapping”h]”hŒ9The number of pages that will be removed from the mapping”…”�”}”(hjÒ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÎ5h´MlhjÏ5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj³5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÎ5h´Mlhj>5ubj©)�”}”(hŒO``struct vm_area_struct *vma`` The vm area from which the mappings are removed ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hjò5h]”hŒstruct vm_area_struct *vma”…”�”}”(hjô5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjð5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mmhjì5ubjÉ)�”}”(hhh]”jM)�”}”(hŒ/The vm area from which the mappings are removed”h]”hŒ/The vm area from which the mappings are removed”…”�”}”(hj 6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j6h´Mmhj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjì5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j6h´Mmhj>5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj"5ubjM)�”}”(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&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mohj"5ubjM)�”}”(hŒAThe page range of the folio is defined by [page, page + nr_pages)”h]”hŒAThe page range of the folio is defined by [page, page + nr_pages)”…”�”}”(hjC6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mnhj"5ubjM)�”}”(hŒ-The caller needs to hold the page table lock.”h]”hŒ-The caller needs to hold the page table lock.”…”�”}”(hjR6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mphj"5ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"folio_remove_rmap_pmd (C function)”Œc.folio_remove_rmap_pmd”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ_void folio_remove_rmap_pmd (struct folio *folio, struct page *page, struct vm_area_struct *vma)”h]”hù)�”}”(hŒ^void folio_remove_rmap_pmd(struct folio *folio, struct page *page, struct vm_area_struct *vma)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj�6h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj}6h²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MzubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�6h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj}6h²hh³j�6h´Mzubhÿ)�”}”(hŒfolio_remove_rmap_pmd”h]”j)�”}”(hŒfolio_remove_rmap_pmd”h]”hŒfolio_remove_rmap_pmd”…”�”}”(hj¢6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjž6ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj}6h²hh³j�6h´Mzubj )�”}”(hŒD(struct folio *folio, struct page *page, struct vm_area_struct *vma)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¾6h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjº6ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjË6h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjº6ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÜ6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙ6ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÞ6Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj¤6sbŒc.folio_remove_rmap_pmd”†”asbuh1hhjº6ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjü6h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjº6ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj 7h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjº6ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjº6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¶6ubj )�”}”(hŒstruct page *page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj07h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj,7ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=7h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj,7ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjN7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjK7ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jP7Œmodname”NŒ classname”Njpjs)�”}”jv]”jø6Œc.folio_remove_rmap_pmd”†”asbuh1hhj,7ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl7h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj,7ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjz7h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj,7ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj‡7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj,7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¶6ubj )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj 7h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjœ7ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­7h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjœ7ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj¾7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj»7ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÀ7Œmodname”NŒ classname”Njpjs)�”}”jv]”jø6Œc.folio_remove_rmap_pmd”†”asbuh1hhjœ7ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜ7h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjœ7ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjê7h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjœ7ubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hj÷7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjœ7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¶6ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj}6h²hh³j�6h´Mzubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjy6h²hh³j�6h´Mzubah}”(h]”jt6ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j�6h´Mzhjv6h²hubj4)�”}”(hhh]”jM)�”}”(hŒ1remove a PMD mapping from a page range of a folio”h]”hŒ1remove a PMD mapping from a page range of a folio”…”�”}”(hj!8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mzhj8h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjv6h²hh³j�6h´Mzubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj98jHj98jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXW**Parameters** ``struct folio *folio`` The folio to remove the mapping from ``struct page *page`` The first page to remove ``struct vm_area_struct *vma`` The vm area from which the mapping is removed **Description** The page range of the folio is defined by [page, page + HPAGE_PMD_NR) The caller needs to hold the page table lock.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjC8h]”hŒ Parameters”…”�”}”(hjE8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjA8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M~hj=8ubj¤)�”}”(hhh]”(j©)�”}”(hŒ=``struct folio *folio`` The folio to remove the mapping from ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjb8h]”hŒstruct folio *folio”…”�”}”(hjd8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj`8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M{hj\8ubjÉ)�”}”(hhh]”jM)�”}”(hŒ$The folio to remove the mapping from”h]”hŒ$The folio to remove the mapping from”…”�”}”(hj{8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jw8h´M{hjx8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj\8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jw8h´M{hjY8ubj©)�”}”(hŒ/``struct page *page`` The first page to remove ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hj›8h]”hŒstruct page *page”…”�”}”(hj�8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj™8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M|hj•8ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe first page to remove”h]”hŒThe first page to remove”…”�”}”(hj´8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j°8h´M|hj±8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj•8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j°8h´M|hjY8ubj©)�”}”(hŒM``struct vm_area_struct *vma`` The vm area from which the mapping is removed ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hjÔ8h]”hŒstruct vm_area_struct *vma”…”�”}”(hjÖ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÒ8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M}hjÎ8ubjÉ)�”}”(hhh]”jM)�”}”(hŒ-The vm area from which the mapping is removed”h]”hŒ-The vm area from which the mapping is removed”…”�”}”(hjí8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jé8h´M}hjê8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÎ8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jé8h´M}hjY8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj=8ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj9h]”hŒ Description”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj 9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mhj=8ubjM)�”}”(hŒEThe page range of the folio is defined by [page, page + HPAGE_PMD_NR)”h]”hŒEThe page range of the folio is defined by [page, page + HPAGE_PMD_NR)”…”�”}”(hj%9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M~hj=8ubjM)�”}”(hŒ-The caller needs to hold the page table lock.”h]”hŒ-The caller needs to hold the page table lock.”…”�”}”(hj49h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.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”]”(héŒ"folio_remove_rmap_pud (C function)”Œc.folio_remove_rmap_pud”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ_void folio_remove_rmap_pud (struct folio *folio, struct page *page, struct vm_area_struct *vma)”h]”hù)�”}”(hŒ^void folio_remove_rmap_pud(struct folio *folio, struct page *page, struct vm_area_struct *vma)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjc9h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj_9h²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MŽubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjr9h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj_9h²hh³jq9h´MŽubhÿ)�”}”(hŒfolio_remove_rmap_pud”h]”j)�”}”(hŒfolio_remove_rmap_pud”h]”hŒfolio_remove_rmap_pud”…”�”}”(hj„9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj€9ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj_9h²hh³jq9h´MŽubj )�”}”(hŒD(struct folio *folio, struct page *page, struct vm_area_struct *vma)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj 9h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjœ9ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­9h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjœ9ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj¾9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj»9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÀ9Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj†9sbŒc.folio_remove_rmap_pud”†”asbuh1hhjœ9ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ9h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjœ9ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjì9h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjœ9ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjù9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjœ9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj˜9ubj )�”}”(hŒstruct page *page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj:ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj:ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj0:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj-:ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j2:Œmodname”NŒ classname”Njpjs)�”}”jv]”jÚ9Œc.folio_remove_rmap_pud”†”asbuh1hhj:ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjN:h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj:ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj\:h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj:ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hji:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj˜9ubj )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj‚:h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj~:ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�:h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj~:ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj :h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�:ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¢:Œmodname”NŒ classname”Njpjs)�”}”jv]”jÚ9Œc.folio_remove_rmap_pud”†”asbuh1hhj~:ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾:h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj~:ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÌ:h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj~:ubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjÙ:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj~:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj˜9ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj_9h²hh³jq9h´MŽubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj[9h²hh³jq9h´MŽubah}”(h]”jV9ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jq9h´MŽhjX9h²hubj4)�”}”(hhh]”jM)�”}”(hŒ1remove a PUD mapping from a page range of a folio”h]”hŒ1remove a PUD mapping from a page range of a folio”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MŽhj;h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjX9h²hh³jq9h´MŽubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj;jHj;jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXW**Parameters** ``struct folio *folio`` The folio to remove the mapping from ``struct page *page`` The first page to remove ``struct vm_area_struct *vma`` The vm area from which the mapping is removed **Description** The page range of the folio is defined by [page, page + HPAGE_PUD_NR) The caller needs to hold the page table lock.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj%;h]”hŒ Parameters”…”�”}”(hj';h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj#;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M’hj;ubj¤)�”}”(hhh]”(j©)�”}”(hŒ=``struct folio *folio`` The folio to remove the mapping from ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjD;h]”hŒstruct folio *folio”…”�”}”(hjF;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjB;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M�hj>;ubjÉ)�”}”(hhh]”jM)�”}”(hŒ$The folio to remove the mapping from”h]”hŒ$The folio to remove the mapping from”…”�”}”(hj];h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jY;h´M�hjZ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj>;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jY;h´M�hj;;ubj©)�”}”(hŒ/``struct page *page`` The first page to remove ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hj};h]”hŒstruct page *page”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj{;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M�hjw;ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe first page to remove”h]”hŒThe first page to remove”…”�”}”(hj–;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j’;h´M�hj“;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjw;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j’;h´M�hj;;ubj©)�”}”(hŒM``struct vm_area_struct *vma`` The vm area from which the mapping is removed ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hj¶;h]”hŒstruct vm_area_struct *vma”…”�”}”(hj¸;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj´;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M‘hj°;ubjÉ)�”}”(hhh]”jM)�”}”(hŒ-The vm area from which the mapping is removed”h]”hŒ-The vm area from which the mapping is removed”…”�”}”(hjÏ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jË;h´M‘hjÌ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj°;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jË;h´M‘hj;;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj;ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjñ;h]”hŒ Description”…”�”}”(hjó;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjï;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M“hj;ubjM)�”}”(hŒEThe page range of the folio is defined by [page, page + HPAGE_PUD_NR)”h]”hŒEThe page range of the folio is defined by [page, page + HPAGE_PUD_NR)”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M’hj;ubjM)�”}”(hŒ-The caller needs to hold the page table lock.”h]”hŒ-The caller needs to hold the page table lock.”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.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”]”(héŒtry_to_unmap (C function)”Œc.try_to_unmap”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ=void try_to_unmap (struct folio *folio, enum ttu_flags flags)”h]”hù)�”}”(hŒ=h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjð<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjz<ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjA<h²hh³jS<h´M… ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj=<h²hh³jS<h´M… ubah}”(h]”j8<ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jS<h´M… hj:<h²hubj4)�”}”(hhh]”jM)�”}”(hŒ1Try to remove all page table mappings to a folio.”h]”hŒ1Try to remove all page table mappings to a folio.”…”�”}”(hjh=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M… hje=h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj:<h²hh³jS<h´M… ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj€=jHj€=jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXs**Parameters** ``struct folio *folio`` The folio to unmap. ``enum ttu_flags flags`` action and flags **Description** Tries to remove all the page table entries which are mapping this folio. It is the caller's responsibility to check if the folio is still mapped if needed (use TTU_SYNC to prevent accounting races). **Context** Caller must hold the folio lock.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjŠ=h]”hŒ Parameters”…”�”}”(hjŒ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjˆ=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M‰ hj„=ubj¤)�”}”(hhh]”(j©)�”}”(hŒ,``struct folio *folio`` The folio to unmap. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj©=h]”hŒstruct folio *folio”…”�”}”(hj«=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj§=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M† hj£=ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to unmap.”h]”hŒThe folio to unmap.”…”�”}”(hjÂ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¾=h´M† hj¿=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj£=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¾=h´M† hj =ubj©)�”}”(hŒ*``enum ttu_flags flags`` action and flags ”h]”(j¯)�”}”(hŒ``enum ttu_flags flags``”h]”jS)�”}”(hjâ=h]”hŒenum ttu_flags flags”…”�”}”(hjä=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjà=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M‡ hjÜ=ubjÉ)�”}”(hhh]”jM)�”}”(hŒaction and flags”h]”hŒaction and flags”…”�”}”(hjû=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j÷=h´M‡ hjø=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÜ=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j÷=h´M‡ hj =ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj„=ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj>h]”hŒ Description”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M‰ hj„=ubjM)�”}”(hŒÇTries to remove all the page table entries which are mapping this folio. It is the caller's responsibility to check if the folio is still mapped if needed (use TTU_SYNC to prevent accounting races).”h]”hŒÉTries to remove all the page table entries which are mapping this folio. It is the caller’s responsibility to check if the folio is still mapped if needed (use TTU_SYNC to prevent accounting races).”…”�”}”(hj3>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mˆ hj„=ubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjD>h]”hŒContext”…”�”}”(hjF>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjB>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´MŒ hj„=ubjM)�”}”(hŒ Caller must hold the folio lock.”h]”hŒ Caller must hold the folio lock.”…”�”}”(hjZ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.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”]”(héŒtry_to_migrate (C function)”Œc.try_to_migrate”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ?void try_to_migrate (struct folio *folio, enum ttu_flags flags)”h]”hù)�”}”(hŒ>void try_to_migrate(struct folio *folio, enum ttu_flags flags)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‰>h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj…>h²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Må ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜>h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj…>h²hh³j—>h´Må ubhÿ)�”}”(hŒtry_to_migrate”h]”j)�”}”(hŒtry_to_migrate”h]”hŒtry_to_migrate”…”�”}”(hjª>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦>ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj…>h²hh³j—>h´Må ubj )�”}”(hŒ+(struct folio *folio, enum ttu_flags flags)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÆ>h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÂ>ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓ>h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÂ>ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjä>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjá>ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jæ>Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj¬>sbŒc.try_to_migrate”†”asbuh1hhjÂ>ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÂ>ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÂ>ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÂ>ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¾>ubj )�”}”(hŒenum ttu_flags flags”h]”(j5)�”}”(hj‘ôh]”hŒenum”…”�”}”(hj8?h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj4?ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjE?h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj4?ubh)�”}”(hhh]”j)�”}”(hŒ ttu_flags”h]”hŒ ttu_flags”…”�”}”(hjV?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjS?ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jX?Œmodname”NŒ classname”Njpjs)�”}”jv]”j?Œc.try_to_migrate”†”asbuh1hhj4?ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjt?h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj4?ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj‚?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¾>ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj…>h²hh³j—>h´Må ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj�>h²hh³j—>h´Må ubah}”(h]”j|>ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j—>h´Må hj~>h²hubj4)�”}”(hhh]”jM)�”}”(hŒ8try to replace all page table mappings with swap entries”h]”hŒ8try to replace all page table mappings with swap entries”…”�”}”(hj¬?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Må hj©?h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj~>h²hh³j—>h´Må ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÄ?jHjÄ?jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX)**Parameters** ``struct folio *folio`` the folio to replace page table entries for ``enum ttu_flags flags`` action and flags **Description** Tries to remove all the page table entries which are mapping this folio and replace them with special swap entries. Caller must hold the folio lock.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÎ?h]”hŒ Parameters”…”�”}”(hjÐ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÌ?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mé hjÈ?ubj¤)�”}”(hhh]”(j©)�”}”(hŒD``struct folio *folio`` the folio to replace page table entries for ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjí?h]”hŒstruct folio *folio”…”�”}”(hjï?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjë?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mæ hjç?ubjÉ)�”}”(hhh]”jM)�”}”(hŒ+the folio to replace page table entries for”h]”hŒ+the folio to replace page table entries for”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j@h´Mæ hj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjç?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j@h´Mæ hjä?ubj©)�”}”(hŒ*``enum ttu_flags flags`` action and flags ”h]”(j¯)�”}”(hŒ``enum ttu_flags flags``”h]”jS)�”}”(hj&@h]”hŒenum ttu_flags flags”…”�”}”(hj(@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj$@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mç hj @ubjÉ)�”}”(hhh]”jM)�”}”(hŒaction and flags”h]”hŒaction and flags”…”�”}”(hj?@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j;@h´Mç hj<@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj @ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j;@h´Mç hjä?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÈ?ubjM)�”}”(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&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mé hjÈ?ubjM)�”}”(hŒ”Tries to remove all the page table entries which are mapping this folio and replace them with special swap entries. Caller must hold the folio lock.”h]”hŒ”Tries to remove all the page table entries which are mapping this folio and replace them with special swap entries. Caller must hold the folio lock.”…”�”}”(hjw@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.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”]”(héŒ"make_device_exclusive (C function)”Œc.make_device_exclusive”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒrstruct page * make_device_exclusive (struct mm_struct *mm, unsigned long addr, void *owner, struct folio **foliop)”h]”hù)�”}”(hŒpstruct page *make_device_exclusive(struct mm_struct *mm, unsigned long addr, void *owner, struct folio **foliop)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¦@h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¢@h²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´@h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¢@h²hh³j³@h´M ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÅ@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÂ@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÇ@Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒmake_device_exclusive”sbŒc.make_device_exclusive”†”asbuh1hhj¢@h²hh³j³@h´M ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæ@h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¢@h²hh³j³@h´M ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjô@h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¢@h²hh³j³@h´M ubhÿ)�”}”(hŒmake_device_exclusive”h]”j)�”}”(hjã@h]”hŒmake_device_exclusive”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjAubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¢@h²hh³j³@h´M ubj )�”}”(hŒN(struct mm_struct *mm, unsigned long addr, void *owner, struct folio **foliop)”h]”(j )�”}”(hŒstruct mm_struct *mm”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj Ah²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjAubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-Ah²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjAubh)�”}”(hhh]”j)�”}”(hŒ mm_struct”h]”hŒ mm_struct”…”�”}”(hj>Ah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj;Aubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j@AŒmodname”NŒ classname”Njpjs)�”}”jv]”já@Œc.make_device_exclusive”†”asbuh1hhjAubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\Ah²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjAubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjjAh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjAubj)�”}”(hŒmm”h]”hŒmm”…”�”}”(hjwAh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjAubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjAubj )�”}”(hŒunsigned long addr”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj�Ah²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjŒAubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžAh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŒAubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj¬Ah²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjŒAubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºAh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŒAubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjÈAh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŒAubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjAubj )�”}”(hŒ void *owner”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjáAh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÝAubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïAh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÝAubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjýAh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÝAubj)�”}”(hŒowner”h]”hŒowner”…”�”}”(hj Bh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÝAubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjAubj )�”}”(hŒstruct folio **foliop”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj#Bh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjBubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0Bh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjBubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjABh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>Bubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jCBŒmodname”NŒ classname”Njpjs)�”}”jv]”já@Œc.make_device_exclusive”†”asbuh1hhjBubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_Bh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjBubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjmBh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjBubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjzBh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjBubj)�”}”(hŒfoliop”h]”hŒfoliop”…”�”}”(hj‡Bh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjAubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¢@h²hh³j³@h´M ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjž@h²hh³j³@h´M ubah}”(h]”j™@ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j³@h´M hj›@h²hubj4)�”}”(hhh]”jM)�”}”(hŒ)Mark a page for exclusive use by a device”h]”hŒ)Mark a page for exclusive use by a device”…”�”}”(hj±Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M hj®Bh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj›@h²hh³j³@h´M ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÉBjHjÉBjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX…**Parameters** ``struct mm_struct *mm`` mm_struct of associated target process ``unsigned long addr`` the virtual address to mark for exclusive device access ``void *owner`` passed to MMU_NOTIFY_EXCLUSIVE range notifier to allow filtering ``struct folio **foliop`` folio pointer will be stored here on success. **Description** This function looks up the page mapped at the given address, grabs a folio reference, locks the folio and replaces the PTE with special device-exclusive PFN swap entry, preventing access through the process page tables. The function will return with the folio locked and referenced. On fault, the device-exclusive entries are replaced with the original PTE under folio lock, after calling MMU notifiers. Only anonymous non-hugetlb folios are supported and the VMA must have write permissions such that we can fault in the anonymous page writable in order to mark it exclusive. The caller must hold the mmap_lock in read mode. A driver using this to program access from a device must use a mmu notifier critical section to hold a device specific lock during programming. Once programming is complete it should drop the folio lock and reference after which point CPU access to the page will revoke the exclusive access. **Notes** #. This function always operates on individual PTEs mapping individual pages. PMD-sized THPs are first remapped to be mapped by PTEs before the conversion happens on a single PTE corresponding to **addr**. #. While concurrent access through the process page tables is prevented, concurrent access through other page references (e.g., earlier GUP invocation) is not handled and not supported. #. device-exclusive entries are considered "clean" and "old" by core-mm. Device drivers must update the folio state when informed by MMU notifiers. **Return** pointer to mapped page on success, otherwise a negative error.”h]”(jM)�”}”(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&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M hjÍBubj¤)�”}”(hhh]”(j©)�”}”(hŒ@``struct mm_struct *mm`` mm_struct of associated target process ”h]”(j¯)�”}”(hŒ``struct mm_struct *mm``”h]”jS)�”}”(hjòBh]”hŒstruct mm_struct *mm”…”�”}”(hjôBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjðBubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M hjìBubjÉ)�”}”(hhh]”jM)�”}”(hŒ&mm_struct of associated target process”h]”hŒ&mm_struct of associated target process”…”�”}”(hj Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jCh´M hjCubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjìBubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jCh´M hjéBubj©)�”}”(hŒO``unsigned long addr`` the virtual address to mark for exclusive device access ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hj+Ch]”hŒunsigned long addr”…”�”}”(hj-Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj)Cubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M hj%CubjÉ)�”}”(hhh]”jM)�”}”(hŒ7the virtual address to mark for exclusive device access”h]”hŒ7the virtual address to mark for exclusive device access”…”�”}”(hjDCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j@Ch´M hjACubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj%Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j@Ch´M hjéBubj©)�”}”(hŒQ``void *owner`` passed to MMU_NOTIFY_EXCLUSIVE range notifier to allow filtering ”h]”(j¯)�”}”(hŒ``void *owner``”h]”jS)�”}”(hjdCh]”hŒ void *owner”…”�”}”(hjfCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjbCubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M hj^CubjÉ)�”}”(hhh]”jM)�”}”(hŒ@passed to MMU_NOTIFY_EXCLUSIVE range notifier to allow filtering”h]”hŒ@passed to MMU_NOTIFY_EXCLUSIVE range notifier to allow filtering”…”�”}”(hj}Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jyCh´M hjzCubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj^Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jyCh´M hjéBubj©)�”}”(hŒH``struct folio **foliop`` folio pointer will be stored here on success. ”h]”(j¯)�”}”(hŒ``struct folio **foliop``”h]”jS)�”}”(hj�Ch]”hŒstruct folio **foliop”…”�”}”(hjŸCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj›Cubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M hj—CubjÉ)�”}”(hhh]”jM)�”}”(hŒ-folio pointer will be stored here on success.”h]”hŒ-folio pointer will be stored here on success.”…”�”}”(hj¶Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j²Ch´M hj³Cubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj—Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j²Ch´M hjéBubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÍBubjM)�”}”(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&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M hjÍBubjM)�”}”(hXThis function looks up the page mapped at the given address, grabs a folio reference, locks the folio and replaces the PTE with special device-exclusive PFN swap entry, preventing access through the process page tables. The function will return with the folio locked and referenced.”h]”hXThis function looks up the page mapped at the given address, grabs a folio reference, locks the folio and replaces the PTE with special device-exclusive PFN swap entry, preventing access through the process page tables. The function will return with the folio locked and referenced.”…”�”}”(hjîCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M hjÍBubjM)�”}”(hŒxOn fault, the device-exclusive entries are replaced with the original PTE under folio lock, after calling MMU notifiers.”h]”hŒxOn fault, the device-exclusive entries are replaced with the original PTE under folio lock, after calling MMU notifiers.”…”�”}”(hjýCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M hjÍBubjM)�”}”(hŒÝOnly anonymous non-hugetlb folios are supported and the VMA must have write permissions such that we can fault in the anonymous page writable in order to mark it exclusive. The caller must hold the mmap_lock in read mode.”h]”hŒÝOnly anonymous non-hugetlb folios are supported and the VMA must have write permissions such that we can fault in the anonymous page writable in order to mark it exclusive. The caller must hold the mmap_lock in read mode.”…”�”}”(hj Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M! hjÍBubjM)�”}”(hX#A driver using this to program access from a device must use a mmu notifier critical section to hold a device specific lock during programming. Once programming is complete it should drop the folio lock and reference after which point CPU access to the page will revoke the exclusive access.”h]”hX#A driver using this to program access from a device must use a mmu notifier critical section to hold a device specific lock during programming. Once programming is complete it should drop the folio lock and reference after which point CPU access to the page will revoke the exclusive access.”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M& hjÍBubjM)�”}”(hŒ **Notes**”h]”jŽ)�”}”(hj,Dh]”hŒNotes”…”�”}”(hj.Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj*Dubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M+ hjÍBubji)�”}”(hX.#. This function always operates on individual PTEs mapping individual pages. PMD-sized THPs are first remapped to be mapped by PTEs before the conversion happens on a single PTE corresponding to **addr**. #. While concurrent access through the process page tables is prevented, concurrent access through other page references (e.g., earlier GUP invocation) is not handled and not supported. #. device-exclusive entries are considered "clean" and "old" by core-mm. Device drivers must update the folio state when informed by MMU notifiers. ”h]”jÐ/)�”}”(hhh]”(jÕ/)�”}”(hŒÊThis function always operates on individual PTEs mapping individual pages. PMD-sized THPs are first remapped to be mapped by PTEs before the conversion happens on a single PTE corresponding to **addr**.”h]”jM)�”}”(hŒÊThis function always operates on individual PTEs mapping individual pages. PMD-sized THPs are first remapped to be mapped by PTEs before the conversion happens on a single PTE corresponding to **addr**.”h]”(hŒÁThis function always operates on individual PTEs mapping individual pages. PMD-sized THPs are first remapped to be mapped by PTEs before the conversion happens on a single PTE corresponding to ”…”�”}”(hjMDh²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hjUDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjMDubhŒ.”…”�”}”(hjMDh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M, hjIDubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjFDubjÕ/)�”}”(hŒ¶While concurrent access through the process page tables is prevented, concurrent access through other page references (e.g., earlier GUP invocation) is not handled and not supported.”h]”jM)�”}”(hŒ¶While concurrent access through the process page tables is prevented, concurrent access through other page references (e.g., earlier GUP invocation) is not handled and not supported.”h]”hŒ¶While concurrent access through the process page tables is prevented, concurrent access through other page references (e.g., earlier GUP invocation) is not handled and not supported.”…”�”}”(hjxDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M/ hjtDubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjFDubjÕ/)�”}”(hŒ‘device-exclusive entries are considered "clean" and "old" by core-mm. Device drivers must update the folio state when informed by MMU notifiers. ”h]”jM)�”}”(hŒ�device-exclusive entries are considered "clean" and "old" by core-mm. Device drivers must update the folio state when informed by MMU notifiers.”h]”hŒ˜device-exclusive entries are considered “cleanâ€� and “oldâ€� by core-mm. Device drivers must update the folio state when informed by MMU notifiers.”…”�”}”(hj‘Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M2 hj�Dubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjFDubeh}”(h]”h ]”h"]”h$]”h&]”j>0j?0j@0hjA0jB0uh1jÏ/hjBDubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jmDh´M, hjÍBubjM)�”}”(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&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M6 hjÍBubjM)�”}”(hŒ>pointer to mapped page on success, otherwise a negative error.”h]”hŒ>pointer to mapped page on success, otherwise a negative error.”…”�”}”(hjÊDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´M7 hjÍBubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ__rmap_walk_file (C function)”Œc.__rmap_walk_file”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ£void __rmap_walk_file (struct folio *folio, struct address_space *mapping, pgoff_t pgoff_start, unsigned long nr_pages, struct rmap_walk_control *rwc, bool locked)”h]”hù)�”}”(hŒ¢void __rmap_walk_file(struct folio *folio, struct address_space *mapping, pgoff_t pgoff_start, unsigned long nr_pages, struct rmap_walk_control *rwc, bool locked)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjùDh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjõDh²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/rmap.c”h´Mü ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjõDh²hh³jEh´Mü ubhÿ)�”}”(hŒ__rmap_walk_file”h]”j)�”}”(hŒ__rmap_walk_file”h]”hŒ__rmap_walk_file”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjEubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjõDh²hh³jEh´Mü ubj )�”}”(hŒ�(struct folio *folio, struct address_space *mapping, pgoff_t pgoff_start, unsigned long nr_pages, struct rmap_walk_control *rwc, bool locked)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj6Eh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj2EubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCEh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj2Eubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjTEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjQEubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jVEŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljEsbŒc.__rmap_walk_file”†”asbuh1hhj2EubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtEh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj2EubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj‚Eh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj2Eubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj�Eh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2Eubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj.Eubj )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¨Eh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¤EubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµEh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¤Eubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjÆEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÃEubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÈEŒmodname”NŒ classname”Njpjs)�”}”jv]”jpEŒc.__rmap_walk_file”†”asbuh1hhj¤EubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäEh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¤EubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjòEh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¤Eubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjÿEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤Eubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj.Eubj )�”}”(hŒpgoff_t pgoff_start”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjFubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jFŒmodname”NŒ classname”Njpjs)�”}”jv]”jpEŒc.__rmap_walk_file”†”asbuh1hhjFubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9Fh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjFubj)�”}”(hŒ pgoff_start”h]”hŒ pgoff_start”…”�”}”(hjGFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjFubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj.Eubj )�”}”(hŒunsigned long nr_pages”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj`Fh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj\FubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnFh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj\Fubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj|Fh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj\FubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠFh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj\Fubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hj˜Fh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj\Fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj.Eubj )�”}”(hŒstruct rmap_walk_control *rwc”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj±Fh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj­FubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾Fh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj­Fubh)�”}”(hhh]”j)�”}”(hŒrmap_walk_control”h]”hŒrmap_walk_control”…”�”}”(hjÏFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÌFubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÑFŒmodname”NŒ classname”Njpjs)�”}”jv]”jpEŒc.__rmap_walk_file”†”asbuh1hhj­FubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíFh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj­FubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjûFh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj­Fubj)�”}”(hŒrwc”h]”hŒrwc”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj­Fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj.Eubj )�”}”(hŒ bool locked”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hj!Gh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjGubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.Gh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjGubj)�”}”(hŒlocked”h]”hŒlocked”…”�”}”(hjmm->mmap_lock. **Return** Either an error, or the address at which the requested mapping has been performed.”h]”(jM)�”}”(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&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´Mhj=_ubj¤)�”}”(hhh]”(j©)�”}”(hŒ{``struct file *file`` An optional struct file pointer describing the file which is to be mapped, if a file-backed mapping. ”h]”(j¯)�”}”(hŒ``struct file *file``”h]”jS)�”}”(hjb_h]”hŒstruct file *file”…”�”}”(hjd_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj`_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´M:hj\_ubjÉ)�”}”(hhh]”jM)�”}”(hŒdAn optional struct file pointer describing the file which is to be mapped, if a file-backed mapping.”h]”hŒdAn optional struct file pointer describing the file which is to be mapped, if a file-backed mapping.”…”�”}”(hj{_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´M9hjx_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj\_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jw_h´M:hjY_ubj©)�”}”(hŒº``unsigned long addr`` If non-zero, hints at (or if **flags** has MAP_FIXED set, specifies) the address at which to perform this mapping. See mmap (2) for details. Must be page-aligned. ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hjœ_h]”hŒunsigned long addr”…”�”}”(hjž_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjš_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´M=hj–_ubjÉ)�”}”(hhh]”jM)�”}”(hŒ¢If non-zero, hints at (or if **flags** has MAP_FIXED set, specifies) the address at which to perform this mapping. See mmap (2) for details. Must be page-aligned.”h]”(hŒIf non-zero, hints at (or if ”…”�”}”(hjµ_h²hh³Nh´NubjŽ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hj½_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjµ_ubhŒ| has MAP_FIXED set, specifies) the address at which to perform this mapping. See mmap (2) for details. Must be page-aligned.”…”�”}”(hjµ_h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´M;hj²_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj–_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j±_h´M=hjY_ubj©)�”}”(hŒk``unsigned long len`` The length of the mapping. Will be page-aligned and must be at least 1 page in size. ”h]”(j¯)�”}”(hŒ``unsigned long len``”h]”jS)�”}”(hjè_h]”hŒunsigned long len”…”�”}”(hjê_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjæ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´M?hjâ_ubjÉ)�”}”(hhh]”jM)�”}”(hŒTThe length of the mapping. Will be page-aligned and must be at least 1 page in size.”h]”hŒTThe length of the mapping. Will be page-aligned and must be at least 1 page in size.”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´M>hjþ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjâ_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jý_h´M?hjY_ubj©)�”}”(hŒl``unsigned long prot`` Protection bits describing access required to the mapping. See mmap (2) for details. ”h]”(j¯)�”}”(hŒ``unsigned long prot``”h]”jS)�”}”(hj"`h]”hŒunsigned long prot”…”�”}”(hj$`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj `ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´MAhj`ubjÉ)�”}”(hhh]”jM)�”}”(hŒTProtection bits describing access required to the mapping. See mmap (2) for details.”h]”hŒTProtection bits describing access required to the mapping. See mmap (2) for details.”…”�”}”(hj;`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´M@hj8`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j7`h´MAhjY_ubj©)�”}”(hŒh``unsigned long flags`` Flags specifying how the mapping should be performed, see mmap (2) for details. ”h]”(j¯)�”}”(hŒ``unsigned long flags``”h]”jS)�”}”(hj\`h]”hŒunsigned long flags”…”�”}”(hj^`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjZ`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´MChjV`ubjÉ)�”}”(hhh]”jM)�”}”(hŒOFlags specifying how the mapping should be performed, see mmap (2) for details.”h]”hŒOFlags specifying how the mapping should be performed, see mmap (2) for details.”…”�”}”(hju`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´MBhjr`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjV`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jq`h´MChjY_ubj©)�”}”(hŒb``vma_flags_t vma_flags`` VMA flags which should be set by default, or EMPTY_VMA_FLAGS otherwise. ”h]”(j¯)�”}”(hŒ``vma_flags_t vma_flags``”h]”jS)�”}”(hj–`h]”hŒvma_flags_t vma_flags”…”�”}”(hj˜`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj”`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´MEhj�`ubjÉ)�”}”(hhh]”jM)�”}”(hŒGVMA flags which should be set by default, or EMPTY_VMA_FLAGS otherwise.”h]”hŒGVMA flags which should be set by default, or EMPTY_VMA_FLAGS otherwise.”…”�”}”(hj¯`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´MDhj¬`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j«`h´MEhjY_ubj©)�”}”(hŒ]``unsigned long pgoff`` Page offset into the **file** if file-backed, should be 0 otherwise. ”h]”(j¯)�”}”(hŒ``unsigned long pgoff``”h]”jS)�”}”(hjÐ`h]”hŒunsigned long pgoff”…”�”}”(hjÒ`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÎ`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´MFhjÊ`ubjÉ)�”}”(hhh]”jM)�”}”(hŒDPage offset into the **file** if file-backed, should be 0 otherwise.”h]”(hŒPage offset into the ”…”�”}”(hjé`h²hh³Nh´NubjŽ)�”}”(hŒ**file**”h]”hŒfile”…”�”}”(hjñ`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjé`ubhŒ' if file-backed, should be 0 otherwise.”…”�”}”(hjé`h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jå`h´MFhjæ`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÊ`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jå`h´MFhjY_ubj©)�”}”(hX ``unsigned long *populate`` A pointer to a value which will be set to 0 if no population of the range is required, or the number of bytes to populate if it is. Must be non-NULL. See mmap (2) for details as to under what circumstances population of the range occurs. ”h]”(j¯)�”}”(hŒ``unsigned long *populate``”h]”jS)�”}”(hjah]”hŒunsigned long *populate”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjaubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´MJhjaubjÉ)�”}”(hhh]”jM)�”}”(hŒíA pointer to a value which will be set to 0 if no population of the range is required, or the number of bytes to populate if it is. Must be non-NULL. See mmap (2) for details as to under what circumstances population of the range occurs.”h]”hŒíA pointer to a value which will be set to 0 if no population of the range is required, or the number of bytes to populate if it is. Must be non-NULL. See mmap (2) for details as to under what circumstances population of the range occurs.”…”�”}”(hj4ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´MGhj1aubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjaubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j0ah´MJhjY_ubj©)�”}”(hŒ±``struct list_head *uf`` An optional pointer to a list head to track userfaultfd unmap events should unmapping events arise. If provided, it is up to the caller to manage this. ”h]”(j¯)�”}”(hŒ``struct list_head *uf``”h]”jS)�”}”(hjUah]”hŒstruct list_head *uf”…”�”}”(hjWah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjSaubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´MMhjOaubjÉ)�”}”(hhh]”jM)�”}”(hŒ—An optional pointer to a list head to track userfaultfd unmap events should unmapping events arise. If provided, it is up to the caller to manage this.”h]”hŒ—An optional pointer to a list head to track userfaultfd unmap events should unmapping events arise. If provided, it is up to the caller to manage this.”…”�”}”(hjnah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´MKhjkaubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjOaubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jjah´MMhjY_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj=_ubjM)�”}”(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&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´MOhj=_ubjM)�”}”(hŒ°This function does not perform security checks on the file and assumes, if **uf** is non-NULL, the caller has provided a list head to track unmap events for userfaultfd **uf**.”h]”(hŒKThis function does not perform security checks on the file and assumes, if ”…”�”}”(hj§ah²hh³Nh´NubjŽ)�”}”(hŒ**uf**”h]”hŒuf”…”�”}”(hj¯ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj§aubhŒX is non-NULL, the caller has provided a list head to track unmap events for userfaultfd ”…”�”}”(hj§ah²hh³Nh´NubjŽ)�”}”(hŒ**uf**”h]”hŒuf”…”�”}”(hjÁah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj§aubhŒ.”…”�”}”(hj§ah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´Mhj=_ubjM)�”}”(hŒ¹It also simply indicates whether memory population is required by setting **populate**, which must be non-NULL, expecting the caller to actually perform this task itself if appropriate.”h]”(hŒJIt also simply indicates whether memory population is required by setting ”…”�”}”(hjÚah²hh³Nh´NubjŽ)�”}”(hŒ **populate**”h]”hŒpopulate”…”�”}”(hjâah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÚaubhŒc, which must be non-NULL, expecting the caller to actually perform this task itself if appropriate.”…”�”}”(hjÚah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´Mhj=_ubjM)�”}”(hŒÊThis function will invoke architecture-specific (and if provided and relevant, file system-specific) logic to determine the most appropriate unmapped area in which to place the mapping if not MAP_FIXED.”h]”hŒÊThis function will invoke architecture-specific (and if provided and relevant, file system-specific) logic to determine the most appropriate unmapped area in which to place the mapping if not MAP_FIXED.”…”�”}”(hjûah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´M"hj=_ubjM)�”}”(hŒoCallers which require userland mmap() behaviour should invoke vm_mmap(), which is also exported for module use.”h]”hŒoCallers which require userland mmap() behaviour should invoke vm_mmap(), which is also exported for module use.”…”�”}”(hj bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´M&hj=_ubjM)�”}”(hŒ¦Those which require this behaviour less security checks, userfaultfd and populate behaviour, and who handle the mmap write lock themselves, should call this function.”h]”hŒ¦Those which require this behaviour less security checks, userfaultfd and populate behaviour, and who handle the mmap write lock themselves, should call this function.”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´M)hj=_ubjM)�”}”(hX Note that the returned address may reside within a merged VMA if an appropriate merge were to take place, so it doesn't necessarily specify the start of a VMA, rather only the start of a valid mapped range of length **len** bytes, rounded down to the nearest page size.”h]”(hŒÚNote that the returned address may reside within a merged VMA if an appropriate merge were to take place, so it doesn’t necessarily specify the start of a VMA, rather only the start of a valid mapped range of length ”…”�”}”(hj(bh²hh³Nh´NubjŽ)�”}”(hŒ**len**”h]”hŒlen”…”�”}”(hj0bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj(bubhŒ. bytes, rounded down to the nearest page size.”…”�”}”(hj(bh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´M-hj=_ubjM)�”}”(hŒ2The caller must write-lock current->mm->mmap_lock.”h]”hŒ2The caller must write-lock current->mm->mmap_lock.”…”�”}”(hjIbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´M2hj=_ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjZbh]”hŒReturn”…”�”}”(hj\bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjXbubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´M4hj=_ubjM)�”}”(hŒREither an error, or the address at which the requested mapping has been performed.”h]”hŒREither an error, or the address at which the requested mapping has been performed.”…”�”}”(hjpbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´MOhj=_ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"find_vma_intersection (C function)”Œc.find_vma_intersection”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒvstruct vm_area_struct * find_vma_intersection (struct mm_struct *mm, unsigned long start_addr, unsigned long end_addr)”h]”hù)�”}”(hŒtstruct vm_area_struct *find_vma_intersection(struct mm_struct *mm, unsigned long start_addr, unsigned long end_addr)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjŸbh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj›bh²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:116: ./mm/mmap.c”h´M{ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­bh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj›bh²hh³j¬bh´M{ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj¾bh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj»bubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÀbŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒfind_vma_intersection”sbŒc.find_vma_intersection”†”asbuh1hhj›bh²hh³j¬bh´M{ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßbh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj›bh²hh³j¬bh´M{ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjíbh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj›bh²hh³j¬bh´M{ubhÿ)�”}”(hŒfind_vma_intersection”h]”j)�”}”(hjÜbh]”hŒfind_vma_intersection”…”�”}”(hjþbh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjúbubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj›bh²hh³j¬bh´M{ubj )�”}”(hŒH(struct mm_struct *mm, unsigned long start_addr, unsigned long end_addr)”h]”(j )�”}”(hŒstruct mm_struct *mm”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjcubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&ch²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjcubh)�”}”(hhh]”j)�”}”(hŒ mm_struct”h]”hŒ mm_struct”…”�”}”(hj7ch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j9cŒmodname”NŒ classname”Njpjs)�”}”jv]”jÚbŒc.find_vma_intersection”†”asbuh1hhjcubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUch²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjcubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjcch²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjcubj)�”}”(hŒmm”h]”hŒmm”…”�”}”(hjpch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjcubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjcubj )�”}”(hŒunsigned long start_addr”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj‰ch²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj…cubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—ch²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj…cubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj¥ch²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj…cubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³ch²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj…cubj)�”}”(hŒ start_addr”h]”hŒ start_addr”…”�”}”(hjÁch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj…cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjcubj )�”}”(hŒunsigned long end_addr”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÚch²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÖcubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèch²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÖcubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjöch²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÖcubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÖcubj)�”}”(hŒend_addr”h]”hŒend_addr”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÖcubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjcubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj›bh²hh³j¬bh´M{ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj—bh²hh³j¬bh´M{ubah}”(h]”j’bah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¬bh´M{hj”bh²hubj4)�”}”(hhh]”jM)�”}”(hŒ3Look up the first VMA which intersects the interval”h]”hŒ3Look up the first VMA which intersects the interval”…”�”}”(hjminimum number of references to this object. If during memory scanning a number of references less than **min_count** is found, the object is reported as a memory leak. If **min_count** is 0, the object is never reported as a leak. If **min_count** is -1, the object is ignored (not scanned and not reported as a leak)”h]”(hŒhminimum number of references to this object. If during memory scanning a number of references less than ”…”�”}”(hj‚mh²hh³Nh´NubjŽ)�”}”(hŒ **min_count**”h]”hŒ min_count”…”�”}”(hjŠmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‚mubhŒ7 is found, the object is reported as a memory leak. If ”…”�”}”(hj‚mh²hh³Nh´NubjŽ)�”}”(hŒ **min_count**”h]”hŒ min_count”…”�”}”(hjœmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‚mubhŒ2 is 0, the object is never reported as a leak. If ”…”�”}”(hj‚mh²hh³Nh´NubjŽ)�”}”(hŒ **min_count**”h]”hŒ min_count”…”�”}”(hj®mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‚mubhŒF is -1, the object is ignored (not scanned and not reported as a leak)”…”�”}”(hj‚mh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MNhjmubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjcmubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j~mh´MRhjîlubj©)�”}”(hŒL``gfp_t gfp`` kmalloc() flags used for kmemleak internal memory allocations ”h]”(j¯)�”}”(hŒ ``gfp_t gfp``”h]”jS)�”}”(hjÙmh]”hŒ gfp_t gfp”…”�”}”(hjÛmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj×mubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MShjÓmubjÉ)�”}”(hhh]”jM)�”}”(hŒ=kmalloc() flags used for kmemleak internal memory allocations”h]”hŒ=kmalloc() flags used for kmemleak internal memory allocations”…”�”}”(hjòmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jîmh´MShjïmubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÓmubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jîmh´MShjîlubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÒlubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjnh]”hŒ Description”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjnubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MUhjÒlubjM)�”}”(hŒ‚This function is called from the kernel allocators when a new object (memory block) is allocated (kmem_cache_alloc, kmalloc etc.).”h]”hŒ‚This function is called from the kernel allocators when a new object (memory block) is allocated (kmem_cache_alloc, kmalloc etc.).”…”�”}”(hj*nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MThjÒlubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"kmemleak_alloc_percpu (C function)”Œc.kmemleak_alloc_percpu”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒSvoid __ref kmemleak_alloc_percpu (const void __percpu *ptr, size_t size, gfp_t gfp)”h]”hù)�”}”(hŒRvoid __ref kmemleak_alloc_percpu(const void __percpu *ptr, size_t size, gfp_t gfp)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjYnh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjUnh²hh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´McubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhnh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjUnh²hh³jgnh´McubhŒ__ref”…”�”}”(hjUnh²hh³Nh´NubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjznh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjUnh²hh³jgnh´Mcubhÿ)�”}”(hŒkmemleak_alloc_percpu”h]”j)�”}”(hŒkmemleak_alloc_percpu”h]”hŒkmemleak_alloc_percpu”…”�”}”(hjŒnh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjˆnubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjUnh²hh³jgnh´Mcubj )�”}”(hŒ2(const void __percpu *ptr, size_t size, gfp_t gfp)”h]”(j )�”}”(hŒconst void __percpu *ptr”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj¨nh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¤nubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµnh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¤nubjµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÃnh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¤nubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑnh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¤nubhŒ__percpu”…”�”}”(hj¤nh²hh³Nh´NubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãnh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¤nubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjñnh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¤nubj)�”}”(hŒptr”h]”hŒptr”…”�”}”(hjþnh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤nubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj nubj )�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjoubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”joŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljŽnsbŒc.kmemleak_alloc_percpu”†”asbuh1hhjoubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:oh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjoubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjHoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjoubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj nubj )�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjdoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjaoubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jfoŒmodname”NŒ classname”Njpjs)�”}”jv]”j6oŒc.kmemleak_alloc_percpu”†”asbuh1hhj]oubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚oh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj]oubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj�oh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj]oubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj nubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjUnh²hh³jgnh´Mcubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjQnh²hh³jgnh´Mcubah}”(h]”jLnah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jgnh´MchjNnh²hubj4)�”}”(hhh]”jM)�”}”(hŒ*register a newly allocated __percpu object”h]”hŒ*register a newly allocated __percpu object”…”�”}”(hjºoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´Mchj·oh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjNnh²hh³jgnh´Mcubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÒojHjÒojI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXN**Parameters** ``const void __percpu *ptr`` __percpu pointer to beginning of the object ``size_t size`` size of the object ``gfp_t gfp`` flags used for kmemleak internal memory allocations **Description** This function is called from the kernel percpu allocator when a new object (memory block) is allocated (alloc_percpu).”h]”(jM)�”}”(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&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MghjÖoubj¤)�”}”(hhh]”(j©)�”}”(hŒI``const void __percpu *ptr`` __percpu pointer to beginning of the object ”h]”(j¯)�”}”(hŒ``const void __percpu *ptr``”h]”jS)�”}”(hjûoh]”hŒconst void __percpu *ptr”…”�”}”(hjýoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjùoubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MdhjõoubjÉ)�”}”(hhh]”jM)�”}”(hŒ+__percpu pointer to beginning of the object”h]”hŒ+__percpu pointer to beginning of the object”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jph´Mdhjpubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjõoubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jph´Mdhjòoubj©)�”}”(hŒ#``size_t size`` size of the object ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hj4ph]”hŒ size_t size”…”�”}”(hj6ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj2pubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´Mehj.pubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of the object”h]”hŒsize of the object”…”�”}”(hjMph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jIph´MehjJpubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj.pubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jIph´Mehjòoubj©)�”}”(hŒB``gfp_t gfp`` flags used for kmemleak internal memory allocations ”h]”(j¯)�”}”(hŒ ``gfp_t gfp``”h]”jS)�”}”(hjmph]”hŒ gfp_t gfp”…”�”}”(hjoph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjkpubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MfhjgpubjÉ)�”}”(hhh]”jM)�”}”(hŒ3flags used for kmemleak internal memory allocations”h]”hŒ3flags used for kmemleak internal memory allocations”…”�”}”(hj†ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‚ph´Mfhjƒpubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjgpubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‚ph´Mfhjòoubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÖoubjM)�”}”(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&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MhhjÖoubjM)�”}”(hŒvThis function is called from the kernel percpu allocator when a new object (memory block) is allocated (alloc_percpu).”h]”hŒvThis function is called from the kernel percpu allocator when a new object (memory block) is allocated (alloc_percpu).”…”�”}”(hj¾ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MghjÖoubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmemleak_vmalloc (C function)”Œc.kmemleak_vmalloc”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒRvoid __ref kmemleak_vmalloc (const struct vm_struct *area, size_t size, gfp_t gfp)”h]”hù)�”}”(hŒQvoid __ref kmemleak_vmalloc(const struct vm_struct *area, size_t size, gfp_t gfp)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjíph²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjéph²hh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MvubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüph²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjéph²hh³jûph´MvubhŒ__ref”…”�”}”(hjéph²hh³Nh´NubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjéph²hh³jûph´Mvubhÿ)�”}”(hŒkmemleak_vmalloc”h]”j)�”}”(hŒkmemleak_vmalloc”h]”hŒkmemleak_vmalloc”…”�”}”(hj qh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjqubah}”(h]”h •]”(jjeh"]”h$]”h&]”jjuh1hþhjéph²hh³jûph´Mvubj )�”}”(hŒ6(const struct vm_struct *area, size_t size, gfp_t gfp)”h]”(j )�”}”(hŒconst struct vm_struct *area”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjvubj¤)�”}”(hhh]”(j©)�”}”(hŒ{``const void *ptr`` pointer to the beginning or inside the object. This also represents the start of the range to be freed ”h]”(j¯)�”}”(hŒ``const void *ptr``”h]”jS)�”}”(hjcvh]”hŒconst void *ptr”…”�”}”(hjevh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjavubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M¡hj]vubjÉ)�”}”(hhh]”jM)�”}”(hŒfpointer to the beginning or inside the object. This also represents the start of the range to be freed”h]”hŒfpointer to the beginning or inside the object. This also represents the start of the range to be freed”…”�”}”(hj|vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M hjyvubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj]vubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jxvh´M¡hjZvubj©)�”}”(hŒ(``size_t size`` size to be unregistered ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hj�vh]”hŒ size_t size”…”�”}”(hjŸvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj›vubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M¢hj—vubjÉ)�”}”(hhh]”jM)�”}”(hŒsize to be unregistered”h]”hŒsize to be unregistered”…”�”}”(hj¶vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j²vh´M¢hj³vubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj—vubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j²vh´M¢hjZvubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj>vubjM)�”}”(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&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M¤hj>vubjM)�”}”(hŒiThis function is called when only a part of a memory block is freed (usually from the bootmem allocator).”h]”hŒiThis function is called when only a part of a memory block is freed (usually from the bootmem allocator).”…”�”}”(hjîvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M£hj>vubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!kmemleak_free_percpu (C function)”Œc.kmemleak_free_percpu”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ:void __ref kmemleak_free_percpu (const void __percpu *ptr)”h]”hù)�”}”(hŒ9void __ref kmemleak_free_percpu(const void __percpu *ptr)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjwh²hh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M±ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,wh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjwh²hh³j+wh´M±ubhŒ__ref”…”�”}”(hjwh²hh³Nh´NubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>wh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjwh²hh³j+wh´M±ubhÿ)�”}”(hŒkmemleak_free_percpu”h]”j)�”}”(hŒkmemleak_free_percpu”h]”hŒkmemleak_free_percpu”…”�”}”(hjPwh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjLwubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjwh²hh³j+wh´M±ubj )�”}”(hŒ(const void __percpu *ptr)”h]”j )�”}”(hŒconst void __percpu *ptr”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjlwh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjhwubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjywh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjhwubjµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‡wh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjhwubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•wh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjhwubhŒ__percpu”…”�”}”(hjhwh²hh³Nh´NubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§wh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjhwubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjµwh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjhwubj)�”}”(hŒptr”h]”hŒptr”…”�”}”(hjÂwh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjhwubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjdwubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjwh²hh³j+wh´M±ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjwh²hh³j+wh´M±ubah}”(h]”jwah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j+wh´M±hjwh²hubj4)�”}”(hhh]”jM)�”}”(hŒ2unregister a previously registered __percpu object”h]”hŒ2unregister a previously registered __percpu object”…”�”}”(hjìwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M±hjéwh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjwh²hh³j+wh´M±ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjxjHjxjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒÛ**Parameters** ``const void __percpu *ptr`` __percpu pointer to beginning of the object **Description** This function is called from the kernel percpu allocator when an object (memory block) is freed (free_percpu).”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjxh]”hŒ Parameters”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj xubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´Mµhjxubj¤)�”}”(hhh]”j©)�”}”(hŒI``const void __percpu *ptr`` __percpu pointer to beginning of the object ”h]”(j¯)�”}”(hŒ``const void __percpu *ptr``”h]”jS)�”}”(hj-xh]”hŒconst void __percpu *ptr”…”�”}”(hj/xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj+xubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M²hj'xubjÉ)�”}”(hhh]”jM)�”}”(hŒ+__percpu pointer to beginning of the object”h]”hŒ+__percpu pointer to beginning of the object”…”�”}”(hjFxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jBxh´M²hjCxubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj'xubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jBxh´M²hj$xubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjxubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjhxh]”hŒ Description”…”�”}”(hjjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjfxubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M´hjxubjM)�”}”(hŒnThis function is called from the kernel percpu allocator when an object (memory block) is freed (free_percpu).”h]”hŒnThis function is called from the kernel percpu allocator when an object (memory block) is freed (free_percpu).”…”�”}”(hj~xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M³hjxubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"kmemleak_update_trace (C function)”Œc.kmemleak_update_trace”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ2void __ref kmemleak_update_trace (const void *ptr)”h]”hù)�”}”(hŒ1void __ref kmemleak_update_trace(const void *ptr)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj­xh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj©xh²hh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MÁubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼xh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj©xh²hh³j»xh´MÁubhŒ__ref”…”�”}”(hj©xh²hh³Nh´NubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎxh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj©xh²hh³j»xh´MÁubhÿ)�”}”(hŒkmemleak_update_trace”h]”j)�”}”(hŒkmemleak_update_trace”h]”hŒkmemleak_update_trace”…”�”}”(hjàxh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÜxubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj©xh²hh³j»xh´MÁubj )�”}”(hŒ(const void *ptr)”h]”j )�”}”(hŒconst void *ptr”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjüxh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjøxubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj yh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjøxubjµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjøxubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%yh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjøxubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj3yh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjøxubj)�”}”(hŒptr”h]”hŒptr”…”�”}”(hj@yh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjøxubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjôxubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj©xh²hh³j»xh´MÁubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¥xh²hh³j»xh´MÁubah}”(h]”j xah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j»xh´MÁhj¢xh²hubj4)�”}”(hhh]”jM)�”}”(hŒ$update object allocation stack trace”h]”hŒ$update object allocation stack trace”…”�”}”(hjjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MÁhjgyh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¢xh²hh³j»xh´MÁubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj‚yjHj‚yjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒÇ**Parameters** ``const void *ptr`` pointer to beginning of the object **Description** Override the object allocation stack trace for cases where the actual allocation place is not always useful.”h]”(jM)�”}”(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&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MÅhj†yubj¤)�”}”(hhh]”j©)�”}”(hŒ7``const void *ptr`` pointer to beginning of the object ”h]”(j¯)�”}”(hŒ``const void *ptr``”h]”jS)�”}”(hj«yh]”hŒconst void *ptr”…”�”}”(hj­yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj©yubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MÂhj¥yubjÉ)�”}”(hhh]”jM)�”}”(hŒ"pointer to beginning of the object”h]”hŒ"pointer to beginning of the object”…”�”}”(hjÄyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÀyh´MÂhjÁyubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¥yubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÀyh´MÂhj¢yubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj†yubjM)�”}”(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&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MÄhj†yubjM)�”}”(hŒlOverride the object allocation stack trace for cases where the actual allocation place is not always useful.”h]”hŒlOverride the object allocation stack trace for cases where the actual allocation place is not always useful.”…”�”}”(hjüyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MÃhj†yubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmemleak_not_leak (C function)”Œc.kmemleak_not_leak”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ.void __ref kmemleak_not_leak (const void *ptr)”h]”hù)�”}”(hŒ-void __ref kmemleak_not_leak(const void *ptr)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj+zh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj'zh²hh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MåubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:zh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj'zh²hh³j9zh´MåubhŒ__ref”…”�”}”(hj'zh²hh³Nh´NubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLzh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj'zh²hh³j9zh´Måubhÿ)�”}”(hŒkmemleak_not_leak”h]”j)�”}”(hŒkmemleak_not_leak”h]”hŒkmemleak_not_leak”…”�”}”(hj^zh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjZzubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj'zh²hh³j9zh´Måubj )�”}”(hŒ(const void *ptr)”h]”j )�”}”(hŒconst void *ptr”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjzzh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjvzubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡zh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjvzubjµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj•zh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjvzubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£zh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjvzubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj±zh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjvzubj)�”}”(hŒptr”h]”hŒptr”…”�”}”(hj¾zh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjvzubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjrzubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj'zh²hh³j9zh´Måubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj#zh²hh³j9zh´Måubah}”(h]”jzah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j9zh´Måhj zh²hubj4)�”}”(hhh]”jM)�”}”(hŒ*mark an allocated object as false positive”h]”hŒ*mark an allocated object as false positive”…”�”}”(hjèzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´Måhjåzh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj zh²hh³j9zh´Måubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj{jHj{jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒÑ**Parameters** ``const void *ptr`` pointer to beginning of the object **Description** Calling this function on an object will cause the memory block to no longer be reported as leak and always be scanned.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj {h]”hŒ Parameters”…”�”}”(hj {h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´Méhj{ubj¤)�”}”(hhh]”j©)�”}”(hŒ7``const void *ptr`` pointer to beginning of the object ”h]”(j¯)�”}”(hŒ``const void *ptr``”h]”jS)�”}”(hj){h]”hŒconst void *ptr”…”�”}”(hj+{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj'{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´Mæhj#{ubjÉ)�”}”(hhh]”jM)�”}”(hŒ"pointer to beginning of the object”h]”hŒ"pointer to beginning of the object”…”�”}”(hjB{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j>{h´Mæhj?{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj#{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j>{h´Mæhj {ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj{ubjM)�”}”(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&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´Mèhj{ubjM)�”}”(hŒvCalling this function on an object will cause the memory block to no longer be reported as leak and always be scanned.”h]”hŒvCalling this function on an object will cause the memory block to no longer be reported as leak and always be scanned.”…”�”}”(hjz{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.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”]”(héŒ$kmemleak_transient_leak (C function)”Œc.kmemleak_transient_leak”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ4void __ref kmemleak_transient_leak (const void *ptr)”h]”hù)�”}”(hŒ3void __ref kmemleak_transient_leak(const void *ptr)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj©{h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¥{h²hh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MõubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸{h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¥{h²hh³j·{h´MõubhŒ__ref”…”�”}”(hj¥{h²hh³Nh´NubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊ{h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¥{h²hh³j·{h´Mõubhÿ)�”}”(hŒkmemleak_transient_leak”h]”j)�”}”(hŒkmemleak_transient_leak”h]”hŒkmemleak_transient_leak”…”�”}”(hjÜ{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjØ{ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¥{h²hh³j·{h´Mõubj )�”}”(hŒ(const void *ptr)”h]”j )�”}”(hŒconst void *ptr”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjø{h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjô{ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjô{ubjµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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ô{ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj/|h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjô{ubj)�”}”(hŒptr”h]”hŒptr”…”�”}”(hj<|h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjô{ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjð{ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¥{h²hh³j·{h´Mõubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¡{h²hh³j·{h´Mõubah}”(h]”jœ{ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j·{h´Mõhjž{h²hubj4)�”}”(hhh]”jM)�”}”(hŒ4mark an allocated object as transient false positive”h]”hŒ4mark an allocated object as transient false positive”…”�”}”(hjf|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´Mõhjc|h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjž{h²hh³j·{h´Mõubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj~|jHj~|jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX:**Parameters** ``const void *ptr`` pointer to beginning of the object **Description** Calling this function on an object will cause the memory block to not be reported as a leak temporarily. This may happen, for example, if the object is part of a singly linked list and the ->next reference to it is changed.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjˆ|h]”hŒ Parameters”…”�”}”(hjŠ|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj†|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´Mùhj‚|ubj¤)�”}”(hhh]”j©)�”}”(hŒ7``const void *ptr`` pointer to beginning of the object ”h]”(j¯)�”}”(hŒ``const void *ptr``”h]”jS)�”}”(hj§|h]”hŒconst void *ptr”…”�”}”(hj©|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¥|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´Möhj¡|ubjÉ)�”}”(hhh]”jM)�”}”(hŒ"pointer to beginning of the object”h]”hŒ"pointer to beginning of the object”…”�”}”(hjÀ|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¼|h´Möhj½|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¡|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¼|h´Möhjž|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj‚|ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjâ|h]”hŒ Description”…”�”}”(hjä|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjà|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´Møhj‚|ubjM)�”}”(hŒßCalling this function on an object will cause the memory block to not be reported as a leak temporarily. This may happen, for example, if the object is part of a singly linked list and the ->next reference to it is changed.”h]”hŒßCalling this function on an object will cause the memory block to not be reported as a leak temporarily. This may happen, for example, if the object is part of a singly linked list and the ->next reference to it is changed.”…”�”}”(hjø|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.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”]”(héŒ#kmemleak_ignore_percpu (C function)”Œc.kmemleak_ignore_percpu”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ€ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj €h²hh³j€h´M&ubj )�”}”(hŒ)(const void *ptr, size_t size, gfp_t gfp)”h]”(j )�”}”(hŒconst void *ptr”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj^€h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjZ€ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjk€h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjZ€ubjµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjy€h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjZ€ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡€h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjZ€ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj•€h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjZ€ubj)�”}”(hŒptr”h]”hŒptr”…”�”}”(hj¢€h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjZ€ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjV€ubj )�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj¾€h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj»€ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÀ€Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljD€sbŒc.kmemleak_scan_area”†”asbuh1hhj·€ubjÇ)�”}”(hŒ ”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 ]”jah"]”h$]”h&]”uh1jhj·€ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjV€ubj )�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j �Œmodname”NŒ classname”Njpjs)�”}”jv]”jÚ€Œc.kmemleak_scan_area”†”asbuh1hhj�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�ubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj4�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjV€ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj €h²hh³j€h´M&ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj€h²hh³j€h´M&ubah}”(h]”j€ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j€h´M&hj€h²hubj4)�”}”(hhh]”jM)�”}”(hŒ4limit the range to be scanned in an allocated object”h]”hŒ4limit the range to be scanned in an allocated object”…”�”}”(hj^�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M&hj[�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj€h²hh³j€h´M&ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjv�jHjv�jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXÆ**Parameters** ``const void *ptr`` pointer to beginning or inside the object. This also represents the start of the scan area ``size_t size`` size of the scan area ``gfp_t gfp`` kmalloc() flags used for kmemleak internal memory allocations **Description** This function is used when it is known that only certain parts of an object contain references to other objects. Kmemleak will only scan these areas reducing the number false negatives.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj€�h]”hŒ Parameters”…”�”}”(hj‚�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj~�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M*hjz�ubj¤)�”}”(hhh]”(j©)�”}”(hŒo``const void *ptr`` pointer to beginning or inside the object. This also represents the start of the scan area ”h]”(j¯)�”}”(hŒ``const void *ptr``”h]”jS)�”}”(hjŸ�h]”hŒconst void *ptr”…”�”}”(hj¡�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj��ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M(hj™�ubjÉ)�”}”(hhh]”jM)�”}”(hŒZpointer to beginning or inside the object. This also represents the start of the scan area”h]”hŒZpointer to beginning or inside the object. This also represents the start of the scan area”…”�”}”(hj¸�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M'hjµ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj™�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j´�h´M(hj–�ubj©)�”}”(hŒ&``size_t size`` size of the scan area ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hjÙ�h]”hŒ size_t size”…”�”}”(hjÛ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj×�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M)hjÓ�ubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of the scan area”h]”hŒsize of the scan area”…”�”}”(hjò�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jî�h´M)hjï�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÓ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jî�h´M)hj–�ubj©)�”}”(hŒL``gfp_t gfp`` kmalloc() flags used for kmemleak internal memory allocations ”h]”(j¯)�”}”(hŒ ``gfp_t gfp``”h]”jS)�”}”(hj‚h]”hŒ gfp_t gfp”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M*hj ‚ubjÉ)�”}”(hhh]”jM)�”}”(hŒ=kmalloc() flags used for kmemleak internal memory allocations”h]”hŒ=kmalloc() flags used for kmemleak internal memory allocations”…”�”}”(hj+‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j'‚h´M*hj(‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j'‚h´M*hj–�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjz�ubjM)�”}”(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&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M,hjz�ubjM)�”}”(hŒ¹This function is used when it is known that only certain parts of an object contain references to other objects. Kmemleak will only scan these areas reducing the number false negatives.”h]”hŒ¹This function is used when it is known that only certain parts of an object contain references to other objects. Kmemleak will only scan these areas reducing the number false negatives.”…”�”}”(hjc‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M+hjz�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmemleak_no_scan (C function)”Œc.kmemleak_no_scan”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ-void __ref kmemleak_no_scan (const void *ptr)”h]”hù)�”}”(hŒ,void __ref kmemleak_no_scan(const void *ptr)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj’‚h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjŽ‚h²hh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M:ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡‚h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŽ‚h²hh³j ‚h´M:ubhŒ__ref”…”�”}”(hjŽ‚h²hh³Nh´NubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³‚h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŽ‚h²hh³j ‚h´M:ubhÿ)�”}”(hŒkmemleak_no_scan”h]”j)�”}”(hŒkmemleak_no_scan”h]”hŒkmemleak_no_scan”…”�”}”(hjÅ‚h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÁ‚ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjŽ‚h²hh³j ‚h´M:ubj )�”}”(hŒ(const void *ptr)”h]”j )�”}”(hŒconst void *ptr”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjá‚h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÝ‚ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî‚h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÝ‚ubjµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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Ý‚ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÝ‚ubj)�”}”(hŒptr”h]”hŒptr”…”�”}”(hj%ƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÝ‚ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÙ‚ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjŽ‚h²hh³j ‚h´M:ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjŠ‚h²hh³j ‚h´M:ubah}”(h]”j…‚ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j ‚h´M:hj‡‚h²hubj4)�”}”(hhh]”jM)�”}”(hŒdo not scan an allocated object”h]”hŒdo not scan an allocated object”…”�”}”(hjOƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M:hjLƒh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj‡‚h²hh³j ‚h´M:ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjgƒjHjgƒjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXY**Parameters** ``const void *ptr`` pointer to beginning of the object **Description** This function notifies kmemleak not to scan the given memory block. Useful in situations where it is known that the given object does not contain any references to other objects. Kmemleak will not scan such objects reducing the number of false negatives.”h]”(jM)�”}”(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&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M>hjkƒubj¤)�”}”(hhh]”j©)�”}”(hŒ7``const void *ptr`` pointer to beginning of the object ”h]”(j¯)�”}”(hŒ``const void *ptr``”h]”jS)�”}”(hj�ƒh]”hŒconst void *ptr”…”�”}”(hj’ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjŽƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M;hjŠƒubjÉ)�”}”(hhh]”jM)�”}”(hŒ"pointer to beginning of the object”h]”hŒ"pointer to beginning of the object”…”�”}”(hj©ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¥ƒh´M;hj¦ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjŠƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¥ƒh´M;hj‡ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjkƒubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj˃h]”hŒ Description”…”�”}”(hj̓h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjɃubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M=hjkƒubjM)�”}”(hŒþThis function notifies kmemleak not to scan the given memory block. Useful in situations where it is known that the given object does not contain any references to other objects. Kmemleak will not scan such objects reducing the number of false negatives.”h]”hŒþThis function notifies kmemleak not to scan the given memory block. Useful in situations where it is known that the given object does not contain any references to other objects. Kmemleak will not scan such objects reducing the number of false negatives.”…”�”}”(hjáƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.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”]”(héŒ kmemleak_alloc_phys (C function)”Œc.kmemleak_alloc_phys”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒIvoid __ref kmemleak_alloc_phys (phys_addr_t phys, size_t size, gfp_t gfp)”h]”hù)�”}”(hŒHvoid __ref kmemleak_alloc_phys(phys_addr_t phys, size_t size, gfp_t gfp)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj „h²hh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MLubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj „h²hh³j„h´MLubhŒ__ref”…”�”}”(hj „h²hh³Nh´NubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1„h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj „h²hh³j„h´MLubhÿ)�”}”(hŒkmemleak_alloc_phys”h]”j)�”}”(hŒkmemleak_alloc_phys”h]”hŒkmemleak_alloc_phys”…”�”}”(hjC„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj?„ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj „h²hh³j„h´MLubj )�”}”(hŒ*(phys_addr_t phys, size_t size, gfp_t gfp)”h]”(j )�”}”(hŒphys_addr_t phys”h]”(h)�”}”(hhh]”j)�”}”(hŒ phys_addr_t”h]”hŒ phys_addr_t”…”�”}”(hjb„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj_„ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jd„Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljE„sbŒc.kmemleak_alloc_phys”†”asbuh1hhj[„ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚„h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj[„ubj)�”}”(hŒphys”h]”hŒphys”…”�”}”(hj�„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj[„ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjW„ubj )�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj¬„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj©„ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j®„Œmodname”NŒ classname”Njpjs)�”}”jv]”j~„Œc.kmemleak_alloc_phys”†”asbuh1hhj¥„ubjÇ)�”}”(hŒ ”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 ]”jah"]”h$]”h&]”uh1jhj¥„ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjW„ubj )�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjô„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñ„ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jö„Œmodname”NŒ classname”Njpjs)�”}”jv]”j~„Œc.kmemleak_alloc_phys”†”asbuh1hhjí„ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjí„ubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj …h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjí„ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjW„ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj „h²hh³j„h´MLubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj„h²hh³j„h´MLubah}”(h]”j„ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j„h´MLhj„h²hubj4)�”}”(hhh]”jM)�”}”(hŒ@similar to kmemleak_alloc but taking a physical address argument”h]”hŒ@similar to kmemleak_alloc but taking a physical address argument”…”�”}”(hjJ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MLhjG…h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj„h²hh³j„h´MLubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjb…jHjb…jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒº**Parameters** ``phys_addr_t phys`` physical address of the object ``size_t size`` size of the object ``gfp_t gfp`` kmalloc() flags used for kmemleak internal memory allocations”h]”(jM)�”}”(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&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MPhjf…ubj¤)�”}”(hhh]”(j©)�”}”(hŒ4``phys_addr_t phys`` physical address of the object ”h]”(j¯)�”}”(hŒ``phys_addr_t phys``”h]”jS)�”}”(hj‹…h]”hŒphys_addr_t phys”…”�”}”(hj�…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‰…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MNhj……ubjÉ)�”}”(hhh]”jM)�”}”(hŒphysical address of the object”h]”hŒphysical address of the object”…”�”}”(hj¤…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j …h´MNhj¡…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj……ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j …h´MNhj‚…ubj©)�”}”(hŒ#``size_t size`` size of the object ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hjÄ…h]”hŒ size_t size”…”�”}”(hjÆ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÂ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MOhj¾…ubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of the object”h]”hŒsize of the object”…”�”}”(hjÝ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÙ…h´MOhjÚ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¾…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÙ…h´MOhj‚…ubj©)�”}”(hŒK``gfp_t gfp`` kmalloc() flags used for kmemleak internal memory allocations”h]”(j¯)�”}”(hŒ ``gfp_t gfp``”h]”jS)�”}”(hjý…h]”hŒ gfp_t gfp”…”�”}”(hjÿ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjû…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MQhj÷…ubjÉ)�”}”(hhh]”jM)�”}”(hŒ=kmalloc() flags used for kmemleak internal memory allocations”h]”hŒ=kmalloc() flags used for kmemleak internal memory allocations”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MPhj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj÷…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j†h´MQhj‚…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjf…ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$kmemleak_free_part_phys (C function)”Œc.kmemleak_free_part_phys”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒBvoid __ref kmemleak_free_part_phys (phys_addr_t phys, size_t size)”h]”hù)�”}”(hŒAvoid __ref kmemleak_free_part_phys(phys_addr_t phys, size_t size)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjW†h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjS†h²hh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M`ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjf†h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjS†h²hh³je†h´M`ubhŒ__ref”…”�”}”(hjS†h²hh³Nh´NubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjx†h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjS†h²hh³je†h´M`ubhÿ)�”}”(hŒkmemleak_free_part_phys”h]”j)�”}”(hŒkmemleak_free_part_phys”h]”hŒkmemleak_free_part_phys”…”�”}”(hjІh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj††ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjS†h²hh³je†h´M`ubj )�”}”(hŒ(phys_addr_t phys, size_t size)”h]”(j )�”}”(hŒphys_addr_t phys”h]”(h)�”}”(hhh]”j)�”}”(hŒ phys_addr_t”h]”hŒ phys_addr_t”…”�”}”(hj©†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦†ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j«†Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljŒ†sbŒc.kmemleak_free_part_phys”†”asbuh1hhj¢†ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjɆh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¢†ubj)�”}”(hŒphys”h]”hŒphys”…”�”}”(hj׆h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¢†ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjž†ubj )�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjó†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjð†ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jõ†Œmodname”NŒ classname”Njpjs)�”}”jv]”jņŒc.kmemleak_free_part_phys”†”asbuh1hhjì†ubjÇ)�”}”(hŒ ”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 ]”jah"]”h$]”h&]”uh1jhjì†ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjž†ubeh}”(h•4]”h ]”h"]”h$]”h&]”jjuh1j hjS†h²hh³je†h´M`ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjO†h²hh³je†h´M`ubah}”(h]”jJ†ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³je†h´M`hjL†h²hubj4)�”}”(hhh]”jM)�”}”(hŒDsimilar to kmemleak_free_part but taking a physical address argument”h]”hŒDsimilar to kmemleak_free_part but taking a physical address argument”…”�”}”(hjI‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´M`hjF‡h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjL†h²hh³je†h´M`ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGja‡jHja‡jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒÂ**Parameters** ``phys_addr_t phys`` physical address if the beginning or inside an object. This also represents the start of the range to be freed ``size_t size`` size to be unregistered”h]”(jM)�”}”(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&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´Mdhje‡ubj¤)�”}”(hhh]”(j©)�”}”(hŒ„``phys_addr_t phys`` physical address if the beginning or inside an object. This also represents the start of the range to be freed ”h]”(j¯)�”}”(hŒ``phys_addr_t phys``”h]”jS)�”}”(hjЇh]”hŒphys_addr_t phys”…”�”}”(hjŒ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjˆ‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´Mchj„‡ubjÉ)�”}”(hhh]”jM)�”}”(hŒnphysical address if the beginning or inside an object. This also represents the start of the range to be freed”h]”hŒnphysical address if the beginning or inside an object. This also represents the start of the range to be freed”…”�”}”(hj£‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´Mbhj ‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj„‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŸ‡h´Mchj�‡ubj©)�”}”(hŒ'``size_t size`` size to be unregistered”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hjćh]”hŒ size_t size”…”�”}”(hjƇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´Mehj¾‡ubjÉ)�”}”(hhh]”jM)�”}”(hŒsize to be unregistered”h]”hŒsize to be unregistered”…”�”}”(hj݇h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MdhjÚ‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¾‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÙ‡h´Mehj�‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hje‡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!kmemleak_ignore_phys (C function)”Œc.kmemleak_ignore_phys”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ2void __ref kmemleak_ignore_phys (phys_addr_t phys)”h]”hù)�”}”(hŒ1void __ref kmemleak_ignore_phys(phys_addr_t phys)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjˆh²hh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´MpubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-ˆh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjˆh²hh³j,ˆh´MpubhŒ__ref”…”�”}”(hjˆh²hh³Nh´NubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?ˆh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjˆh²hh³j,ˆh´Mpubhÿ)�”}”(hŒkmemleak_ignore_phys”h]”j)�”}”(hŒkmemleak_ignore_phys”h]”hŒkmemleak_ignore_phys”…”�”}”(hjQˆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjMˆubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjˆh²hh³j,ˆh´Mpubj )�”}”(hŒ(phys_addr_t phys)”h]”j )�”}”(hŒphys_addr_t phys”h]”(h)�”}”(hhh]”j)�”}”(hŒ phys_addr_t”h]”hŒ phys_addr_t”…”�”}”(hjpˆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjmˆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jrˆŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljSˆsbŒc.kmemleak_ignore_phys”†”asbuh1hhjiˆubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�ˆh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjiˆubj)�”}”(hŒphys”h]”hŒphys”…”�”}”(hjžˆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjiˆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjeˆubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjˆh²hh³j,ˆh´Mpubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjˆh²hh³j,ˆh´Mpubah}”(h]”jˆah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j,ˆh´Mphjˆh²hubj4)�”}”(hhh]”jM)�”}”(hŒAsimilar to kmemleak_ignore but taking a physical address argument”h]”hŒAsimilar to kmemleak_ignore but taking a physical address argument”…”�”}”(hjȈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´Mphjňh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjˆh²hh³j,ˆh´Mpubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjàˆjHjàˆjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒE**Parameters** ``phys_addr_t phys`` physical address of the object”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjêˆh]”hŒ Parameters”…”�”}”(hjìˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjèˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´Mthjäˆubj¤)�”}”(hhh]”j©)�”}”(hŒ3``phys_addr_t phys`` physical address of the object”h]”(j¯)�”}”(hŒ``phys_addr_t phys``”h]”jS)�”}”(hj ‰h]”hŒphys_addr_t phys”…”�”}”(hj ‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´Mvhj‰ubjÉ)�”}”(hhh]”jM)�”}”(hŒphysical address of the object”h]”hŒphysical address of the object”…”�”}”(hj"‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./mm/kmemleak.c”h´Mrhj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‰h´Mvhj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjäˆubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhŒcomment”“”)�”}”(hŒ'#kernel-doc:: mm/hmm.c (build warnings)”h]”hŒ'#kernel-doc:: mm/hmm.c (build warnings)”…”�”}”hjL‰sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jJ‰hjÞÁh²hh³hÊh´KvubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ devm_memremap_pages (C function)”Œc.devm_memremap_pages”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒJvoid * devm_memremap_pages (struct device *dev, struct dev_pagemap *pgmap)”h]”hù)�”}”(hŒHvoid *devm_memremap_pages(struct device *dev, struct dev_pagemap *pgmap)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjs‰h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjo‰h²hh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/memremap.c”h´McubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚‰h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjo‰h²hh³j�‰h´McubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj�‰h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjo‰h²hh³j�‰h´Mcubhÿ)�”}”(hŒdevm_memremap_pages”h]”j)�”}”(hŒdevm_memremap_pages”h]”hŒdevm_memremap_pages”…”�”}”(hj¡‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�‰ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjo‰h²hh³j�‰h´Mcubj )�”}”(hŒ/(struct device *dev, struct dev_pagemap *pgmap)”h]”(j )�”}”(hŒstruct device *dev”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj½‰h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¹‰ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjʉh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¹‰ubh)�”}”(hhh]”j)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjÛ‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj؉ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j݉Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj£‰sbŒc.devm_memremap_pages”†”asbuh1hhj¹‰ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjû‰h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¹‰ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj Šh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¹‰ubj)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¹‰ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjµ‰ubj )�”}”(hŒstruct dev_pagemap *pgmap”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj/Šh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj+ŠubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<Šh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj+Šubh)�”}”(hhh]”j)�”}”(hŒ dev_pagemap”h]”hŒ dev_pagemap”…”�”}”(hjMŠh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjJŠubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jOŠŒmodname”NŒ classname”Njpjs)�”}”jv]”j÷‰Œc.devm_memremap_pages”†”asbuh1hhj+ŠubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkŠh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj+ŠubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjyŠh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj+Šubj)�”}”(hŒpgmap”h]”hŒpgmap”…”�”}”(hj†Šh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj+Šubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjµ‰ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjo‰h²hh³j�‰h´Mcubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjk‰h²hh³j�‰h´Mcubah}”(h]”jf‰ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j�‰h´Mchjh‰h²hubj4)�”}”(hhh]”jM)�”}”(hŒ7remap and provide memmap backing for the given resource”h]”hŒ7remap and provide memmap backing for the given resource”…”�”}”(hj°Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/memremap.c”h´Mchj­Šh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjh‰h²hh³j�‰h´Mcubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÈŠjHjÈŠjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXê**Parameters** ``struct device *dev`` hosting device for **res** ``struct dev_pagemap *pgmap`` pointer to a struct dev_pagemap **Notes** 1/ At a minimum the range and type members of **pgmap** must be initialized by the caller before passing it to this function 2/ The altmap field may optionally be initialized, in which case PGMAP_ALTMAP_VALID must be set in pgmap->flags. 3/ The ref field may optionally be provided, in which pgmap->ref must be 'live' on entry and will be killed and reaped at devm_memremap_pages_release() time, or if this routine fails. 4/ range is expected to be a host memory range that could feasibly be treated as a "System RAM" range, i.e. not a device mmio range, but this is not enforced.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÒŠh]”hŒ Parameters”…”�”}”(hjÔŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjЊubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/memremap.c”h´MghjÌŠubj¤)�”}”(hhh]”(j©)�”}”(hŒ2``struct device *dev`` hosting device for **res** ”h]”(j¯)�”}”(hŒ``struct device *dev``”h]”jS)�”}”(hjñŠh]”hŒstruct device *dev”…”�”}”(hjóŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjïŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/memremap.c”h´MdhjëŠubjÉ)�”}”(hhh]”jM)�”}”(hŒhosting device for **res**”h]”(hŒhosting device for ”…”�”}”(hj ‹h²hh³Nh´NubjŽ)�”}”(hŒ**res**”h]”hŒres”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‹h´Mdhj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjëŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‹h´MdhjèŠubj©)�”}”(hŒ>``struct dev_pagemap *pgmap`` pointer to a struct dev_pagemap ”h]”(j¯)�”}”(hŒ``struct dev_pagemap *pgmap``”h]”jS)�”}”(hj8‹h]”hŒstruct dev_pagemap *pgmap”…”�”}”(hj:‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj6‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/memremap.c”h´Mehj2‹ubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to a struct dev_pagemap”h]”hŒpointer to a struct dev_pagemap”…”�”}”(hjQ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jM‹h´MehjN‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj2‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jM‹h´MehjèŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÌŠubjM)�”}”(hŒ **Notes**”h]”jŽ)�”}”(hjs‹h]”hŒNotes”…”�”}”(hju‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjq‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/memremap.c”h´MghjÌŠubj¤)�”}”(hhh]”(j©)�”}”(hŒ}1/ At a minimum the range and type members of **pgmap** must be initialized by the caller before passing it to this function ”h]”(j¯)�”}”(hŒK1/ At a minimum the range and type members of **pgmap** must be initialized”h]”(hŒ.1/ At a minimum the range and type members of ”…”�”}”(hj�‹h²hh³Nh´NubjŽ)�”}”(hŒ **pgmap**”h]”hŒpgmap”…”�”}”(hj˜‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�‹ubhŒ must be initialized”…”�”}”(hj�‹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/memremap.c”h´MhhjŒ‹ubjÉ)�”}”(hhh]”jM)�”}”(hŒ0by the caller before passing it to this function”h]”hŒ0by the caller before passing it to this function”…”�”}”(hj´‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j°‹h´Mhhj±‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjŒ‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j°‹h´Mhhj‰‹ubj©)�”}”(hŒq2/ The altmap field may optionally be initialized, in which case PGMAP_ALTMAP_VALID must be set in pgmap->flags. ”h]”(j¯)�”}”(hŒ@2/ The altmap field may optionally be initialized, in which case”h]”hŒ@2/ The altmap field may optionally be initialized, in which case”…”�”}”(hjÒ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/memremap.c”h´Mkhj΋ubjÉ)�”}”(hhh]”jM)�”}”(hŒ/PGMAP_ALTMAP_VALID must be set in pgmap->flags.”h]”hŒ/PGMAP_ALTMAP_VALID must be set in pgmap->flags.”…”�”}”(hjä‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jà‹h´Mkhjá‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj΋ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jà‹h´Mkhj‰‹ubj©)�”}”(hŒ¸3/ The ref field may optionally be provided, in which pgmap->ref must be 'live' on entry and will be killed and reaped at devm_memremap_pages_release() time, or if this routine fails. ”h]”(j¯)�”}”(hŒH3/ The ref field may optionally be provided, in which pgmap->ref must be”h]”hŒH3/ The ref field may optionally be provided, in which pgmap->ref must be”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/memremap.c”h´Mohjþ‹ubjÉ)�”}”(hhh]”jM)�”}”(hŒn'live' on entry and will be killed and reaped at devm_memremap_pages_release() time, or if this routine fails.”h]”hŒr‘live’ on entry and will be killed and reaped at devm_memremap_pages_release() time, or if this routine fails.”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/memremap.c”h´MnhjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjþ‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŒh´Mohj‰‹ubj©)�”}”(hŒž4/ range is expected to be a host memory range that could feasibly be treated as a "System RAM" range, i.e. not a device mmio range, but this is not enforced.”h]”(j¯)�”}”(hŒE4/ range is expected to be a host memory range that could feasibly be”h]”hŒE4/ range is expected to be a host memory range that could feasibly be”…”�”}”(hj3Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/memremap.c”h´Mrhj/ŒubjÉ)�”}”(hhh]”jM)�”}”(hŒXtreated as a "System RAM" range, i.e. not a device mmio range, but this is not enforced.”h]”hŒ\treated as a “System RAMâ€� range, i.e. not a device mmio range, but this is not enforced.”…”�”}”(hjEŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jAŒh´MrhjBŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj/Œubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jAŒh´Mrhj‰‹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”]”(héŒget_dev_pagemap (C function)”Œc.get_dev_pagemap”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ8struct dev_pagemap * get_dev_pagemap (unsigned long pfn)”h]”hù)�”}”(hŒ6struct dev_pagemap *get_dev_pagemap(unsigned long pfn)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj…Œh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj�Œh²hh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/memremap.c”h´MŽubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“Œh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�Œh²hh³j’Œh´MŽubh)�”}”(hhh]”j)�”}”(hŒ dev_pagemap”h]”hŒ dev_pagemap”…”�”}”(hj¤Œh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¡Œubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¦ŒŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒget_dev_pagemap”sbŒc.get_dev_pagemap”†”asbuh1hhj�Œh²hh³j’Œh´MŽubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅŒh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�Œh²hh³j’Œh´MŽubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÓŒh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj�Œh²hh³j’Œh´MŽubhÿ)�”}”(hŒget_dev_pagemap”h]”j)�”}”(hjÂŒh]”hŒget_dev_pagemap”…”�”}”(hjäŒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjàŒubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj�Œh²hh³j’Œh´MŽubj )�”}”(hŒ(unsigned long pfn)”h]”j )�”}”(hŒunsigned long pfn”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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ûŒubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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ûŒubj)�”}”(hŒpfn”h]”hŒpfn”…”�”}”(hj7�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjûŒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj÷Œubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj�Œh²hh³j’Œh´MŽubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj}Œh²hh³j’Œh´MŽubah}”(h]”jxŒah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j’Œh´MŽhjzŒh²hubj4)�”}”(hhh]”jM)�”}”(hŒ8take a new live reference on the dev_pagemap for **pfn**”h]”(hŒ1take a new live reference on the dev_pagemap for ”…”�”}”(hja�h²hh³Nh´NubjŽ)�”}”(hŒ**pfn**”h]”hŒpfn”…”�”}”(hji�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hja�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/memremap.c”h´MŽhj^�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjzŒh²hh³j’Œh´MŽubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj‡�jHj‡�jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒL**Parameters** ``unsigned long pfn`` page frame number to lookup page_map”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj‘�h]”hŒ Parameters”…”�”}”(hj“�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj��ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/memremap.c”h´M’hj‹�ubj¤)�”}”(hhh]”j©)�”}”(hŒ:``unsigned long pfn`` page frame number to lookup page_map”h]”(j¯)�”}”(hŒ``unsigned long pfn``”h]”jS)�”}”(hj°�h]”hŒunsigned long pfn”…”�”}”(hj²�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj®�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/memremap.c”h´M”hjª�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ$page frame number to lookup page_map”h]”hŒ$page frame number to lookup page_map”…”�”}”(hjÉ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./mm/memremap.c”h´M�hjÆ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjª�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³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”]”(héŒ hugetlb_alloc_folio (C function)”Œc.hugetlb_alloc_folio”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒjstruct folio * hugetlb_alloc_folio (struct hstate *h, struct mempolicy_interpreted *mpoli, u8 alloc_flags)”h]”hù)�”}”(hŒhstruct folio *hugetlb_alloc_folio(struct hstate *h, struct mempolicy_interpreted *mpoli, u8 alloc_flags)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj Žh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjŽh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´M ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŽh²hh³jŽh´M ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj)Žh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj&Žubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j+ŽŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒhugetlb_alloc_folio”sbŒc.hugetlb_alloc_folio”†”asbuh1hhjŽh²hh³jŽh´M ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJŽh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŽh²hh³jŽh´M ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjXŽh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjŽh²hh³jŽh´M ubhÿ)�”}”(hŒhugetlb_alloc_folio”h]”j)�”}”(hjGŽh]”hŒhugetlb_alloc_folio”…”�”}”(hjiŽh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjeŽubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjŽh²hh³jŽh´M ubj )�”}”(hŒG(struct hstate *h, struct mempolicy_interpreted *mpoli, u8 alloc_flags)”h]”(j )�”}”(hŒstruct hstate *h”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj„Žh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj€ŽubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘Žh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj€Žubh)�”}”(hhh]”j)�”}”(hŒhstate”h]”hŒhstate”…”�”}”(hj¢Žh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŸŽubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¤ŽŒmodname”NŒ classname”Njpjs)�”}”jv]”jEŽŒc.hugetlb_alloc_folio”†”asbuh1hhj€ŽubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀŽh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj€ŽubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÎŽh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj€Žubj)�”}”(hŒh”h]”hŒh”…”�”}”(hjÛŽh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj€Žubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj|Žubj )�”}”(hŒ#struct mempolicy_interpreted *mpoli”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjôŽh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjðŽubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjðŽubh)�”}”(hhh]”j)�”}”(hŒmempolicy_interpreted”h]”hŒmempolicy_interpreted”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j�Œmodname”NŒ classname”Njpjs)�”}”jv]”jEŽŒc.hugetlb_alloc_folio”†”asbuh1hhjðŽubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjðŽubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj>�h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjðŽubj)�”}”(hŒmpoli”h]”hŒmpoli”…”�”}”(hjK�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjðŽubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj|Žubj )�”}”(hŒu8 alloc_flags”h]”(h)�”}”(hhh]”j)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjg�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjd�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”ji�Œmodname”NŒ classname”Njpjs)�”}”jv]”jEŽŒc.hugetlb_alloc_folio”†”asbuh1hhj`�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj`�ubj)�”}”(hŒ alloc_flags”h]”hŒ alloc_flags”…”�”}”(hj“�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj`�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj|Žubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjŽh²hh³jŽh´M ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjŽh²hh³jŽh´M ubah}”(h]”jý�ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jŽh´M hjÿ�h²hubj4)�”}”(hhh]”jM)�”}”(hŒAllocate a hugetlb folio.”h]”hŒAllocate a hugetlb folio.”…”�”}”(hj½�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´M hjº�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÿ�h²hh³jŽh´M ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÕ�jHjÕ�jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXò**Parameters** ``struct hstate *h`` Hugetlb state control block. ``struct mempolicy_interpreted *mpoli`` Interpreted memory policy to use for allocation. ``u8 alloc_flags`` Flags controlling the allocation behavior. **Description** Allocates a hugetlb folio and handles cgroup charging and global hstate reservations. **Return** A pointer to the allocated folio, or an ERR_PTR on failure. -ENOSPC if cgroup charging fails or no folio is available. -ENOMEM if mem cgroup charging fails.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjß�h]”hŒ Parameters”…”�”}”(hjá�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÝ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´M hjÙ�ubj¤)�”}”(hhh]”(j©)�”}”(hŒ2``struct hstate *h`` Hugetlb state control block. ”h]”(j¯)�”}”(hŒ``struct hstate *h``”h]”jS)�”}”(hjþ�h]”hŒstruct hstate *h”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjü�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´M hjø�ubjÉ)�”}”(hhh]”jM)�”}”(hŒHugetlb state control block.”h]”hŒHugetlb state control block.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�h´M hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjø�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�h´M hjõ�ubj©)�”}”(hŒY``struct mempolicy_interpreted *mpoli`` Interpreted memory policy to use for allocation. ”h]”(j¯)�”}”(hŒ'``struct mempolicy_interpreted *mpoli``”h]”jS)�”}”(hj7�h]”hŒ#struct mempolicy_interpreted *mpoli”…”�”}”(hj9�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj5�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´M hj1�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ0Interpreted memory policy to use for allocation.”h]”hŒ0Interpreted memory policy to use for allocation.”…”�”}”(hjP�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jL�h´M hjM�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj1�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jL�h´M hjõ�ubj©)�”}”(hŒ>``u8 alloc_flags`` Flags controlling the allocation behavior. ”h]”(j¯)�”}”(hŒ``u8 alloc_flags``”h]”jS)�”}”(hjp�h]”hŒu8 alloc_flags”…”�”}”(hjr�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjn�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´M hjj�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ*Flags controlling the allocation behavior.”h]”hŒ*Flags controlling the allocation behavior.”…”�”}”(hj‰�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j…�h´M hj†�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j…�h´M hjõ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÙ�ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj«�h]”hŒ Description”…”�”}”(hj­�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj©�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´M hjÙ�ubjM)�”}”(hŒUAllocates a hugetlb folio and handles cgroup charging and global hstate reservations.”h]”hŒUAllocates a hugetlb folio and handles cgroup charging and global hstate reservations.”…”�”}”(hjÁ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´M hjÙ�ubjM)�”}”(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&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´M hjÙ�ubjM)�”}”(hŒœA pointer to the allocated folio, or an ERR_PTR on failure. -ENOSPC if cgroup charging fails or no folio is available. -ENOMEM if mem cgroup charging fails.”h]”hŒœA pointer to the allocated folio, or an ERR_PTR on failure. -ENOSPC if cgroup charging fails or no folio is available. -ENOMEM if mem cgroup charging fails.”…”�”}”(hjè�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.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”]”(héŒhuge_pmd_unshare (C function)”Œc.huge_pmd_unshare”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒjint huge_pmd_unshare (struct mmu_gather *tlb, struct vm_area_struct *vma, unsigned long addr, pte_t *ptep)”h]”hù)�”}”(hŒiint huge_pmd_unshare(struct mmu_gather *tlb, struct vm_area_struct *vma, unsigned long addr, pte_t *ptep)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj‘h²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´M’ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&‘h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj‘h²hh³j%‘h´M’ubhÿ)�”}”(hŒhuge_pmd_unshare”h]”j)�”}”(hŒhuge_pmd_unshare”h]”hŒhuge_pmd_unshare”…”�”}”(hj8‘h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4‘ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj‘h²hh³j%‘h´M’ubj )�”}”(hŒU(struct mmu_gather *tlb, struct vm_area_struct *vma, unsigned long addr, pte_t *ptep)”h]”(j )�”}”(hŒstruct mmu_gather *tlb”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjT‘h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjP‘ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hja‘h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjP‘ubh)�”}”(hhh]”j)�”}”(hŒ mmu_gather”h]”hŒ mmu_gather”…”�”}”(hjr‘h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjo‘ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jt‘Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj:‘sbŒc.huge_pmd_unshare”†”asbuh1hhjP‘ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’‘h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjP‘ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj ‘h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjP‘ubj)�”}”(hŒtlb”h]”hŒtlb”…”�”}”(hj­‘h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjP‘ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjL‘ubj )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÆ‘h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj‘ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓ‘h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj‘ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjä‘h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjá‘ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j摌modname”NŒ classname”Njpjs)�”}”jv]”jŽ‘Œc.huge_pmd_unshare”†”asbuh1hhj‘ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj‘ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj‘ubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‘ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjL‘ubj )�”}”(hŒunsigned long addr”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj6’h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj2’ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD’h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj2’ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjR’h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj2’ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`’h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj2’ubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjn’h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjL‘ubj )�”}”(hŒ pte_t *ptep”h]”(h)�”}”(hhh]”j)�”}”(hŒpte_t”h]”hŒpte_t”…”�”}”(hjŠ’h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‡’ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jŒ’Œmodname”NŒ classname”Njpjs)�”}”jv]”jŽ‘Œc.huge_pmd_unshare”†”asbuh1hhjƒ’ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨’h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjƒ’ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¶’h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjƒ’ubj)�”}”(hŒptep”h]”hŒptep”…”�”}”(hjÃ’h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjƒ’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjL‘ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj‘h²hh³j%‘h´M’ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj‘h²hh³j%‘h´M’ubah}”(h]”j ‘ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j%‘h´M’hj ‘h²hubj4)�”}”(hhh]”jM)�”}”(hŒ3Unmap a pmd table if it is shared by multiple users”h]”hŒ3Unmap a pmd table if it is shared by multiple users”…”�”}”(hjí’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´M’hjê’h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj ‘h²hh³j%‘h´M’ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj“jHj“jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXH**Parameters** ``struct mmu_gather *tlb`` the current mmu_gather. ``struct vm_area_struct *vma`` the vma covering the pmd table. ``unsigned long addr`` the address we are trying to unshare. ``pte_t *ptep`` pointer into the (pmd) page table. **Description** Called with the page table lock held, the i_mmap_rwsem held in write mode and the hugetlb vma lock held in write mode. **Note** The caller must call huge_pmd_unshare_flush() before dropping the i_mmap_rwsem. **Return** 1 if it was a shared PMD table and it got unmapped, or 0 if it was not a shared PMD table.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj“h]”hŒ Parameters”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj “ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´M–hj “ubj¤)�”}”(hhh]”(j©)�”}”(hŒ3``struct mmu_gather *tlb`` the current mmu_gather. ”h]”(j¯)�”}”(hŒ``struct mmu_gather *tlb``”h]”jS)�”}”(hj.“h]”hŒstruct mmu_gather *tlb”…”�”}”(hj0“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj,“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´M“hj(“ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe current mmu_gather.”h]”hŒthe current mmu_gather.”…”�”}”(hjG“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jC“h´M“hjD“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj(“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jC“h´M“hj%“ubj©)�”}”(hŒ?``struct vm_area_struct *vma`` the vma covering the pmd table. ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hjg“h]”hŒstruct vm_area_struct *vma”…”�”}”(hji“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhje“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´M”hja“ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe vma covering the pmd table.”h]”hŒthe vma covering the pmd table.”…”�”}”(hj€“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j|“h´M”hj}“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhja“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j|“h´M”hj%“ubj©)�”}”(hŒ=``unsigned long addr`` the address we are trying to unshare. ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hj “h]”hŒunsigned long addr”…”�”}”(hj¢“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjž“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´M•hjš“ubjÉ)�”}”(hhh]”jM)�”}”(hŒ%the address we are trying to unshare.”h]”hŒ%the address we are trying to unshare.”…”�”}”(hj¹“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jµ“h´M•hj¶“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjš“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jµ“h´M•hj%“ubj©)�”}”(hŒ3``pte_t *ptep`` pointer into the (pmd) page table. ”h]”(j¯)�”}”(hŒ``pte_t *ptep``”h]”jS)�”}”(hjÙ“h]”hŒ pte_t *ptep”…”�”}”(hjÛ“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjדubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´M–hjÓ“ubjÉ)�”}”(hhh]”jM)�”}”(hŒ"pointer into the (pmd) page table.”h]”hŒ"pointer into the (pmd) page table.”…”�”}”(hjò“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jî“h´M–hjï“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÓ“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jî“h´M–hj%“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj “ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj”h]”hŒ Description”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´M˜hj “ubjM)�”}”(hŒvCalled with the page table lock held, the i_mmap_rwsem held in write mode and the hugetlb vma lock held in write mode.”h]”hŒvCalled with the page table lock held, the i_mmap_rwsem held in write mode and the hugetlb vma lock held in write mode.”…”�”}”(hj*”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´M—hj “ubjM)�”}”(hŒ**Note**”h]”jŽ)�”}”(hj;”h]”hŒNote”…”�”}”(hj=”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj9”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´Mšhj “ubjM)�”}”(hŒOThe caller must call huge_pmd_unshare_flush() before dropping the i_mmap_rwsem.”h]”hŒOThe caller must call huge_pmd_unshare_flush() before dropping the i_mmap_rwsem.”…”�”}”(hjQ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´M›hj “ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjb”h]”hŒReturn”…”�”}”(hjd”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj`”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´Mžhj “ubjM)�”}”(hŒZ1 if it was a shared PMD table and it got unmapped, or 0 if it was not a shared PMD table.”h]”hŒZ1 if it was a shared PMD table and it got unmapped, or 0 if it was not a shared PMD table.”…”�”}”(hjx”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.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”]”(héŒ"folio_isolate_hugetlb (C function)”Œc.folio_isolate_hugetlb”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒHbool folio_isolate_hugetlb (struct folio *folio, struct list_head *list)”h]”hù)�”}”(hŒGbool folio_isolate_hugetlb(struct folio *folio, struct list_head *list)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hj§”h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj£”h²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´MLubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµ”h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj£”h²hh³j´”h´MLubhÿ)�”}”(hŒfolio_isolate_hugetlb”h]”j)�”}”(hŒfolio_isolate_hugetlb”h]”hŒfolio_isolate_hugetlb”…”�”}”(hjÇ”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÔubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj£”h²hh³j´”h´MLubj )�”}”(hŒ-(struct folio *folio, struct list_head *list)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjã”h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjß”ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjð”h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjß”ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjþ”ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j•Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÉ”sbŒc.folio_isolate_hugetlb”†”asbuh1hhjß”ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!•h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjß”ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj/•h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjß”ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj<•h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjß”ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÛ”ubj )�”}”(hŒstruct list_head *list”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjU•h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjQ•ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjb•h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjQ•ubh)�”}”(hhh]”j)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hjs•h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjp•ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”ju•Œmodname”NŒ classname”Njpjs)�”}”jv]”j•Œc.folio_isolate_hugetlb”†”asbuh1hhjQ•ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘•h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjQ•ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjŸ•h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjQ•ubj)�”}”(hŒlist”h]”hŒlist”…”�”}”(hj¬•h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjQ•ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÛ”ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj£”h²hh³j´”h´MLubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjŸ”h²hh³j´”h´MLubah}”(h]”jš”ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j´”h´MLhjœ”h²hubj4)�”}”(hhh]”jM)�”}”(hŒ)try to isolate an allocated hugetlb folio”h]”hŒ)try to isolate an allocated hugetlb folio”…”�”}”(hjÖ•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´MLhjÓ•h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjœ”h²hh³j´”h´MLubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjî•jHjî•jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXN**Parameters** ``struct folio *folio`` the folio to isolate ``struct list_head *list`` the list to add the folio to on success **Description** Isolate an allocated (refcount > 0) hugetlb folio, marking it as isolated/non-migratable, and moving it from the active list to the given list. Isolation will fail if **folio** is not an allocated hugetlb folio, or if it is already isolated/non-migratable. On success, an additional folio reference is taken that must be dropped using folio_putback_hugetlb() to undo the isolation. **Return** True if isolation worked, otherwise False.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjø•h]”hŒ Parameters”…”�”}”(hjú•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjö•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´MPhjò•ubj¤)�”}”(hhh]”(j©)�”}”(hŒ-``struct folio *folio`` the folio to isolate ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj–h]”hŒstruct folio *folio”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´MMhj–ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe folio to isolate”h]”hŒthe folio to isolate”…”�”}”(hj0–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j,–h´MMhj-–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j,–h´MMhj–ubj©)�”}”(hŒC``struct list_head *list`` the list to add the folio to on success ”h]”(j¯)�”}”(hŒ``struct list_head *list``”h]”jS)�”}”(hjP–h]”hŒstruct list_head *list”…”�”}”(hjR–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjN–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´MNhjJ–ubjÉ)�”}”(hhh]”jM)�”}”(hŒ'the list to add the folio to on success”h]”hŒ'the list to add the folio to on success”…”�”}”(hji–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³je–h´MNhjf–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjJ–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³je–h´MNhj–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjò•ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj‹–h]”hŒ Description”…”�”}”(hj�–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‰–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´MPhjò•ubjM)�”}”(hŒ�Isolate an allocated (refcount > 0) hugetlb folio, marking it as isolated/non-migratable, and moving it from the active list to the given list.”h]”hŒ�Isolate an allocated (refcount > 0) hugetlb folio, marking it as isolated/non-migratable, and moving it from the active list to the given list.”…”�”}”(hj¡–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´MOhjò•ubjM)�”}”(hŒpIsolation will fail if **folio** is not an allocated hugetlb folio, or if it is already isolated/non-migratable.”h]”(hŒIsolation will fail if ”…”�”}”(hj°–h²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj¸–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj°–ubhŒP is not an allocated hugetlb folio, or if it is already isolated/non-migratable.”…”�”}”(hj°–h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´MShjò•ubjM)�”}”(hŒ|On success, an additional folio reference is taken that must be dropped using folio_putback_hugetlb() to undo the isolation.”h]”hŒ|On success, an additional folio reference is taken that must be dropped using folio_putback_hugetlb() to undo the isolation.”…”�”}”(hjÑ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´MVhjò•ubjM)�”}”(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&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´MYhjò•ubjM)�”}”(hŒ*True if isolation worked, otherwise False.”h]”hŒ*True if isolation worked, otherwise False.”…”�”}”(hjø–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´MZhjò•ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"folio_putback_hugetlb (C function)”Œc.folio_putback_hugetlb”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ0void folio_putback_hugetlb (struct folio *folio)”h]”hù)�”}”(hŒ/void folio_putback_hugetlb(struct folio *folio)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj'—h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj#—h²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´M‚ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6—h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj#—h²hh³j5—h´M‚ubhÿ)�”}”(hŒfolio_putback_hugetlb”h]”j)�”}”(hŒfolio_putback_hugetlb”h]”hŒfolio_putback_hugetlb”…”�”}”(hjH—h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjD—ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj#—h²hh³j5—h´M‚ubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjd—h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj`—ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjq—h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj`—ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj‚—h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj—ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j„—Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljJ—sbŒc.folio_putback_hugetlb”†”asbuh1hhj`—ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢—h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj`—ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj°—h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj`—ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj½—h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj`—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj\—ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj#—h²hh³j5—h´M‚ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj—h²hh³j5—h´M‚ubah}”(h]”j—ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j5—h´M‚hj—h²hubj4)�”}”(hhh]”jM)�”}”(hŒunisolate a hugetlb folio”h]”hŒunisolate a hugetlb folio”…”�”}”(hjç—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´M‚hjä—h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj—h²hh³j5—h´M‚ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÿ—jHjÿ—jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXV**Parameters** ``struct folio *folio`` the isolated hugetlb folio **Description** Putback/un-isolate the hugetlb folio that was previous isolated using folio_isolate_hugetlb(): marking it non-isolated/migratable and putting it back onto the active list. Will drop the additional folio reference obtained through folio_isolate_hugetlb().”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj ˜h]”hŒ Parameters”…”�”}”(hj ˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´M†hj˜ubj¤)�”}”(hhh]”j©)�”}”(hŒ3``struct folio *folio`` the isolated hugetlb folio ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj(˜h]”hŒstruct folio *folio”…”�”}”(hj*˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj&˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´Mƒhj"˜ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe isolated hugetlb folio”h]”hŒthe isolated hugetlb folio”…”�”}”(hjA˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j=˜h´Mƒhj>˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj"˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j=˜h´Mƒhj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj˜ubjM)�”}”(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&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´M…hj˜ubjM)�”}”(hŒ«Putback/un-isolate the hugetlb folio that was previous isolated using folio_isolate_hugetlb(): marking it non-isolated/migratable and putting it back onto the active list.”h]”hŒ«Putback/un-isolate the hugetlb folio that was previous isolated using folio_isolate_hugetlb(): marking it non-isolated/migratable and putting it back onto the active list.”…”�”}”(hjy˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.c”h´M„hj˜ubjM)�”}”(hŒRWill drop the additional folio reference obtained through folio_isolate_hugetlb().”h]”hŒRWill drop the additional folio reference obtained through folio_isolate_hugetlb().”…”�”}”(hjˆ˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:120: ./mm/hugetlb.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”]”(héŒ folio_mark_accessed (C function)”Œc.folio_mark_accessed”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ.void folio_mark_accessed (struct folio *folio)”h]”hù)�”}”(hŒ-void folio_mark_accessed(struct folio *folio)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj·˜h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj³˜h²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´M›ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƘh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj³˜h²hh³jŘh´M›ubhÿ)�”}”(hŒfolio_mark_accessed”h]”j)�”}”(hŒfolio_mark_accessed”h]”hŒfolio_mark_accessed”…”�”}”(hjؘh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÔ˜ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj³˜h²hh³jŘh´M›ubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjô˜h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjð˜ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjð˜ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j™Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÚ˜sbŒc.folio_mark_accessed”†”asbuh1hhjð˜ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2™h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjð˜ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj@™h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjð˜ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjM™h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjð˜ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjì˜ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj³˜h²hh³jŘh´M›ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¯˜h²hh³jŘh´M›ubah}”(h]”jª˜ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jŘh´M›hj¬˜h²hubj4)�”}”(hhh]”jM)�”}”(hŒ%Mark a folio as having seen activity.”h]”hŒ%Mark a folio as having seen activity.”…”�”}”(hjw™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´M›hjt™h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¬˜h²hh³jŘh´M›ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj�™jHj�™jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXÊ**Parameters** ``struct folio *folio`` The folio to mark. **Description** This function will perform one of the following transitions: * inactive,unreferenced -> inactive,referenced * inactive,referenced -> active,unreferenced * active,unreferenced -> active,referenced When a newly allocated folio is not yet visible, so safe for non-atomic ops, __folio_set_referenced() may be substituted for folio_mark_accessed().”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj™™h]”hŒ Parameters”…”�”}”(hj›™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj—™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MŸhj“™ubj¤)�”}”(hhh]”j©)�”}”(hŒ+``struct folio *folio`` The folio to mark. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj¸™h]”hŒstruct folio *folio”…”�”}”(hjº™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¶™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´Mœhj²™ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to mark.”h]”hŒThe folio to mark.”…”�”}”(hjÑ™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÍ™h´MœhjΙubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj²™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÍ™h´Mœhj¯™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj“™ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjó™h]”hŒ Description”…”�”}”(hjõ™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjñ™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´Mžhj“™ubjM)�”}”(hŒ inactive,referenced”h]”jM)�”}”(hjšh]”hŒ6inactive,unreferenced -> inactive,referenced”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MŸhjšubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjšubjÕ/)�”}”(hŒ6inactive,referenced -> active,unreferenced”h]”jM)�”}”(hj5šh]”hŒ6inactive,referenced -> active,unreferenced”…”�”}”(hj7šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´M hj3šubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjšubjÕ/)�”}”(hŒ5active,unreferenced -> active,referenced ”h]”jM)�”}”(hŒ4active,unreferenced -> active,referenced”h]”hŒ4active,unreferenced -> active,referenced”…”�”}”(hjOšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´M¡hjKšubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjšubeh}”(h]”h ]”h"]”h$]”h&]”jƒWjI uh1j`Wh³j,šh´MŸhj“™ubjM)�”}”(hŒ“When a newly allocated folio is not yet visible, so safe for non-atomic ops, __folio_set_referenced() may be substituted for folio_mark_accessed().”h]”hŒ“When a newly allocated folio is not yet visible, so safe for non-atomic ops, __folio_set_referenced() may be substituted for folio_mark_accessed().”…”�”}”(hjjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.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”]”(héŒfolio_add_lru (C function)”Œc.folio_add_lru”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ(void folio_add_lru (struct folio *folio)”h]”hù)�”}”(hŒ'void folio_add_lru(struct folio *folio)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj™šh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj•šh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MÌubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨šh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj•šh²hh³j§šh´MÌubhÿ)�”}”(hŒ folio_add_lru”h]”j)�”}”(hŒ folio_add_lru”h]”hŒ folio_add_lru”…”�”}”(hjºšh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¶šubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj•šh²hh³j§šh´MÌubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÖšh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÒšubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãšh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÒšubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjôšh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñšubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jöšŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj¼šsbŒc.folio_add_lru”†”asbuh1hhjÒšubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÒšubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj"›h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÒšubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj/›h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÒšubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjΚubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj•šh²hh³j§šh´MÌubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj‘šh²hh³j§šh´MÌubah}”(h]”jŒšah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j§šh´MÌhjŽšh²hubj4)�”}”(hhh]”jM)�”}”(hŒAdd a folio to an LRU list.”h]”hŒAdd a folio to an LRU list.”…”�”}”(hjY›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MÌhjV›h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjŽšh²hh³j§šh´MÌubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjq›jHjq›jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXz**Parameters** ``struct folio *folio`` The folio to be added to the LRU. **Description** Queue the folio for addition to the LRU. The decision on whether to add the page to the [in]active [file|anon] list is deferred until the folio_batch is drained. This gives a chance for the caller of folio_add_lru() have the folio added to the active list using folio_mark_accessed().”h]”(jM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MÐhju›ubj¤)�”}”(hhh]”j©)�”}”(hŒ:``struct folio *folio`` The folio to be added to the LRU. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjš›h]”hŒstruct folio *folio”…”�”}”(hjœ›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj˜›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MÍhj”›ubjÉ)�”}”(hhh]”jM)�”}”(hŒ!The folio to be added to the LRU.”h]”hŒ!The folio to be added to the LRU.”…”�”}”(hj³›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¯›h´MÍhj°›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj”›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¯›h´MÍhj‘›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hju›ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÕ›h]”hŒ Description”…”�”}”(hj×›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÓ›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MÏhju›ubjM)�”}”(hXQueue the folio for addition to the LRU. The decision on whether to add the page to the [in]active [file|anon] list is deferred until the folio_batch is drained. This gives a chance for the caller of folio_add_lru() have the folio added to the active list using folio_mark_accessed().”h]”hXQueue the folio for addition to the LRU. The decision on whether to add the page to the [in]active [file|anon] list is deferred until the folio_batch is drained. This gives a chance for the caller of folio_add_lru() have the folio added to the active list using folio_mark_accessed().”…”�”}”(hjë›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MÎhju›ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_add_lru_vma (C function)”Œc.folio_add_lru_vma”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒHvoid folio_add_lru_vma (struct folio *folio, struct vm_area_struct *vma)”•€h]”hù)�”}”(hŒGvoid folio_add_lru_vma(struct folio *folio, struct vm_area_struct *vma)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjœh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MîubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)œh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjœh²hh³j(œh´Mîubhÿ)�”}”(hŒfolio_add_lru_vma”h]”j)�”}”(hŒfolio_add_lru_vma”h]”hŒfolio_add_lru_vma”…”�”}”(hj;œh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7œubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjœh²hh³j(œh´Mîubj )�”}”(hŒ1(struct folio *folio, struct vm_area_struct *vma)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjWœh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjSœubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdœh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjSœubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjuœh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjrœubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jwœŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj=œsbŒc.folio_add_lru_vma”†”asbuh1hhjSœubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•œh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjSœubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj£œh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjSœubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj°œh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjSœubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjOœubj )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÉœh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÅœubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖœh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÅœubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjçœh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjäœubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j霌modname”NŒ classname”Njpjs)�”}”jv]”j‘œŒc.folio_add_lru_vma”†”asbuh1hhjÅœubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÅœubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÅœubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÅœubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjOœubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjœh²hh³j(œh´Mîubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjœh²hh³j(œh´Mîubah}”(h]”j œah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j(œh´Mîhjœh²hubj4)�”}”(hhh]”jM)�”}”(hŒ5Add a folio to the appropriate LRU list for this VMA.”h]”hŒ5Add a folio to the appropriate LRU list for this VMA.”…”�”}”(hjJ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MîhjG�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjœh²hh³j(œh´Mîubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjb�jHjb�jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``struct folio *folio`` The folio to be added to the LRU. ``struct vm_area_struct *vma`` VMA in which the folio is mapped. **Description** If the VMA is mlocked, **folio** is added to the unevictable list. Otherwise, it is treated the same way as folio_add_lru().”h]”(jM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´Mòhjf�ubj¤)�”}”(hhh]”(j©)�”}”(hŒ:``struct folio *folio`` The folio to be added to the LRU. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj‹�h]”hŒstruct folio *folio”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‰�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´Mïhj…�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ!The folio to be added to the LRU.”h]”hŒ!The folio to be added to the LRU.”…”�”}”(hj¤�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j �h´Mïhj¡�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj…�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j �h´Mïhj‚�ubj©)�”}”(hŒA``struct vm_area_struct *vma`` VMA in which the folio is mapped. ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hjÄ�h]”hŒstruct vm_area_struct *vma”…”�”}”(hjÆ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÂ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´Mðhj¾�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ!VMA in which the folio is mapped.”h]”hŒ!VMA in which the folio is mapped.”…”�”}”(hjÝ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÙ�h´MðhjÚ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¾�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÙ�h´Mðhj‚�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjf�ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÿ�h]”hŒ Description”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjý�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´Mòhjf�ubjM)�”}”(hŒ|If the VMA is mlocked, **folio** is added to the unevictable list. Otherwise, it is treated the same way as folio_add_lru().”h]”(hŒIf the VMA is mlocked, ”…”�”}”(hjžh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjžubhŒ\ is added to the unevictable list. Otherwise, it is treated the same way as folio_add_lru().”…”�”}”(hjžh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.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”]”(héŒ"deactivate_file_folio (C function)”Œc.deactivate_file_folio”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ0void deactivate_file_folio (struct folio *folio)”h]”hù)�”}”(hŒ/void deactivate_file_folio(struct folio *folio)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjVžh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjRžh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´M’ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hježh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjRžh²hh³jdžh´M’ubhÿ)�”}”(hŒdeactivate_file_folio”h]”j)�”}”(hŒdeactivate_file_folio”h]”hŒdeactivate_file_folio”…”�”}”(hjwžh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjsžubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjRžh²hh³jdžh´M’ubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj“žh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj�žubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj žh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�žubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj±žh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj®žubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j³žŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljyžsbŒc.deactivate_file_folio”†”asbuh1hhj�žubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑžh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�žubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjßžh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj�žubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjìžh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�žubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‹žubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjRžh²hh³jdžh´M’ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjNžh²hh³jdžh´M’ubah}”(h]”jIžah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jdžh´M’hjKžh²hubj4)�”}”(hhh]”jM)�”}”(hŒDeactivate a file folio.”h]”hŒDeactivate a file folio.”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´M’hjŸh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjKžh²hh³jdžh´M’ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj.ŸjHj.ŸjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX&**Parameters** ``struct folio *folio`` Folio to deactivate. **Description** This function hints to the VM that **folio** is a good reclaim candidate, for example if its invalidation fails due to the folio being dirty or under writeback. **Context** Caller holds a reference on the folio.”h]”(jM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´M–hj2Ÿubj¤)�”}”(hhh]”j©)�”}”(hŒ-``struct folio *folio`` Folio to deactivate. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjWŸh]”hŒstruct folio *folio”…”�”}”(hjYŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjUŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´M“hjQŸubjÉ)�”}”(hhh]”jM)�”}”(hŒFolio to deactivate.”h]”hŒFolio to deactivate.”…”�”}”(hjpŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jlŸh´M“hjmŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjQŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jlŸh´M“hjNŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj2ŸubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj’Ÿh]”hŒ Description”…”�”}”(hj”Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´M•hj2ŸubjM)�”}”(hŒ This function hints to the VM that **folio** is a good reclaim candidate, for example if its invalidation fails due to the folio being dirty or under writeback.”h]”(hŒ#This function hints to the VM that ”…”�”}”(hj¨Ÿh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj°Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¨ŸubhŒt is a good reclaim candidate, for example if its invalidation fails due to the folio being dirty or under writeback.”…”�”}”(hj¨Ÿh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´M”hj2ŸubjM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´M˜hj2ŸubjM)�”}”(hŒ&Caller holds a reference on the folio.”h]”hŒ&Caller holds a reference on the folio.”…”�”}”(hjáŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.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”]”(héŒ folio_mark_lazyfree (C function)”Œc.folio_mark_lazyfree”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ.void folio_mark_lazyfree (struct folio *folio)”h]”hù)�”}”(hŒ-void folio_mark_lazyfree(struct folio *folio)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj  h²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´M»ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj  h²hh³j h´M»ubhÿ)�”}”(hŒfolio_mark_lazyfree”h]”j)�”}”(hŒfolio_mark_lazyfree”h]”hŒfolio_mark_lazyfree”…”�”}”(hj1 h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj- ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj  h²hh³j h´M»ubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjM h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjI ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZ h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjI ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjk h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjh ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jm Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj3 sbŒc.folio_mark_lazyfree”†”asbuh1hhjI ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjI ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj™ h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjI ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj¦ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjI ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjE ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj  h²hh³j h´M»ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj h²hh³j h´M»ubah}”(h]”j ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j h´M»hj h²hubj4)�”}”(hhh]”jM)�”}”(hŒmake an anon folio lazyfree”h]”hŒmake an anon folio lazyfree”…”�”}”(hjРh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´M»hjÍ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj h²hh³j h´M»ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjè jHjè jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒÅ**Parameters** ``struct folio *folio`` folio to deactivate **Description** folio_mark_lazyfree() moves **folio** to the inactive file list. This is done to accelerate the reclaim of **folio**.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjò h]”hŒ Parameters”…”�”}”(hjô h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjð ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´M¿hjì ubj¤)�”}”(hhh]”j©)�”}”(hŒ,``struct folio *folio`` folio to deactivate ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj¡h]”hŒstruct folio *folio”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´M¼hj ¡ubjÉ)�”}”(hhh]”jM)�”}”(hŒfolio to deactivate”h]”hŒfolio to deactivate”…”�”}”(hj*¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j&¡h´M¼hj'¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j&¡h´M¼hj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjì ubjM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´M¾hjì ubjM)�”}”(hŒufolio_mark_lazyfree() moves **folio** to the inactive file list. This is done to accelerate the reclaim of **folio**.”h]”(hŒfolio_mark_lazyfree() moves ”…”�”}”(hjb¡h²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjb¡ubhŒF to the inactive file list. This is done to accelerate the reclaim of ”…”�”}”(hjb¡h²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj|¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjb¡ubhŒ.”…”�”}”(hjb¡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.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”]”(héŒ&lru_cache_drain_for_folio (C function)”Œc.lru_cache_drain_for_folio”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒtvoid lru_cache_drain_for_folio (const struct folio *folio, unsigned int extra_refs, enum lru_cache_drained *drained)”h]”hù)�”}”(hŒsvoid lru_cache_drain_for_folio(const struct folio *folio, unsigned int extra_refs, enum lru_cache_drained *drained)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjµ¡h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj±¡h²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MvubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄ¡h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj±¡h²hh³jáh´Mvubhÿ)�”}”(hŒlru_cache_drain_for_folio”h]”j)�”}”(hŒlru_cache_drain_for_folio”h]”hŒlru_cache_drain_for_folio”…”�”}”(hjÖ¡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÒ¡ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj±¡h²hh³jáh´Mvubj )�”}”(hŒU(const struct folio *folio, unsigned int extra_refs, enum lru_cache_drained *drained)”h]”(j )�”}”(hŒconst struct folio *folio”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjò¡h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjî¡ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ¡h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjî¡ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj ¢h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjî¡ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjî¡ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj+¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj(¢ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j-¢Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljØ¡sbŒc.lru_cache_drain_for_folio”†”asbuh1hhjî¡ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjK¢h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjî¡ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjY¢h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjî¡ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjf¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjî¡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjê¡ubj )�”}”(hŒunsigned int extra_refs”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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{¢ubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(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{¢ubj)�”}”(hŒ extra_refs”h]”hŒ extra_refs”…”�”}”(hj·¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj{¢ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjê¡ubj )�”}”(hŒenum lru_cache_drained *drained”h]”(j5)�”}”(hj‘ôh]”hŒenum”…”�”}”(hjТh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÌ¢ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝ¢h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÌ¢ubh)�”}”(hhh]”j)�”}”(hŒlru_cache_drained”h]”hŒlru_cache_drained”…”�”}”(hjî¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjë¢ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jð¢Œmodname”NŒ classname”Njpjs)�”}”jv]”jG¢Œc.lru_cache_drain_for_folio”†”asbuh1hhjÌ¢ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj £h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÌ¢ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÌ¢ubj)�”}”(hŒdrained”h]”hŒdrained”…”�”}”(hj'£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÌ¢ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjê¡ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj±¡h²hh³jáh´Mvubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj­¡h²hh³jáh´Mvubah}”(h]”j¨¡ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jáh´Mvhjª¡h²hubj4)�”}”(hhh]”jM)�”}”(hŒ:drain LRU caches if the caches might hold folio references”h]”hŒ:drain LRU caches if the caches might hold folio references”…”�”}”(hjQ£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MvhjN£h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjª¡h²hh³jáh´Mvubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGji£jHji£jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXø**Parameters** ``const struct folio *folio`` The folio. ``unsigned int extra_refs`` Extra folio references held by the caller. ``enum lru_cache_drained *drained`` Drain status for batch folio processing. **Description** Drain LRU caches if the caches might hold folio references. Start with a local LRU cache drain, to then drain LRU caches on all CPUs if local draining was insufficient. This function detects LRU cache references by comparing the folio refcount with the sum of the expected folio refcount + extra references held by the caller. Note that we cannot rely on PG_lru to reliably detect all LRU cache references, and there are rare scenarios (concurrent folio (un)mapping) where this function might miss detecting LRU cache references. If **drained** is not NULL, the function will avoid re-draining LRU caches when processing multiple folios in a row. In that case, the variable **drained** points at must be initialized to LRU_CACHE_NOT_DRAINED before the first invocation by the caller.”h]”(jM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´Mzhjm£ubj¤)�”}”(hhh]”(j©)�”}”(hŒ)``const struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hj’£h]”hŒconst struct folio *folio”…”�”}”(hj”£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MxhjŒ£ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hj«£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j§£h´Mxhj¨£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjŒ£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j§£h´Mxhj‰£ubj©)�”}”(hŒG``unsigned int extra_refs`` Extra folio references held by the caller. ”h]”(j¯)�”}”(hŒ``unsigned int extra_refs``”h]”jS)�”}”(hjË£h]”hŒunsigned int extra_refs”…”�”}”(hjÍ£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÉ£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MyhjÅ£ubjÉ)�”}”(hhh]”jM)�”}”(hŒ*Extra folio references held by the caller.”h]”hŒ*Extra folio references held by the caller.”…”�”}”(hjä£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jà£h´Myhjá£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÅ£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jà£h´Myhj‰£ubj©)�”}”(hŒM``enum lru_cache_drained *drained`` Drain status for batch folio processing. ”h]”(j¯)�”}”(hŒ#``enum lru_cache_drained *drained``”h]”jS)�”}”(hj¤h]”hŒenum lru_cache_drained *drained”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´Mzhjþ£ubjÉ)�”}”(hhh]”jM)�”}”(hŒ(Drain status for batch folio processing.”h]”hŒ(Drain status for batch folio processing.”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¤h´Mzhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjþ£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¤h´Mzhj‰£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjm£ubjM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´M|hjm£ubjM)�”}”(hŒ¨Drain LRU caches if the caches might hold folio references. Start with a local LRU cache drain, to then drain LRU caches on all CPUs if local draining was insufficient.”h]”hŒ¨Drain LRU caches if the caches might hold folio references. Start with a local LRU cache drain, to then drain LRU caches on all CPUs if local draining was insufficient.”…”�”}”(hjU¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´M{hjm£ubjM)�”}”(hXhThis function detects LRU cache references by comparing the folio refcount with the sum of the expected folio refcount + extra references held by the caller. Note that we cannot rely on PG_lru to reliably detect all LRU cache references, and there are rare scenarios (concurrent folio (un)mapping) where this function might miss detecting LRU cache references.”h]”hXhThis function detects LRU cache references by comparing the folio refcount with the sum of the expected folio refcount + extra references held by the caller. Note that we cannot rely on PG_lru to reliably detect all LRU cache references, and there are rare scenarios (concurrent folio (un)mapping) where this function might miss detecting LRU cache references.”…”�”}”(hjd¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´Mhjm£ubjM)�”}”(hŒýIf **drained** is not NULL, the function will avoid re-draining LRU caches when processing multiple folios in a row. In that case, the variable **drained** points at must be initialized to LRU_CACHE_NOT_DRAINED before the first invocation by the caller.”h]”(hŒIf ”…”�”}”(hjs¤h²hh³Nh´NubjŽ)�”}”(hŒ **drained**”h]”hŒdrained”…”�”}”(hj{¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjs¤ubhŒ‚ is not NULL, the function will avoid re-draining LRU caches when processing multiple folios in a row. In that case, the variable ”…”�”}”(hjs¤h²hh³Nh´NubjŽ)�”}”(hŒ **drained**”h]”hŒdrained”…”�”}”(hj�¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjs¤ubhŒb points at must be initialized to LRU_CACHE_NOT_DRAINED before the first invocation by the caller.”…”�”}”(hjs¤h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´M…hjm£ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolios_put_refs (C function)”Œc.folios_put_refs”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒEvoid folios_put_refs (struct folio_batch *folios, unsigned int *refs)”h]”hù)�”}”(hŒDvoid folios_put_refs(struct folio_batch *folios, unsigned int *refs)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjƤh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¤h²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MÇubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕ¤h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¤h²hh³jÔ¤h´MÇubhÿ)�”}”(hŒfolios_put_refs”h]”j)�”}”(hŒfolios_put_refs”h]”hŒfolios_put_refs”…”�”}”(hjç¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjã¤ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¤h²hh³jÔ¤h´MÇubj )�”}”(hŒ0(struct folio_batch *folios, unsigned int *refs)”h]”(j )�”}”(hŒstruct folio_batch *folios”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÿ¤ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÿ¤ubh)�”}”(hhh]”j)�”}”(hŒ folio_batch”h]”hŒ folio_batch”…”�”}”(hj!¥h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¥ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j#¥Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljé¤sbŒc.folios_put_refs”†”asbuh1hhjÿ¤ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA¥h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÿ¤ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjO¥h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÿ¤ubj)�”}”(hŒfolios”h]”hŒfolios”…”�”}”(hj\¥h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÿ¤ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjû¤ubj )�”}”(hŒunsigned int *refs”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hju¥h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjq¥ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒ¥h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjq¥ubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj‘¥h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjq¥ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ¥h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjq¥ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj­¥h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjq¥ubj)�”}”(hŒrefs”h]”hŒrefs”…”�”}”(hjº¥h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjq¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjû¤ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¤h²hh³jÔ¤h´MÇubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¾¤h²hh³jÔ¤h´MÇubah}”(h]”j¹¤ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÔ¤h´MÇhj»¤h²hubj4)�”}”(hhh]”jM)�”}”(hŒ0Reduce the reference count on a batch of folios.”h]”hŒ0Reduce the reference count on a batch of folios.”…”�”}”(hjä¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MÇhjá¥h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj»¤h²hh³jÔ¤h´MÇubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjü¥jHjü¥jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX{**Parameters** ``struct folio_batch *folios`` The folios. ``unsigned int *refs`` The number of refs to subtract from each folio. **Description** Like folio_put(), but for a batch of folios. This is more efficient than writing the loop yourself as it will optimise the locks which need to be taken if the folios are freed. The folios batch is returned empty and ready to be reused for another batch; there is no need to reinitialise it. If **refs** is NULL, we subtract one from each folio refcount. **Context** May be called in process or interrupt context, but not in NMI context. May be called while holding a spinlock.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¦h]”hŒ Parameters”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MËhj¦ubj¤)�”}”(hhh]”(j©)�”}”(hŒ+``struct folio_batch *folios`` The folios. ”h]”(j¯)�”}”(hŒ``struct folio_batch *folios``”h]”jS)�”}”(hj%¦h]”hŒstruct folio_batch *folios”…”�”}”(hj'¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj#¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MÈhj¦ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folios.”h]”hŒ The folios.”…”�”}”(hj>¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j:¦h´MÈhj;¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j:¦h´MÈhj¦ubj©)�”}”(hŒG``unsigned int *refs`` The number of refs to subtract from each folio. ”h]”(j¯)�”}”(hŒ``unsigned int *refs``”h]”jS)�”}”(hj^¦h]”hŒunsigned int *refs”…”�”}”(hj`¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj\¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MÉhjX¦ubjÉ)�”}”(hhh]”jM)�”}”(hŒ/The number of refs to subtract from each folio.”h]”hŒ/The number of refs to subtract from each folio.”…”�”}”(hjw¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³js¦h´MÉhjt¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjX¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³js¦h´MÉhj¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¦ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj™¦h]”hŒ Description”…”�”}”(hj›¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj—¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MËhj¦ubjM)�”}”(hXdLike folio_put(), but for a batch of folios. This is more efficient than writing the loop yourself as it will optimise the locks which need to be taken if the folios are freed. The folios batch is returned empty and ready to be reused for another batch; there is no need to reinitialise it. If **refs** is NULL, we subtract one from each folio refcount.”h]”(hX)Like folio_put(), but for a batch of folios. This is more efficient than writing the loop yourself as it will optimise the locks which need to be taken if the folios are freed. The folios batch is returned empty and ready to be reused for another batch; there is no need to reinitialise it. If ”…”�”}”(hj¯¦h²hh³Nh´NubjŽ)�”}”(hŒ**refs**”h]”hŒrefs”…”�”}”(hj·¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¯¦ubhŒ3 is NULL, we subtract one from each folio refcount.”…”�”}”(hj¯¦h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MÊhj¦ubjM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MÑhj¦ubjM)�”}”(hŒoMay be called in process or interrupt context, but not in NMI context. May be called while holding a spinlock.”h]”hŒoMay be called in process or interrupt context, but not in NMI context. May be called while holding a spinlock.”…”�”}”(hjè¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.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”]”(héŒrelease_pages (C function)”Œc.release_pages”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ2void release_pages (release_pages_arg arg, int nr)”h]”hù)�”}”(hŒ1void release_pages(release_pages_arg arg, int nr)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj§h²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&§h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj§h²hh³j%§h´Mubhÿ)�”}”(hŒ release_pages”h]”j)�”}”(hŒ release_pages”h]”hŒ release_pages”…”�”}”(hj8§h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4§ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj§h²hh³j%§h´Mubj )�”}”(hŒ(release_pages_arg arg, int nr)”h]”(j )�”}”(hŒrelease_pages_arg arg”h]”(h)�”}”(hhh]”j)�”}”(hŒrelease_pages_arg”h]”hŒrelease_pages_arg”…”�”}”(hjW§h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjT§ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jY§Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj:§sbŒc.release_pages”†”asbuh1hhjP§ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjw§h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjP§ubj)�”}”(hŒarg”h]”hŒarg”…”�”}”(hj…§h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjP§ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjL§ubj )�”}”(hŒint nr”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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š§ubj)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjº§h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjš§ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjL§ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj§h²hh³j%§h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj§h²hh³j%§h´Mubah}”(h]”j §ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j%§h´Mhj §h²hubj4)�”}”(hhh]”jM)�”}”(hŒbatched put_page()”h]”hŒbatched put_page()”…”�”}”(hjä§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´Mhjá§h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj §h²hh³j%§h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjü§jHjü§jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX˜**Parameters** ``release_pages_arg arg`` array of pages to release ``int nr`` number of pages **Description** Decrement the reference count on all the pages in **arg**. If it fell to zero, remove the page from the LRU and free it. Note that the argument can be an array of pages, encoded pages, or folio pointers. We ignore any encoded bits, and turn any of them into just a folio that gets free'd.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¨h]”hŒ Parameters”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´Mhj¨ubj¤)�”}”(hhh]”(j©)�”}”(hŒ4``release_pages_arg arg`` array of pages to release ”h]”(j¯)�”}”(hŒ``release_pages_arg arg``”h]”jS)�”}”(hj%¨h]”hŒrelease_pages_arg arg”…”�”}”(hj'¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj#¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´Mhj¨ubjÉ)�”}”(hhh]”jM)�”}”(hŒarray of pages to release”h]”hŒarray of pages to release”…”�”}”(hj>¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j:¨h´Mhj;¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j:¨h´Mhj¨ubj©)�”}”(hŒ``int nr`` number of pages ”h]”(j¯)�”}”(hŒ ``int nr``”h]”jS)�”}”(hj^¨h]”hŒint nr”…”�”}”(hj`¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj\¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MhjX¨ubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages”h]”hŒnumber of pages”…”�”}”(hjw¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³js¨h´Mhjt¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjX¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³js¨h´Mhj¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¨ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj™¨h]”hŒ Description”…”�”}”(hj›¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj—¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´Mhj¨ubjM)�”}”(hŒyDecrement the reference count on all the pages in **arg**. If it fell to zero, remove the page from the LRU and free it.”h]”(hŒ2Decrement the reference count on all the pages in ”…”�”}”(hj¯¨h²hh³Nh´NubjŽ)�”}”(hŒ**arg**”h]”hŒarg”…”�”}”(hj·¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¯¨ubhŒ@. If it fell to zero, remove the page from the LRU and free it.”…”�”}”(hj¯¨h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´Mhj¨ubjM)�”}”(hŒ§Note that the argument can be an array of pages, encoded pages, or folio pointers. We ignore any encoded bits, and turn any of them into just a folio that gets free'd.”h]”hŒ©Note that the argument can be an array of pages, encoded pages, or folio pointers. We ignore any encoded bits, and turn any of them into just a folio that gets free’d.”…”�”}”(hjШh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´Mhj¨ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ,folio_batch_remove_exceptionals (C function)”Œ!c.folio_batch_remove_exceptionals”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒAvoid folio_batch_remove_exceptionals (struct folio_batch *fbatch)”h]”hù)�”}”(hŒ@void folio_batch_remove_exceptionals(struct folio_batch *fbatch)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÿ¨h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjû¨h²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MMubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjû¨h²hh³j ©h´MMubhÿ)�”}”(hŒfolio_batch_remove_exceptionals”h]”j)�”}”(hŒfolio_batch_remove_exceptionals”h]”hŒfolio_batch_remove_exceptionals”…”�”}”(hj ©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj©ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjû¨h²hh³j ©h´MMubj )�”}”(hŒ(struct folio_batch *fbatch)”h]”j )�”}”(hŒstruct folio_batch *fbatch”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj<©h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj8©ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjI©h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj8©ubh)�”}”(hhh]”j)�”}”(hŒ folio_batch”h]”hŒ folio_batch”…”�”}”(hjZ©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjW©ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j\©Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj"©sbŒ!c.folio_batch_remove_exceptionals”†”asbuh1hhj8©ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjz©h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj8©ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjˆ©h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj8©ubj)�”}”(hŒfbatch”h]”hŒfbatch”…”�”}”(hj•©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj8©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj4©ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjû¨h²hh³j ©h´MMubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj÷¨h²hh³j ©h´MMubah}”(h]”jò¨ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j ©h´MMhjô¨h²hubj4)�”}”(hhh]”jM)�”}”(hŒPrune non-folios from a batch.”h]”hŒPrune non-folios from a batch.”…”�”}”(hj¿©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MMhj¼©h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjô¨h²hh³j ©h´MMubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjשjHjשjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX7**Parameters** ``struct folio_batch *fbatch`` The batch to prune **Description** find_get_entries() fills a batch with both folios and shadow/swap/DAX entries. This function prunes all the non-folio entries from **fbatch** without leaving holes, so that it can be passed on to folio-only batch operations.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjá©h]”hŒ Parameters”…”�”}”(hjã©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjß©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MQhjÛ©ubj¤)�”}”(hhh]”j©)�”}”(hŒ2``struct folio_batch *fbatch`` The batch to prune ”h]”(j¯)�”}”(hŒ``struct folio_batch *fbatch``”h]”jS)�”}”(hjªh]”hŒstruct folio_batch *fbatch”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjþ©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MNhjú©ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe batch to prune”h]”hŒThe batch to prune”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jªh´MNhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjú©ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jªh´MNhj÷©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÛ©ubjM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MPhjÛ©ubjM)�”}”(hŒáfind_get_entries() fills a batch with both folios and shadow/swap/DAX entries. This function prunes all the non-folio entries from **fbatch** without leaving holes, so that it can be passed on to folio-only batch operations.”h]”(hŒ„find_get_entries() fills a batch with both folios and shadow/swap/DAX entries. This function prunes all the non-folio entries from ”…”�”}”(hjQªh²hh³Nh´NubjŽ)�”}”(hŒ **fbatch**”h]”hŒfbatch”…”�”}”(hjYªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjQªubhŒS without leaving holes, so that it can be passed on to folio-only batch operations.”…”�”}”(hjQªh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./mm/folio.c”h´MOhjÛ©ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ*get_mem_cgroup_css_from_folio (C function)”Œc.get_mem_cgroup_css_from_folio”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒPstruct cgroup_subsys_state * get_mem_cgroup_css_from_folio (struct folio *folio)”h]”hù)�”}”(hŒNstruct cgroup_subsys_state *get_mem_cgroup_css_from_folio(struct folio *folio)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj’ªh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjŽªh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MDubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ªh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŽªh²hh³jŸªh´MDubh)�”}”(hhh]”j)�”}”(hŒcgroup_subsys_state”h]”hŒcgroup_subsys_state”…”�”}”(hj±ªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj®ªubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j³ªŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒget_mem_cgroup_css_from_folio”sbŒc.get_mem_cgroup_css_from_folio”†”asbuh1hhjŽªh²hh³jŸªh´MDubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒªh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŽªh²hh³jŸªh´MDubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjàªh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjŽªh²hh³jŸªh´MDubhÿ)�”}”(hŒget_mem_cgroup_css_from_folio”h]”j)�”}”(hjϪh]”hŒget_mem_cgroup_css_from_folio”…”�”}”(hjñªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjíªubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjŽªh²hh³jŸªh´MDubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj «h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj«ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj«ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj*«h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj'«ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j,«Œmodname”NŒ classname”Njpjs)�”}”jv]”jͪŒc.get_mem_cgroup_css_from_folio”†”asbuh1hhj«ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjH«h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj«ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjV«h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj«ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjc«h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj«ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj«ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjŽªh²hh³jŸªh´MDubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjŠªh²hh³jŸªh´MDubah}”(h]”j…ªah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jŸªh´MDhj‡ªh²hubj4)�”}”(hhh]”jM)�”}”(hŒ2acquire a css of the memcg associated with a folio”h]”hŒ2acquire a css of the memcg associated with a folio”…”�”}”(hj�«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MDhjŠ«h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj‡ªh²hh³jŸªh´MDubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¥«jHj¥«jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXR**Parameters** ``struct folio *folio`` folio of interest **Description** If memcg is bound to the default hierarchy, css of the memcg associated with **folio** is returned. The returned css remains associated with **folio** until it is released. If memcg is bound to a traditional hierarchy, the css of root_mem_cgroup is returned.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¯«h]”hŒ Parameters”…”�”}”(hj±«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj­«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MHhj©«ubj¤)�”}”(hhh]”j©)�”}”(hŒ*``struct folio *folio`` folio of interest ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjΫh]”hŒstruct folio *folio”…”�”}”(hjЫh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÌ«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MEhjÈ«ubjÉ)�”}”(hhh]”jM)�”}”(hŒfolio of interest”h]”hŒfolio of interest”…”�”}”(hjç«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jã«h´MEhjä«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÈ«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jã«h´MEhjÅ«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj©«ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj ¬h]”hŒ Description”…”�”}”(hj ¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MGhj©«ubjM)�”}”(hŒ­If memcg is bound to the default hierarchy, css of the memcg associated with **folio** is returned. The returned css remains associated with **folio** until it is released.”h]”(hŒMIf memcg is bound to the default hierarchy, css of the memcg associated with ”…”�”}”(hj¬h²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj'¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¬ubhŒ8 is returned. The returned css remains associated with ”…”�”}”(hj¬h²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj9¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¬ubhŒ until it is released.”…”�”}”(hj¬h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MFhj©«ubjM)�”}”(hŒUIf memcg is bound to a traditional hierarchy, the css of root_mem_cgroup is returned.”h]”hŒUIf memcg is bound to a traditional hierarchy, the css of root_mem_cgroup is returned.”…”�”}”(hjR¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MJhj©«ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpage_cgroup_ino (C function)”Œc.page_cgroup_ino”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ)ino_t page_cgroup_ino (struct page *page)”h]”hù)�”}”(hŒ(ino_t page_cgroup_ino(struct page *page)”h]”(h)�”}”(hhh]”j)�”}”(hŒino_t”h]”hŒino_t”…”�”}”(hj„¬h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�¬ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j†¬Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒpage_cgroup_ino”sbŒc.page_cgroup_ino”†”asbuh1hhj}¬h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M[ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦¬h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj}¬h²hh³j¥¬h´M[ubhÿ)�”}”(hŒpage_cgroup_ino”h]”j)�”}”(hj¢¬h]”hŒpage_cgroup_ino”…”�”}”(hj¸¬h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj´¬ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj}¬h²hh³j¥¬h´M[ubj )�”}”(hŒ(struct page *page)”h]”j )�”}”(hŒstruct page *page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÓ¬h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjϬubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjà¬h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjϬubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjñ¬h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjî¬ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jó¬Œmodname”NŒ classname”Njpjs)�”}”jv]”j ¬Œc.page_cgroup_ino”†”asbuh1hhjϬubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjϬubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjϬubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj*­h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjϬubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjˬubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj}¬h²hh³j¥¬h´M[ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjy¬h²hh³j¥¬h´M[ubah}”(h]”jt¬ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¥¬h´M[hjv¬h²hubj4)�”}”(hhh]”jM)�”}”(hŒ5return inode number of the memcg a page is charged to”h]”hŒ5return inode number of the memcg a page is charged to”…”�”}”(hjT­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M[hjQ­h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjv¬h²hh³j¥¬h´M[ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjl­jHjl­jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX5**Parameters** ``struct page *page`` the page **Description** Look up the closest online ancestor of the memory cgroup **page** is charged to and return its inode number or 0 if **page** is not charged to any cgroup. It is safe to call this function without holding a reference to **page**. Note, this function is inherently racy, because there is nothing to prevent the cgroup inode from getting torn down and potentially reallocated a moment after page_cgroup_ino() returns, so it only should be used by callers that do not care (such as procfs interfaces).”h]”(jM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M_hjp­ubj¤)�”}”(hhh]”j©)�”}”(hŒ``struct page *page`` the page ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hj•­h]”hŒstruct page *page”…”�”}”(hj—­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj“­ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M\hj�­ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe page”h]”hŒthe page”…”�”}”(hj®­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jª­h´M\hj«­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jª­h´M\hjŒ­ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjp­ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjЭh]”hŒ Description”…”�”}”(hjÒ­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjέubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M^hjp­ubjM)�”}”(hŒäLook up the closest online ancestor of the memory cgroup **page** is charged to and return its inode number or 0 if **page** is not charged to any cgroup. It is safe to call this function without holding a reference to **page**.”h]”(hŒ9Look up the closest online ancestor of the memory cgroup ”…”�”}”(hjæ­h²hh³Nh´NubjŽ)�”}”(hŒ**page**”h]”hŒpage”…”�”}”(hjî­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjæ­ubhŒ3 is charged to and return its inode number or 0 if ”…”�”}”(hjæ­h²hh³Nh´NubjŽ)�”}”(hŒ**page**”h]”hŒpage”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjæ­ubhŒ_ is not charged to any cgroup. It is safe to call this function without holding a reference to ”…”�”}”(hjæ­h²hh³Nh´NubjŽ)�”}”(hŒ**page**”h]”hŒpage”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjæ­ubhŒ.”…”�”}”(hjæ­h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M]hjp­ubjM)�”}”(hX Note, this function is inherently racy, because there is nothing to prevent the cgroup inode from getting torn down and potentially reallocated a moment after page_cgroup_ino() returns, so it only should be used by callers that do not care (such as procfs interfaces).”h]”hX Note, this function is inherently racy, because there is nothing to prevent the cgroup inode from getting torn down and potentially reallocated a moment after page_cgroup_ino() returns, so it only should be used by callers that do not care (such as procfs interfaces).”…”�”}”(hj+®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mahjp­ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ(lruvec_page_state_monotonic (C function)”Œc.lruvec_page_state_monotonic”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒZunsigned long lruvec_page_state_monotonic (struct lruvec *lruvec, enum node_stat_item idx)”h]”hù)�”}”(hŒYunsigned long lruvec_page_state_monotonic(struct lruvec *lruvec, enum node_stat_item idx)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjZ®h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjV®h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hji®h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjV®h²hh³jh®h´Mubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjw®h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjV®h²hh³jh®h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…®h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjV®h²hh³jh®h´Mubhÿ)�”}”(hŒlruvec_page_state_monotonic”h]”j)�”}”(hŒlruvec_page_state_monotonic”h]”hŒlruvec_page_state_monotonic”…”�”}”(hj—®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj“®ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjV®h²hh³jh®h´Mubj )�”}”(hŒ0(struct lruvec *lruvec, enum node_stat_item idx)”h]”(j )�”}”(hŒstruct lruvec *lruvec”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj³®h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¯®ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀ®h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¯®ubh)�”}”(hhh]”j)�”}”(hŒlruvec”h]”hŒlruvec”…”�”}”(hjÑ®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjήubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÓ®Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj™®sbŒc.lruvec_page_state_monotonic”†”asbuh1hhj¯®ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñ®h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¯®ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÿ®h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¯®ubj)�”}”(hŒlruvec”h]”hŒlruvec”…”�”}”(hj ¯h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¯®ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj«®ubj )�”}”(hŒenum node_stat_item idx”h]”(j5)�”}”(hj‘ôh]”hŒenum”…”�”}”(hj%¯h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj!¯ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2¯h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj!¯ubh)�”}”(hhh]”j)�”}”(hŒnode_stat_item”h]”hŒnode_stat_item”…”�”}”(hjC¯h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj@¯ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jE¯Œmodname”NŒ classname”Njpjs)�”}”jv]”jí®Œc.lruvec_page_state_monotonic”†”asbuh1hhj!¯ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hja¯h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj!¯ubj)�”}”(hŒidx”h]”hŒidx”…”�”}”(hjo¯h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj!¯ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj«®ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjV®h²hh³jh®h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjR®h²hh³jh®h´Mubah}”(h]”jM®ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jh®h´MhjO®h²hubj4)�”}”(hhh]”jM)�”}”(hŒ0non-clamping lruvec stat read for delta sampling”h]”hŒ0non-clamping lruvec stat read for delta sampling”…”�”}”(hj™¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mhj–¯h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjO®h²hh³jh®h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj±¯jHj±¯jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX/**Parameters** ``struct lruvec *lruvec`` the LRU vector to read from ``enum node_stat_item idx`` the node_stat_item to read **Description** Returns the raw state[idx] value cast to unsigned long, skipping the clamp-negative-to-zero step in lruvec_page_state(). Intended for callers that snapshot a monotonically-incremented counter and subtract two samples: unsigned modular arithmetic then yields the correct delta across a signed-long wraparound (a real hazard on 32-bit) that the clamp would otherwise turn into a huge spurious delta. Do NOT use for non-monotonic page-count reads where a transient negative reading from per-CPU delta skew must present as zero. XXX: This helper (and its node/global peers) exists because some monotonically-incremented event counters are stored in enum node_stat_item.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj»¯h]”hŒ Parameters”…”�”}”(hj½¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¹¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mhjµ¯ubj¤)�”}”(hhh]”(j©)�”}”(hŒ6``struct lruvec *lruvec`` the LRU vector to read from ”h]”(j¯)�”}”(hŒ``struct lruvec *lruvec``”h]”jS)�”}”(hjÚ¯h]”hŒstruct lruvec *lruvec”…”�”}”(hjܯh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjدubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MhjÔ¯ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe LRU vector to read from”h]”hŒthe LRU vector to read from”…”�”}”(hjó¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jï¯h´Mhjð¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÔ¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jï¯h´Mhjѯubj©)�”}”(hŒ7``enum node_stat_item idx`` the node_stat_item to read ”h]”(j¯)�”}”(hŒ``enum node_stat_item idx``”h]”jS)�”}”(hj°h]”hŒenum node_stat_item idx”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mhj °ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe node_stat_item to read”h]”hŒthe node_stat_item to read”…”�”}”(hj,°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j(°h´Mhj)°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj °ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j(°h´Mhjѯubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjµ¯ubjM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mhjµ¯ubjM)�”}”(hX�Returns the raw state[idx] value cast to unsigned long, skipping the clamp-negative-to-zero step in lruvec_page_state(). Intended for callers that snapshot a monotonically-incremented counter and subtract two samples: unsigned modular arithmetic then yields the correct delta across a signed-long wraparound (a real hazard on 32-bit) that the clamp would otherwise turn into a huge spurious delta.”h]”hX�Returns the raw state[idx] value cast to unsigned long, skipping the clamp-negative-to-zero step in lruvec_page_state(). Intended for callers that snapshot a monotonically-incremented counter and subtract two samples: unsigned modular arithmetic then yields the correct delta across a signed-long wraparound (a real hazard on 32-bit) that the clamp would otherwise turn into a huge spurious delta.”…”�”}”(hjd°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mhjµ¯ubjM)�”}”(hŒ~Do NOT use for non-monotonic page-count reads where a transient negative reading from per-CPU delta skew must present as zero.”• h]”hŒ~Do NOT use for non-monotonic page-count reads where a transient negative reading from per-CPU delta skew must present as zero.”…”�”}”(hjs°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M hjµ¯ubjM)�”}”(hŒŒXXX: This helper (and its node/global peers) exists because some monotonically-incremented event counters are stored in enum node_stat_item.”h]”hŒŒXXX: This helper (and its node/global peers) exists because some monotonically-incremented event counters are stored in enum node_stat_item.”…”�”}”(hj‚°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mhjµ¯ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmod_memcg_state (C function)”Œc.mod_memcg_state”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒRvoid mod_memcg_state (struct mem_cgroup *memcg, enum memcg_stat_item idx, int val)”h]”hù)�”}”(hŒQvoid mod_memcg_state(struct mem_cgroup *memcg, enum memcg_stat_item idx, int val)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj±°h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj­°h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀ°h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj­°h²hh³j¿°h´M�ubhÿ)�”}”(hŒmod_memcg_state”h]”j)�”}”(hŒmod_memcg_state”h]”hŒmod_memcg_state”…”�”}”(hjÒ°h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjΰubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj­°h²hh³j¿°h´M�ubj )�”}”(hŒ=(struct mem_cgroup *memcg, enum memcg_stat_item idx, int val)”h]”(j )�”}”(hŒstruct mem_cgroup *memcg”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjî°h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjê°ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjû°h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjê°ubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hj ±h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ±ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j±Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÔ°sbŒc.mod_memcg_state”†”asbuh1hhjê°ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,±h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjê°ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj:±h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjê°ubj)�”}”(hŒmemcg”h]”hŒmemcg”…”�”}”(hjG±h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjê°ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjæ°ubj )�”}”(hŒenum memcg_stat_item idx”h]”(j5)�”}”(hj‘ôh]”hŒenum”…”�”}”(hj`±h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj\±ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjm±h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj\±ubh)�”}”(hhh]”j)�”}”(hŒmemcg_stat_item”h]”hŒmemcg_stat_item”…”�”}”(hj~±h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj{±ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j€±Œmodname”NŒ classname”Njpjs)�”}”jv]”j(±Œc.mod_memcg_state”†”asbuh1hhj\±ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœ±h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj\±ubj)�”}”(hŒidx”h]”hŒidx”…”�”}”(hjª±h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj\±ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjæ°ubj )�”}”(hŒint val”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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¿±ubj)�”}”(hŒval”h]”hŒval”…”�”}”(hjß±h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¿±ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjæ°ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj­°h²hh³j¿°h´M�ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj©°h²hh³j¿°h´M�ubah}”(h]”j¤°ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¿°h´M�hj¦°h²hubj4)�”}”(hhh]”jM)�”}”(hŒupdate cgroup memory statistics”h]”hŒupdate cgroup memory statistics”…”�”}”(hj ²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M�hj²h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¦°h²hh³j¿°h´M�ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj!²jHj!²jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒß**Parameters** ``struct mem_cgroup *memcg`` the memory cgroup ``enum memcg_stat_item idx`` the stat item - can be enum memcg_stat_item or enum node_stat_item ``int val`` delta to add to the counter, can be negative”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj+²h]”hŒ Parameters”…”�”}”(hj-²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj)²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M“hj%²ubj¤)�”}”(hhh]”(j©)�”}”(hŒ/``struct mem_cgroup *memcg`` the memory cgroup ”h]”(j¯)�”}”(hŒ``struct mem_cgroup *memcg``”h]”jS)�”}”(hjJ²h]”hŒstruct mem_cgroup *memcg”…”�”}”(hjL²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjH²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M�hjD²ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe memory cgroup”h]”hŒthe memory cgroup”…”�”}”(hjc²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j_²h´M�hj`²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjD²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j_²h´M�hjA²ubj©)�”}”(hŒ```enum memcg_stat_item idx`` the stat item - can be enum memcg_stat_item or enum node_stat_item ”h]”(j¯)�”}”(hŒ``enum memcg_stat_item idx``”h]”jS)�”}”(hjƒ²h]”hŒenum memcg_stat_item idx”…”�”}”(hj…²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M‘hj}²ubjÉ)�”}”(hhh]”jM)�”}”(hŒBthe stat item - can be enum memcg_stat_item or enum node_stat_item”h]”hŒBthe stat item - can be enum memcg_stat_item or enum node_stat_item”…”�”}”(hjœ²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j˜²h´M‘hj™²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj}²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j˜²h´M‘hjA²ubj©)�”}”(hŒ8``int val`` delta to add to the counter, can be negative”h]”(j¯)�”}”(hŒ ``int val``”h]”jS)�”}”(hj¼²h]”hŒint val”…”�”}”(hj¾²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjº²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M“hj¶²ubjÉ)�”}”(hhh]”jM)�”}”(hŒ,delta to add to the counter, can be negative”h]”hŒ,delta to add to the counter, can be negative”…”�”}”(hjÕ²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M’hjÒ²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¶²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jѲh´M“hjA²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”]”(héŒmod_lruvec_state (C function)”Œc.mod_lruvec_state”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒOvoid mod_lruvec_state (struct lruvec *lruvec, enum node_stat_item idx, int val)”h]”hù)�”}”(hŒNvoid mod_lruvec_state(struct lruvec *lruvec, enum node_stat_item idx, int val)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj³h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MéubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%³h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj³h²hh³j$³h´Méubhÿ)�”}”(hŒmod_lruvec_state”h]”j)�”}”(hŒmod_lruvec_state”h]”hŒmod_lruvec_state”…”�”}”(hj7³h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3³ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj³h²hh³j$³h´Méubj )�”}”(hŒ9(struct lruvec *lruvec, enum node_stat_item idx, int val)”h]”(j )�”}”(hŒstruct lruvec *lruvec”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjS³h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjO³ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`³h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjO³ubh)�”}”(hhh]”j)�”}”(hŒlruvec”h]”hŒlruvec”…”�”}”(hjq³h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjn³ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”js³Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj9³sbŒc.mod_lruvec_state”†”asbuh1hhjO³ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘³h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjO³ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjŸ³h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjO³ubj)�”}”(hŒlruvec”h]”hŒlruvec”…”�”}”(hj¬³h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjO³ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjK³ubj )�”}”(hŒenum node_stat_item idx”h]”(j5)�”}”(hj‘ôh]”hŒenum”…”�”}”(hjųh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÁ³ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒ³h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÁ³ubh)�”}”(hhh]”j)�”}”(hŒnode_stat_item”h]”hŒnode_stat_item”…”�”}”(hjã³h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjà³ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j峌modname”NŒ classname”Njpjs)�”}”jv]”j�³Œc.mod_lruvec_state”†”asbuh1hhjÁ³ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÁ³ubj)�”}”(hŒidx”h]”hŒidx”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÁ³ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjK³ubj )�”}”(hŒint val”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj(´h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj$´ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6´h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj$´ubj)�”}”(hŒval”h]”hŒval”…”�”}”(hjD´h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj$´ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjK³ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj³h²hh³j$³h´Méubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj³h²hh³j$³h´Méubah}”(h]”j ³ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j$³h´Méhj ³h²hubj4)�”}”(hhh]”jM)�”}”(hŒupdate lruvec memory statistics”h]”hŒupdate lruvec memory statistics”…”�”}”(hjn´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Méhjk´h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj ³h²hh³j$³h´Méubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj†´jHj†´jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXt**Parameters** ``struct lruvec *lruvec`` the lruvec ``enum node_stat_item idx`` the stat item ``int val`` delta to add to the counter, can be negative **Description** The lruvec is the intersection of the NUMA node and a cgroup. This function updates the all three counters that are affected by a change of state at this level: per-node, per-cgroup, per-lruvec.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj�´h]”hŒ Parameters”…”�”}”(hj’´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŽ´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MíhjŠ´ubj¤)�”}”(hhh]”(j©)�”}”(hŒ%``struct lruvec *lruvec`` the lruvec ”h]”(j¯)�”}”(hŒ``struct lruvec *lruvec``”h]”jS)�”}”(hj¯´h]”hŒstruct lruvec *lruvec”…”�”}”(hj±´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj­´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mêhj©´ubjÉ)�”}”(hhh]”jM)�”}”(hŒ the lruvec”h]”hŒ the lruvec”…”�”}”(hjÈ´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÄ´h´MêhjÅ´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj©´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÄ´h´Mêhj¦´ubj©)�”}”(hŒ*``enum node_stat_item idx`` the stat item ”h]”(j¯)�”}”(hŒ``enum node_stat_item idx``”h]”jS)�”}”(hjè´h]”hŒenum node_stat_item idx”…”�”}”(hjê´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjæ´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mëhjâ´ubjÉ)�”}”(hhh]”jM)�”}”(hŒ the stat item”h]”hŒ the stat item”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jý´h´Mëhjþ´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjâ´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jý´h´Mëhj¦´ubj©)�”}”(hŒ9``int val`` delta to add to the counter, can be negative ”h]”(j¯)�”}”(hŒ ``int val``”h]”jS)�”}”(hj!µh]”hŒint val”…”�”}”(hj#µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjµubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MìhjµubjÉ)�”}”(hhh]”jM)�”}”(hŒ,delta to add to the counter, can be negative”h]”hŒ,delta to add to the counter, can be negative”…”�”}”(hj:µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j6µh´Mìhj7µubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjµubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j6µh´Mìhj¦´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjŠ´ubjM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MîhjŠ´ubjM)�”}”(hŒÂThe lruvec is the intersection of the NUMA node and a cgroup. This function updates the all three counters that are affected by a change of state at this level: per-node, per-cgroup, per-lruvec.”h]”hŒÂThe lruvec is the intersection of the NUMA node and a cgroup. This function updates the all three counters that are affected by a change of state at this level: per-node, per-cgroup, per-lruvec.”…”�”}”(hjrµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.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”]”(héŒcount_memcg_events (C function)”Œc.count_memcg_events”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ_void count_memcg_events (struct mem_cgroup *memcg, enum vm_event_item idx, unsigned long count)”h]”hù)�”}”(hŒ^void count_memcg_events(struct mem_cgroup *memcg, enum vm_event_item idx, unsigned long count)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¡µh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj�µh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M,ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°µh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�µh²hh³j¯µh´M,ubhÿ)�”}”(hŒcount_memcg_events”h]”j)�”}”(hŒcount_memcg_events”h]”hŒcount_memcg_events”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾µubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj�µh²hh³j¯µh´M,ubj )�”}”(hŒG(struct mem_cgroup *memcg, enum vm_event_item idx, unsigned long count)”h]”(j )�”}”(hŒstruct mem_cgroup *memcg”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÞµh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÚµubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëµh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÚµubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hjüµh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjùµubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jþµŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljĵsbŒc.count_memcg_events”†”asbuh1hhjÚµubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÚµubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj*¶h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÚµubj)�”}”(hŒmemcg”h]”hŒmemcg”…”�”}”(hj7¶h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÚµubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÖµubj )�”}”(hŒenum vm_event_item idx”h]”(j5)�”}”(hj‘ôh]”hŒenum”…”�”}”(hjP¶h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjL¶ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]¶h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjL¶ubh)�”}”(hhh]”j)�”}”(hŒ vm_event_item”h]”hŒ vm_event_item”…”�”}”(hjn¶h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjk¶ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jp¶Œmodname”NŒ classname”Njpjs)�”}”jv]”j¶Œc.count_memcg_events”†”asbuh1hhjL¶ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒ¶h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjL¶ubj)�”}”(hŒidx”h]”hŒidx”…”�”}”(hjš¶h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjL¶ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÖµubj )�”}”(hŒunsigned long count”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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¯¶ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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¯¶ubj)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjë¶h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¯¶ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÖµubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj�µh²hh³j¯µh´M,ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj™µh²hh³j¯µh´M,ubah}”(h]”j”µah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¯µh´M,hj–µh²hubj4)�”}”(hhh]”jM)�”}”(hŒaccount VM events in a cgroup”h]”hŒaccount VM events in a cgroup”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M,hj·h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj–µh²hh³j¯µh´M,ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj-·jHj-·jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ«**Parameters** ``struct mem_cgroup *memcg`` the memory cgroup ``enum vm_event_item idx`` the event item ``unsigned long count`` the number of events that occurred”h]”(jM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M0hj1·ubj¤)�”}”(hhh]”(j©)�”}”(hŒ/``struct mem_cgroup *memcg`` the memory cgroup ”h]”(j¯)�”}”(hŒ``struct mem_cgroup *memcg``”h]”jS)�”}”(hjV·h]”hŒstruct mem_cgroup *memcg”…”�”}”(hjX·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjT·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M-hjP·ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe memory cgroup”h]”hŒthe memory cgroup”…”�”}”(hjo·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jk·h´M-hjl·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjP·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jk·h´M-hjM·ubj©)�”}”(hŒ*``enum vm_event_item idx`` the event item ”h]”(j¯)�”}”(hŒ``enum vm_event_item idx``”h]”jS)�”}”(hj�·h]”hŒenum vm_event_item idx”…”�”}”(hj‘·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M.hj‰·ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe event item”h]”hŒthe event item”…”�”}”(hj¨·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¤·h´M.hj¥·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‰·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¤·h´M.hjM·ubj©)�”}”(hŒ:``unsigned long count`` the number of events that occurred”h]”(j¯)�”}”(hŒ``unsigned long count``”h]”jS)�”}”(hjÈ·h]”hŒunsigned long count”…”�”}”(hjÊ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÆ·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M0hj·ubjÉ)�”}”(hhh]”jM)�”}”(hŒ"the number of events that occurred”h]”hŒ"the number of events that occurred”…”�”}”(hjá·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M/hjÞ·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÝ·h´M0hjM·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj1·ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ#get_mem_cgroup_from_mm (C function)”Œc.get_mem_cgroup_from_mm”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒAstruct mem_cgroup * get_mem_cgroup_from_mm (struct mm_struct *mm)”h]”hù)�”}”(hŒ?struct mem_cgroup *get_mem_cgroup_from_mm(struct mm_struct *mm)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj"¸h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¸h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M{ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0¸h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¸h²hh³j/¸h´M{ubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hjA¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>¸ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jC¸Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒget_mem_cgroup_from_mm”sbŒc.get_mem_cgroup_from_mm”†”asbuh1hhj¸h²hh³j/¸h´M{ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjb¸h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¸h²hh³j/¸h´M{ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjp¸h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¸h²hh³j/¸h´M{ubhÿ)�”}”(hŒget_mem_cgroup_from_mm”h]”j)�”}”(hj_¸h]”hŒget_mem_cgroup_from_mm”…”�”}”(hj�¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj}¸ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¸h²hh³j/¸h´M{ubj )�”}”(hŒ(struct mm_struct *mm)”h]”j )�”}”(hŒstruct mm_struct *mm”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjœ¸h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj˜¸ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©¸h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj˜¸ubh)�”}”(hhh]”j)�”}”(hŒ mm_struct”h]”hŒ mm_struct”…”�”}”(hjº¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj·¸ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¼¸Œmodname”NŒ classname”Njpjs)�”}”jv]”j]¸Œc.get_mem_cgroup_from_mm”†”asbuh1hhj˜¸ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjظh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj˜¸ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjæ¸h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj˜¸ubj)�”}”(hŒmm”h]”hŒmm”…”�”}”(hjó¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj˜¸ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj”¸ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¸h²hh³j/¸h´M{ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¸h²hh³j/¸h´M{ubah}”(h]”j¸ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j/¸h´M{hj¸h²hubj4)�”}”(hhh]”jM)�”}”(hŒ.Obtain a reference on given mm_struct's memcg.”h]”hŒ0Obtain a reference on given mm_struct’s memcg.”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M{hj¹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¸h²hh³j/¸h´M{ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj5¹jHj5¹jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXc**Parameters** ``struct mm_struct *mm`` mm from which memcg should be extracted. It can be NULL. **Description** Obtain a reference on mm->memcg and returns it if successful. If mm is NULL, then the memcg is chosen as follows: 1) The active memcg, if set. 2) current->mm->memcg, if available 3) root memcg If mem_cgroup is disabled, NULL is returned.”h]”(jM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mhj9¹ubj¤)�”}”(hhh]”j©)�”}”(hŒR``struct mm_struct *mm`` mm from which memcg should be extracted. It can be NULL. ”h]”(j¯)�”}”(hŒ``struct mm_struct *mm``”h]”jS)�”}”(hj^¹h]”hŒstruct mm_struct *mm”…”�”}”(hj`¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj\¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M|hjX¹ubjÉ)�”}”(hhh]”jM)�”}”(hŒ8mm from which memcg should be extracted. It can be NULL.”h]”hŒ8mm from which memcg should be extracted. It can be NULL.”…”�”}”(hjw¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³js¹h´M|hjt¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjX¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³js¹h´M|hjU¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj9¹ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj™¹h]”hŒ Description”…”�”}”(hj›¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj—¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M~hj9¹ubjM)�”}”(hŒíObtain a reference on mm->memcg and returns it if successful. If mm is NULL, then the memcg is chosen as follows: 1) The active memcg, if set. 2) current->mm->memcg, if available 3) root memcg If mem_cgroup is disabled, NULL is returned.”h]”hŒíObtain a reference on mm->memcg and returns it if successful. If mm is NULL, then the memcg is chosen as follows: 1) The active memcg, if set. 2) current->mm->memcg, if available 3) root memcg If mem_cgroup is disabled, NULL is returned.”…”�”}”(hj¯¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.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”]”(héŒ(get_mem_cgroup_from_current (C function)”Œc.get_mem_cgroup_from_current”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ6struct mem_cgroup * get_mem_cgroup_from_current (void)”h]”hù)�”}”(hŒ4struct mem_cgroup *get_mem_cgroup_from_current(void)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÞ¹h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÚ¹h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M­ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjì¹h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÚ¹h²hh³jë¹h´M­ubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hjý¹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjú¹ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÿ¹Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒget_mem_cgroup_from_current”sbŒc.get_mem_cgroup_from_current”†”asbuh1hhjÚ¹h²hh³jë¹h´M­ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÚ¹h²hh³jë¹h´M­ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj,ºh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÚ¹h²hh³jë¹h´M­ubhÿ)�”}”(hŒget_mem_cgroup_from_current”h]”j)�”}”(hjºh]”hŒget_mem_cgroup_from_current”…”�”}”(hj=ºh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj9ºubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÚ¹h²hh³jë¹h´M­ubj )�”}”(hŒ(void)”h]”j )�”}”(hŒvoid”h]”jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjXºh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjTºubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjPºubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÚ¹h²hh³jë¹h´M­ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÖ¹h²hh³jë¹h´M­ubah}”(h]”jѹah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jë¹h´M­hjÓ¹h²hubj4)�”}”(hhh]”jM)�”}”(hŒ+Obtain a reference on current task's memcg.”h]”hŒ-Obtain a reference on current task’s memcg.”…”�”}”(hj‚ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M­hjºh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÓ¹h²hh³jë¹h´M­ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjšºjHjšºjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ'**Parameters** ``void`` no arguments”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¤ºh]”hŒ Parameters”…”�”}”(hj¦ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¢ºubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M±hjžºubj¤)�”}”(hhh]”j©)�”}”(hŒ``void`` no arguments”h]”(j¯)�”}”(hŒ``void``”h]”jS)�”}”(hjúh]”hŒvoid”…”�”}”(hjźh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÁºubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M³hj½ºubjÉ)�”}”(hhh]”jM)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjܺh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´KhjÙºubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj½ºubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³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”]”(héŒ&get_mem_cgroup_from_folio (C function)”Œc.get_mem_cgroup_from_folio”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒCstruct mem_cgroup * get_mem_cgroup_from_folio (struct folio *folio)”h]”hù)�”}”(hŒAstruct mem_cgroup *get_mem_cgroup_from_folio(struct folio *folio)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj»h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÂubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+»h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj»h²hh³j*»h´MÂubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hj<»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj9»ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j>»Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒget_mem_cgroup_from_folio”sbŒc.get_mem_cgroup_from_folio”†”asbuh1hhj»h²hh³j*»h´MÂubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]»h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj»h²hh³j*»h´MÂubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjk»h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj»h²hh³j*»h´MÂubhÿ)�”}”(hŒget_mem_cgroup_from_folio”h]”j)�”}”(hjZ»h]”hŒget_mem_cgroup_from_folio”…”�”}”(hj|»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjx»ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj»h²hh³j*»h´MÂubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj—»h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj“»ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤»h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj“»ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjµ»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj²»ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j·»Œmodname”NŒ classname”Njpjs)�”}”jv]”jX»Œc.get_mem_cgroup_from_folio”†”asbuh1hhj“»ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓ»h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj“»ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjá»h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj“»ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjî»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj“»ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj�»ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj»h²hh³j*»h´MÂubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj»h²hh³j*»h´MÂubah}”(h]”j»ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j*»h´MÂhj»h²hubj4)�”}”(hhh]”jM)�”}”(hŒ,Obtain a reference on a given folio's memcg.”h]”hŒ.Obtain a reference on a given folio’s memcg.”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÂhj¼h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj»h²hh³j*»h´MÂubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj0¼jHj0¼jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒŸ**Parameters** ``struct folio *folio`` folio from which memcg should be extracted. **Description** See folio_memcg() for folio->objcg/memcg binding rules.”h]”(jM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÆhj4¼ubj¤)�”}”(hhh]”j©)�”}”(hŒD``struct folio *folio`` folio from which memcg should be extracted. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjY¼h]”hŒstruct folio *folio”…”�”}”(hj[¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjW¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÃhjS¼ubjÉ)�”}”(hhh]”jM)�”}”(hŒ+folio from which memcg should be extracted.”h]”hŒ+folio from which memcg should be extracted.”…”�”}”(hjr¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jn¼h´MÃhjo¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjS¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jn¼h´MÃhjP¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj4¼ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj”¼h]”hŒ Description”…”�”}”(hj–¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj’¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÅhj4¼ubjM)�”}”(hŒ7See folio_memcg() for folio->objcg/memcg binding rules.”h]”hŒ7See folio_memcg() for folio->objcg/memcg binding rules.”…”�”}”(hjª¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.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”]”(héŒmem_cgroup_iter (C function)”Œc.mem_cgroup_iter”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ�struct mem_cgroup * mem_cgroup_iter (struct mem_cgroup *root, struct mem_cgroup *prev, struct mem_cgroup_reclaim_cookie *reclaim)”h]”hù)�”}”(hŒstruct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *root, struct mem_cgroup *prev, struct mem_cgroup_reclaim_cookie *reclaim)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÙ¼h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÕ¼h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÚubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç¼h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÕ¼h²hh³jæ¼h´MÚubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hjø¼h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjõ¼ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jú¼Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒmem_cgroup_iter”sbŒc.mem_cgroup_iter”†”asbuh1hhjÕ¼h²hh³jæ¼h´MÚubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÕ¼h²hh³jæ¼h´MÚubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj'½h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÕ¼h²hh³jæ¼h´MÚubhÿ)�”}”(hŒmem_cgroup_iter”h]”j)�”}”(hj½h]”hŒmem_cgroup_iter”…”�”}”(hj8½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4½ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÕ¼h²hh³jæ¼h´MÚubj )�”}”(hŒ](struct mem_cgroup *root, struct mem_cgroup *prev, struct mem_cgroup_reclaim_cookie *reclaim)”h]”(j )�”}”(hŒstruct mem_cgroup *root”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjS½h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjO½ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`½h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjO½ubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hjq½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjn½ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”js½Œmodname”NŒ classname”Njpjs)�”}”jv]”j½Œc.mem_cgroup_iter”†”asbuh1hhjO½ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�½h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjO½ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj�½h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjO½ubj)�”}”(hŒroot”h]”hŒroot”…”�”}”(hjª½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjO½ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjK½ubj )�”}”(hŒstruct mem_cgroup *prev”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¿½ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjнh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¿½ubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hjá½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÞ½ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j㽌modname”NŒ classname”Njpjs)�”}”jv]”j½Œc.mem_cgroup_iter”†”asbuh1hhj¿½ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ½h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¿½ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj ¾h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¿½ubj)�”}”(hŒprev”h]”hŒprev”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¿½ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjK½ubj )�”}”(hŒ)struct mem_cgroup_reclaim_cookie *reclaim”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj3¾h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj/¾ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@¾h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj/¾ubh)�”}”(hhh]”j)�”}”(hŒmem_cgroup_reclaim_cookie”h]”hŒmem_cgroup_reclaim_cookie”…”�”}”(hjQ¾h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjN¾ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jS¾Œmodname”NŒ classname”Njpjs)�”}”jv]”j½Œc.mem_cgroup_iter”†”asbuh1hhj/¾ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjo¾h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj/¾ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj}¾h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj/¾ubj)�”}”(hŒreclaim”h]”hŒreclaim”…”�”}”(hjоh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj/¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjK½ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÕ¼h²hh³jæ¼h´MÚubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjѼh²hh³jæ¼h´MÚubah}”(h]”j̼ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jæ¼h´MÚhjμh²hubj4)�”}”(hhh]”jM)�”}”(hŒ$iterate over memory cgroup hierarchy”h]”hŒ$iterate over memory cgroup hierarchy”…”�”}”(hj´¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÚhj±¾h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjμh²hh³jæ¼h´MÚubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj̾jHj̾jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXÑ**Parameters** ``struct mem_cgroup *root`` hierarchy root ``struct mem_cgroup *prev`` previously returned memcg, NULL on first invocation ``struct mem_cgroup_reclaim_cookie *reclaim`` cookie for shared reclaim walks, NULL for full walks **Description** Returns references to children of the hierarchy below **root**, or **root** itself, or ``NULL`` after a full round-trip. Caller must pass the return value in **prev** on subsequent invocations for reference counting, or use mem_cgroup_iter_break() to cancel a hierarchy walk before the round-trip is complete. Reclaimers can specify a node in **reclaim** to divide up the memcgs in the hierarchy among all concurrent reclaimers operating on the same node.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÖ¾h]”hŒ Parameters”…”�”}”(hjؾh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÔ¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÞhjоubj¤)�”}”(hhh]”(j©)�”}”(hŒ+``struct mem_cgroup *root`` hierarchy root ”h]”(j¯)�”}”(hŒ``struct mem_cgroup *root``”h]”jS)�”}”(hjõ¾h]”hŒstruct mem_cgroup *root”…”�”}”(hj÷¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjó¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÛhjï¾ubjÉ)�”}”(hhh]”jM)�”}”(hŒhierarchy root”h]”hŒhierarchy root”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j ¿h´MÛhj ¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjï¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j ¿h´MÛhjì¾ubj©)�”}”(hŒP``struct mem_cgroup *prev`` previously returned memcg, NULL on first invocation ”h]”(j¯)�”}”(hŒ``struct mem_cgroup *prev``”h]”jS)�”}”(hj.¿h]”hŒstruct mem_cgroup *prev”…”�”}”(hj0¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj,¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÜhj(¿ubjÉ)�”}”(hhh]”jM)�”}”(hŒ3previously returned memcg, NULL on first invocation”h]”hŒ3previously returned memcg, NULL on first invocation”…”�”}”(hjG¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jC¿h´MÜhjD¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj(¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jC¿h´MÜhjì¾ubj©)�”}”(hŒc``struct mem_cgroup_reclaim_cookie *reclaim`` cookie for shared reclaim walks, NULL for full walks ”h]”(j¯)�”}”(hŒ-``struct mem_cgroup_reclaim_cookie *reclaim``”h]”jS)�”}”(hjg¿h]”hŒ)struct mem_cgroup_reclaim_cookie *reclaim”…”�”}”(hji¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhje¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÝhja¿ubjÉ)�”}”(hhh]”jM)�”}”(hŒ4cookie for shared reclaim walks, NULL for full walks”h]”hŒ4cookie for shared reclaim walks, NULL for full walks”…”�”}”(hj€¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j|¿h´MÝhj}¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhja¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j|¿h´MÝhjì¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjоubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj¢¿h]”hŒ Description”…”�”}”(hj¤¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MßhjоubjM)�”}”(hŒxReturns references to children of the hierarchy below **root**, or **root** itself, or ``NULL`` after a full round-trip.”h]”(hŒ6Returns references to children of the hierarchy below ”…”�”}”(hj¸¿h²hh³Nh´NubjŽ)�”}”(hŒ**root**”h]”hŒroot”…”�”}”(hjÀ¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¸¿ubhŒ, or ”…”�”}”(hj¸¿h²hh³Nh´NubjŽ)�”}”(hŒ**root**”h]”hŒroot”…”�”}”(hjÒ¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¸¿ubhŒ itself, or ”…”�”}”(hj¸¿h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjä¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¸¿ubhŒ after a full round-trip.”…”�”}”(hj¸¿h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÞhjоubjM)�”}”(hŒ¼Caller must pass the return value in **prev** on subsequent invocations for reference counting, or use mem_cgroup_iter_break() to cancel a hierarchy walk before the round-trip is complete.”h]”(hŒ%Caller must pass the return value in ”…”�”}”(hjý¿h²hh³Nh´NubjŽ)�”}”(hŒ**prev**”h]”hŒprev”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjý¿ubhŒ� on subsequent invocations for reference counting, or use mem_cgroup_iter_break() to cancel a hierarchy walk before the round-trip is complete.”…”�”}”(hjý¿h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MáhjоubjM)�”}”(hŒ‘Reclaimers can specify a node in **reclaim** to divide up the memcgs in the hierarchy among all concurrent reclaimers operating on the same node.”h]”(hŒ!Reclaimers can specify a node in ”…”�”}”(hjÀh²hh³Nh´NubjŽ)�”}”(hŒ **reclaim**”h]”hŒreclaim”…”�”}”(hj&Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÀubhŒe to divide up the memcgs in the hierarchy among all concurrent reclaimers operating on the same node.”…”�”}”(hjÀh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.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”]”(héŒ"mem_cgroup_iter_break (C function)”Œc.mem_cgroup_iter_break”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒMvoid mem_cgroup_iter_break (struct mem_cgroup *root, struct mem_cgroup *prev)”h]”hù)�”}”(hŒLvoid mem_cgroup_iter_break(struct mem_cgroup *root, struct mem_cgroup *prev)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj_Àh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj[Àh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MBubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnÀh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj[Àh²hh³jmÀh´MBubhÿ)�”}”(hŒmem_cgroup_iter_break”h]”j)�”}”(hŒmem_cgroup_iter_break”h]”hŒmem_cgroup_iter_break”…”�”}”(hj€Àh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj|Àubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj[Àh²hh³jmÀh´MBubj )�”}”(hŒ2(struct mem_cgroup *root, struct mem_cgroup *prev)”h]”(j )�”}”(hŒstruct mem_cgroup *root”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjœÀh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj˜ÀubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©Àh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj˜Àubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hjºÀh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj·Àubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¼ÀŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj‚ÀsbŒc.mem_cgroup_iter_break”†”asbuh1hhj˜ÀubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚÀh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj˜ÀubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjèÀh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj˜Àubj)�”}”(hŒroot”h]”hŒroot”…”�”}”(hjõÀh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj˜Àubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj”Àubj )�”}”(hŒstruct mem_cgroup *prev”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj ÁubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj Áubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hj,Áh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj)Áubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j.ÁŒmodname”NŒ classname”Njpjs)�”}”jv]”jÖÀŒc.mem_cgroup_iter_break”†”asbuh1hhj ÁubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJÁh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj ÁubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjXÁh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj Áubj)�”}”(hŒprev”h]”hŒprev”…”�”}”(hjeÁh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Áubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj”Àubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj[Àh²hh³jmÀh´MBubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjWÀh²hh³jmÀh´MBubah}”(h]”jRÀah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jmÀh´MBhjTÀh²hubj4)�”}”(hhh]”jM)�”}”(hŒ"abort a hierarchy walk prematurely”h]”hŒ"abort a hierarchy walk prematurely”…”�”}”(hj�Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MBhjŒÁh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjTÀh²hh³jmÀh´MBubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj§ÁjHj§ÁjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒš**Parameters** ``struct mem_cgroup *root`` hierarchy root ``struct mem_cgroup *prev`` last visited hierarchy member as returned by mem_cgroup_iter()”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj±Áh]”hŒ Parameters”…”�”}”(hj³Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¯Áubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MFhj«Áubj¤)�”}”(hhh]”(j©)�”}”(hŒ+``struct mem_cgroup *root`` hierarchy root ”h]”(j¯)�”}”(hŒ``struct mem_cgroup *root``”h]”jS)�”}”(hjÐÁh]”hŒstruct mem_cgroup *root”…”�”}”(hjÒÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÎÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MChjÊÁubjÉ)�”}”(hhh]”jM)�”}”(hŒhierarchy root”h]”hŒhierarchy root”…”�”}”(hjéÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jåÁh´MChjæÁubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÊÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jåÁh´MChjÇÁubj©)�”}”(hŒZ``struct mem_cgroup *prev`` last visited hierarchy member as returned by mem_cgroup_iter()”h]”(j¯)�”}”(hŒ``struct mem_cgroup *prev``”h]”jS)�”}”(hj Âh]”hŒstruct mem_cgroup *prev”…”�”}”(hj Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MEhjÂubjÉ)�”}”(hhh]”jM)�”}”(hŒ>last visited hierarchy member as returned by mem_cgroup_iter()”h]”hŒ>last visited hierarchy member as returned by mem_cgroup_iter()”…”�”}”(hj"Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MDhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÂh´MEhjÇÁ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”]”(héŒ"mem_cgroup_scan_tasks (C function)”Œc.mem_cgroup_scan_tasks”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒivoid mem_cgroup_scan_tasks (struct mem_cgroup *memcg, int (*fn)(struct task_struct *, void *), void *arg)”h]”hù)�”}”(hŒfvoid mem_cgroup_scan_tasks(struct mem_cgroup *memcg, int (*fn)(struct task_struct*, void*), void *arg)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjcÂh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj_Âh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MsubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrÂh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj_Âh²hh³jqÂh´Msubhÿ)�”}”(hŒmem_cgroup_scan_tasks”h]”j)�”}”(hŒmem_cgroup_scan_tasks”h]”hŒmem_cgroup_scan_tasks”…”�”}”(hj„Âh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj€Âubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj_Âh²hh³jqÂh´Msubj )�”}”(hŒL(struct mem_cgroup *memcg, int (*fn)(struct task_struct*, void*), void *arg)”h]”(j )�”}”(hŒstruct mem_cgroup *memcg”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj Âh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjœÂubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­Âh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjœÂubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hj¾Âh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj»Âubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÀÂŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj†ÂsbŒc.mem_cgroup_scan_tasks”†”asbuh1hhjœÂubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞÂh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjœÂubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjìÂh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjœÂubj)�”}”(hŒmemcg”h]”hŒmemcg”…”�”}”(hjùÂh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjœÂubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj˜Âubj )�”}”(hŒ%int (*fn)(struct task_struct*, void*)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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ÃubjF )�”}”(hj™!h]”hŒ(”…”�”}”(hj.Ãh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÃubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj;Ãh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÃubj)�”}”(hŒfn”h]”hŒfn”…”�”}”(hjHÃh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÃubjF )�”}”(hjÂ!h]”hŒ)”…”�”}”(hjVÃh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÃubjF )�”}”(hj™!h]”hŒ(”…”�”}”(hjcÃh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÃubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjpÃh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÃubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}Ãh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÃubh)�”}”(hhh]”j)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hjŽÃh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‹Ãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j�ÃŒmodname”NŒ classname”Njpjs)�”}”jv]”jÚÂŒc.mem_cgroup_scan_tasks”†”asbuh1hhjÃubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¬Ãh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÃubjF )�”}”(hŒ,”h]”hŒ,”…”�”}”(hj¹Ãh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÃubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇÃh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÃubjµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÕÃh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÃubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjãÃh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÃubjF )�”}”(hjÂ!h]”hŒ)”…”�”}”(hjðÃh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÃubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj˜Âubj )�”}”(hŒ void *arg”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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ÄubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj$Äh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÄubj)�”}”(hŒarg”h]”hŒarg”…”�”}”(hj1Äh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÄubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj˜Âubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj_Âh²hh³jqÂh´Msubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj[Âh²hh³jqÂh´Msubah}”(h]”jVÂah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jqÂh´MshjXÂh²hubj4)�”}”(hhh]”jM)�”}”(hŒ/iterate over tasks of a memory cgroup hierarchy”h]”hŒ/iterate over tasks of a memory cgroup hierarchy”…”�”}”(hj[Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MshjXÄh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjXÂh²hh³jqÂh´Msubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjsÄjHjsÄjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXÿ**Parameters** ``struct mem_cgroup *memcg`` hierarchy root ``int (*fn)(struct task_struct *, void *)`` function to call for each task ``void *arg`` argument passed to **fn** **Description** This function iterates over tasks attached to **memcg** or to any of its descendants and calls **fn** for each task. If **fn** returns a non-zero value, the function breaks the iteration loop. Otherwise, it will iterate over all tasks and return 0. This function must not be called for the root memory cgroup.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj}Äh]”hŒ Parameters”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj{Äubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MwhjwÄubj¤)�”}”(hhh]”(j©)�”}”(hŒ,``struct mem_cgroup *memcg`` hierarchy root ”h]”(j¯)�”}”(hŒ``struct mem_cgroup *memcg``”h]”jS)�”}”(hjœÄh]”hŒstruct mem_cgroup *memcg”…”�”}”(hjžÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjšÄubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mthj–ÄubjÉ)�”}”(hhh]”jM)�”}”(hŒhierarchy root”h]”hŒhierarchy root”…”�”}”(hjµÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j±Äh´Mthj²Äubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj–Äubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j±Äh´Mthj“Äubj©)�”}”(hŒK``int (*fn)(struct task_struct *, void *)`` function to call for each task ”h]”(j¯)�”}”(hŒ+``int (*fn)(struct task_struct *, void *)``”h]”jS)�”}”(hjÕÄh]”hŒ'int (*fn)(struct task_struct *, void *)”…”�”}”(hj×Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÓÄubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MuhjÏÄubjÉ)�”}”(hhh]”jM)�”}”(hŒfunction to call for each task”h]”hŒfunction to call for each task”…”�”}”(hjîÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jêÄh´MuhjëÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÏÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jêÄh´Muhj“Äubj©)�”}”(hŒ(``void *arg`` argument passed to **fn** ”h]”(j¯)�”}”(hŒ ``void *arg``”h]”jS)�”}”(hjÅh]”hŒ void *arg”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj Åubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MvhjÅubjÉ)�”}”(hhh]”jM)�”}”(hŒargument passed to **fn**”h]”(hŒargument passed to ”…”�”}”(hj'Åh²hh³Nh´NubjŽ)�”}”(hŒ**fn**”h]”hŒfn”…”�”}”(hj/Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj'Åubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j#Åh´Mvhj$Åubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j#Åh´Mvhj“Äubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjwÄubjM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MxhjwÄubjM)�”}”(hŒøThis function iterates over tasks attached to **memcg** or to any of its descendants and calls **fn** for each task. If **fn** returns a non-zero value, the function breaks the iteration loop. Otherwise, it will iterate over all tasks and return 0.”h]”(hŒ.This function iterates over tasks attached to ”…”�”}”(hjmÅh²hh³Nh´NubjŽ)�”}”(hŒ **memcg**”h]”hŒmemcg”…”�”}”(hjuÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjmÅubhŒ( or to any of its descendants and calls ”…”�”}”(hjmÅh²hh³Nh´NubjŽ)�”}”(hŒ**fn**”h]”hŒfn”…”�”}”(hj‡Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjmÅubhŒ for each task. If ”…”�”}”(hjmÅh²hh³Nh´NubjŽ)�”}”(hŒ**fn**”h]”hŒfn”…”�”}”(hj™Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjmÅubhŒz returns a non-zero value, the function breaks the iteration loop. Otherwise, it will iterate over all tasks and return 0.”…”�”}”(hjmÅh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MwhjwÄubjM)�”}”(hŒÈh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj:ÈubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKÈh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj:Èubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj\Èh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjYÈubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j^ÈŒmodname”NŒ classname”Njpjs)�”}”jv]”jÿÇŒc.folio_lruvec_lock_irq”†”asbuh1hhj:ÈubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzÈh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj:ÈubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjˆÈh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj:Èubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj•Èh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj:Èubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj6Èubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÀÇh²hh³jÑÇh´Mµubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¼Çh²hh³jÑÇh´Mµubah}”(h]”j·Çah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÑÇh´Mµhj¹Çh²hubj4)�”}”(hhh]”jM)�”}”(hŒLock the lruvec for a folio.”h]”hŒLock the lruvec for a folio.”…”�”}”(hj¿Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mµhj¼Èh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¹Çh²hh³jÑÇh´Mµubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj×ÈjHj×ÈjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXI**Parameters** ``struct folio *folio`` Pointer to the folio. **Description** These functions are safe to use under any of the following conditions: - folio locked - folio_test_lru false - folio frozen (refcount of 0) **Return** The lruvec this folio is on with its lock held and interrupts disabled and rcu read lock held.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjáÈh]”hŒ Parameters”…”�”}”(hjãÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjßÈubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M¹hjÛÈubj¤)�”}”(hhh]”j©)�”}”(hŒ.``struct folio *folio`` Pointer to the folio. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjÉh]”hŒstruct folio *folio”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjþÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M¶hjúÈubjÉ)�”}”(hhh]”jM)�”}”(hŒPointer to the folio.”h]”hŒPointer to the folio.”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÉh´M¶hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjúÈubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÉh´M¶hj÷Èubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÛÈubjM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M¸hjÛÈubjM)�”}”(hŒ‹These functions are safe to use under any of the following conditions: - folio locked - folio_test_lru false - folio frozen (refcount of 0)”h]”hŒ‹These functions are safe to use under any of the following conditions: - folio locked - folio_test_lru false - folio frozen (refcount of 0)”…”�”}”(hjQÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M·hjÛÈubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjbÉh]”hŒReturn”…”�”}”(hjdÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj`Éubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M¼hjÛÈubjM)�”}”(hŒ^The lruvec this folio is on with its lock held and interrupts disabled and rcu read lock held.”h]”hŒ^The lruvec this folio is on with its lock held and interrupts disabled and rcu read lock held.”…”�”}”(hjxÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.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”]”(héŒ&folio_lruvec_lock_irqsave (C function)”Œc.folio_lruvec_lock_irqsave”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒUstruct lruvec * folio_lruvec_lock_irqsave (struct folio *folio, unsigned long *flags)”h]”hù)�”}”(hŒSstruct lruvec *folio_lruvec_lock_irqsave(struct folio *folio, unsigned long *flags)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj§Éh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj£Éh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÑubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµÉh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj£Éh²hh³j´Éh´MÑubh)�”}”(hhh]”j)�”}”(hŒlruvec”h]”hŒlruvec”…”�”}”(hjÆÉh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÃÉubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÈÉŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒfolio_lruvec_lock_irqsave”sbŒc.folio_lruvec_lock_irqsave”†”asbuh1hhj£Éh²hh³j´Éh´MÑubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçÉh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj£Éh²hh³j´Éh´MÑubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjõÉh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj£Éh²hh³j´Éh´MÑubhÿ)�”}”(hŒfolio_lruvec_lock_irqsave”h]”j)�”}”(hjäÉh]”hŒfolio_lruvec_lock_irqsave”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÊubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj£Éh²hh³j´Éh´MÑubj )�”}”(hŒ+(struct folio *folio, unsigned long *flags)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj!Êh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÊubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.Êh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÊubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj?Êh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj<Êubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jAÊŒmodname”NŒ classname”Njpjs)�”}”jv]”jâÉŒc.folio_lruvec_lock_irqsave”†”asbuh1hhjÊubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]Êh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÊubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjkÊh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÊubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjxÊh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÊubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÊubj )�”}”(hŒunsigned long *flags”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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�Êubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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�ÊubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÉÊh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj�Êubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjÖÊh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�Êubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÊubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj£Éh²hh³j´Éh´MÑubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjŸÉh²hh³j´Éh´MÑubah}”(h]”jšÉah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j´Éh´MÑhjœÉh²hubj4)�”}”(hhh]”jM)�”}”(hŒLock the lruvec for a folio.”h]”hŒLock the lruvec for a folio.”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÑhjýÊh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjœÉh²hh³j´Éh´MÑubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjËjHjËjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``struct folio *folio`` Pointer to the folio. ``unsigned long *flags`` Pointer to irqsave flags. **Description** These functions are safe to use under any of the following conditions: - folio locked - folio_test_lru false - folio frozen (refcount of 0) **Return** The lruvec this folio is on with its lock held and interrupts disabled and rcu read lock held.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj"Ëh]”hŒ Parameters”…”�”}”(hj$Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÕhjËubj¤)�”}”(hhh]”(j©)�”}”(hŒ.``struct folio *folio`` Pointer to the folio. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjAËh]”hŒstruct folio *folio”…”�”}”(hjCËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj?Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÒhj;ËubjÉ)�”}”(hhh]”jM)�”}”(hŒPointer to the folio.”h]”hŒPointer to the folio.”…”�”}”(hjZËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jVËh´MÒhjWËubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj;Ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jVËh´MÒhj8Ëubj©)�”}”(hŒ3``unsigned long *flags`` Pointer to irqsave flags. ”h]”(j¯)�”}”(hŒ``unsigned long *flags``”h]”jS)�”}”(hjzËh]”hŒunsigned long *flags”…”�”}”(hj|Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjxËubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÓhjtËubjÉ)�”}”(hhh]”jM)�”}”(hŒPointer to irqsave flags.”h]”hŒPointer to irqsave flags.”…”�”}”(hj“Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�Ëh´MÓhj�Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjtËubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�Ëh´MÓhj8Ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjËubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjµËh]”hŒ Description”…”�”}”(hj·Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj³Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÕhjËubjM)�”}”(hŒ‹These functions are safe to use under any of the following conditions: - folio locked - folio_test_lru false - folio frozen (refcount of 0)”h]”hŒ‹These functions are safe to use under any of the following conditions: - folio locked - folio_test_lru false - folio frozen (refcount of 0)”…”�”}”(hjËËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÔhjËubjM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÙhjËubjM)�”}”(hŒ^The lruvec this folio is on with its lock held and interrupts disabled and rcu read lock held.”h]”hŒ^The lruvec this folio is on with its lock held and interrupts disabled and rcu read lock held.”…”�”}”(hjòËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.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”]”(héŒ'mem_cgroup_update_lru_size (C function)”Œc.mem_cgroup_update_lru_size”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒbvoid mem_cgroup_update_lru_size (struct lruvec *lruvec, enum lru_list lru, int zid, long nr_pages)”h]”hù)�”}”(hŒavoid mem_cgroup_update_lru_size(struct lruvec *lruvec, enum lru_list lru, int zid, long nr_pages)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj!Ìh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÌh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MïubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0Ìh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÌh²hh³j/Ìh´Mïubhÿ)�”}”(hŒmem_cgroup_update_lru_size”h]”j)�”}”(hŒmem_cgroup_update_lru_size”h]”hŒmem_cgroup_update_lru_size”…”�”}”(hjBÌh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>Ìubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÌh²hh³j/Ìh´Mïubj )�”}”(hŒB(struct lruvec *lruvec, enum lru_list lru, int zid, long nr_pages)”h]”(j )�”}”(hŒstruct lruvec *lruvec”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj^Ìh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjZÌubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkÌh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjZÌubh)�”}”(hhh]”j)�”}”(hŒlruvec”h]”hŒlruvec”…”�”}”(hj|Ìh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjyÌubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j~ÌŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljDÌsbŒc.mem_cgroup_update_lru_size”†”asbuh1hhjZÌubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœÌh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjZÌubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjªÌh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjZÌubj)�”}”(hŒlruvec”h]”hŒlruvec”…”�”}”(hj·Ìh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjZÌubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjVÌubj )�”}”(hŒenum lru_list lru”h]”(j5)�”}”(hj‘ôh]”hŒenum”…”�”}”(hjÐÌh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÌÌubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝÌh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÌÌubh)�”}”(hhh]”j)�”}”(hŒlru_list”h]”hŒlru_list”…”�”}”(hjîÌh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjëÌubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jðÌŒmodname”NŒ classname”Njpjs)�”}”jv]”j˜ÌŒc.mem_cgroup_update_lru_size”†”asbuh1hhjÌÌubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Íh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÌÌubj)�”}”(hŒlru”h]”hŒlru”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÌÌubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjVÌubj )�”}”(hŒint zid”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj3Íh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj/ÍubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAÍh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj/Íubj)�”}”(hŒzid”h]”hŒzid”…”�”}”(hjOÍh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj/Íubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjVÌubj )�”}”(hŒ long nr_pages”h]”(jµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjhÍh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjdÍubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvÍh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjdÍubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hj„Íh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjdÍubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjVÌubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÌh²hh³j/Ìh´Mïubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÌh²hh³j/Ìh´Mïubah}”(h]”jÌah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j/Ìh´MïhjÌh²hubj4)�”}”(hhh]”jM)�”}”(hŒ*account for adding or removing an lru page”h]”hŒ*account for adding or removing an lru page”…”�”}”(hj®Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mïhj«Íh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÌh²hh³j/Ìh´Mïubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÆÍjHjÆÍjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXŽ**Parameters** ``struct lruvec *lruvec`` mem_cgroup per zone lru vector ``enum lru_list lru`` index of lru list the page is sitting on ``int zid`` zone id of the accounted pages ``long nr_pages`` positive when adding or negative when removing **Description** This function must be called under lru_lock, just before a page is added to or just after a page is removed from an lru list.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÐÍh]”hŒ Parameters”…”�”}”(hjÒÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÎÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MóhjÊÍubj¤)�”}”(hhh]”(j©)�”}”(hŒ9``struct lruvec *lruvec`` mem_cgroup per zone lru vector ”h]”(j¯)�”}”(hŒ``struct lruvec *lruvec``”h]”jS)�”}”(hjïÍh]”hŒstruct lruvec *lruvec”…”�”}”(hjñÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjíÍubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MðhjéÍubjÉ)�”}”(hhh]”jM)�”}”(hŒmem_cgroup per zone lru vector”h]”hŒmem_cgroup per zone lru vector”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÎh´MðhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjéÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÎh´MðhjæÍubj©)�”}”(hŒ?``enum lru_list lru`` index of lru list the page is sitting on ”h]”(j¯)�”}”(hŒ``enum lru_list lru``”h]”jS)�”}”(hj(Îh]”hŒenum lru_list lru”…”�”}”(hj*Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj&Îubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mñhj"ÎubjÉ)�”}”(hhh]”jM)�”}”(hŒ(index of lru list the page is sitting on”h]”hŒ(index of lru list the page is sitting on”…”�”}”(hjAÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j=Îh´Mñhj>Îubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj"Îubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j=Îh´MñhjæÍubj©)�”}”(hŒ+``int zid`` zone id of the accounted pages ”h]”(j¯)�”}”(hŒ ``int zid``”h]”jS)�”}”(hjaÎh]”hŒint zid”…”�”}”(hjcÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj_Îubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mòhj[ÎubjÉ)�”}”(hhh]”jM)�”}”(hŒzone id of the accounted pages”h]”hŒzone id of the accounted pages”…”�”}”(hjzÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jvÎh´MòhjwÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj[Îubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jvÎh´MòhjæÍubj©)�”}”(hŒA``long nr_pages`` positive when adding or negative when removing ”h]”(j¯)�”}”(hŒ``long nr_pages``”h]”jS)�”}”(hjšÎh]”hŒ long nr_pages”…”�”}”(hjœÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj˜Îubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Móhj”ÎubjÉ)�”}”(hhh]”jM)�”}”(hŒ.positive when adding or negative when removing”h]”hŒ.positive when adding or negative when removing”…”�”}”(hj³Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¯Îh´Móhj°Îubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj”Îubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¯Îh´MóhjæÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÊÍubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÕÎh]”hŒ Description”…”�”}”(hj×Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÓÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MõhjÊÍubjM)�”}”(hŒ}This function must be called under lru_lock, just before a page is added to or just after a page is removed from an lru list.”h]”hŒ}This function must be called under lru_lock, just before a page is added to or just after a page is removed from an lru list.”…”�”}”(hjëÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.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”]”(héŒmem_cgroup_margin (C function)”Œc.mem_cgroup_margin”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ:unsigned long mem_cgroup_margin (struct mem_cgroup *memcg)”h]”hù)�”}”(hŒ9unsigned long mem_cgroup_margin(struct mem_cgroup *memcg)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÏh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)Ïh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÏh²hh³j(Ïh´Mubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj7Ïh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÏh²hh³j(Ïh´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEÏh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÏh²hh³j(Ïh´Mubhÿ)�”}”(hŒmem_cgroup_margin”h]”j)�”}”(hŒmem_cgroup_margin”h]”hŒmem_cgroup_margin”…”�”}”(hjWÏh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjSÏubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÏh²hh³j(Ïh´Mubj )�”}”(hŒ(struct mem_cgroup *memcg)”h]”j )�”}”(hŒstruct mem_cgroup *memcg”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjsÏh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjoÏubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€Ïh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjoÏubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hj‘Ïh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŽÏubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j“ÏŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljYÏsbŒc.mem_cgroup_margin”†”asbuh1hhjoÏubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±Ïh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjoÏubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¿Ïh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjoÏubj)�”}”(hŒmemcg”h]”hŒmemcg”…”�”}”(hjÌÏh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjoÏubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjkÏubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÏh²hh³j(Ïh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÏh²hh³j(Ïh´Mubah}”(h]”j Ïah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j(Ïh´MhjÏh²hubj4)�”}”(hhh]”jM)�”}”(hŒ-calculate chargeable space of a memory cgroup”h]”hŒ-calculate chargeable space of a memory cgroup”…”�”}”(hjöÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MhjóÏh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÏh²hh³j(Ïh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÐjHjÐjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒž**Parameters** ``struct mem_cgroup *memcg`` the memory cgroup **Description** Returns the maximum amount of memory **mem** can be charged with, in pages.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÐh]”hŒ Parameters”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MhjÐubj¤)�”}”(hhh]”j©)�”}”(hŒ/``struct mem_cgroup *memcg`` the memory cgroup ”h]”(j¯)�”}”(hŒ``struct mem_cgroup *memcg``”h]”jS)�”}”(hj7Ðh]”hŒstruct mem_cgroup *memcg”…”�”}”(hj9Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj5Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mhj1ÐubjÉ)�”}”(hhh]”jM)�”}”(hŒthe memory cgroup”h]”hŒthe memory cgroup”…”�”}”(hjPÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jLÐh´MhjMÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj1Ðubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jLÐh´Mhj.Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÐubjM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MhjÐubjM)�”}”(hŒKReturns the maximum amount of memory **mem** can be charged with, in pages.”h]”(hŒ%Returns the maximum amount of memory ”…”�”}”(hjˆÐh²hh³Nh´NubjŽ)�”}”(hŒ**mem**”h]”hŒmem”…”�”}”(hj�Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjˆÐubhŒ can be charged with, in pages.”…”�”}”(hjˆÐh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MhjÐubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ)mem_cgroup_print_oom_context (C function)”Œc.mem_cgroup_print_oom_context”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒSvoid mem_cgroup_print_oom_context (struct mem_cgroup *memcg, struct task_struct *p)”h]”hù)�”}”(hŒRvoid mem_cgroup_print_oom_context(struct mem_cgroup *memcg, struct task_struct *p)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÉÐh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÅÐh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØÐh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÅÐh²hh³j×Ðh´Mubhÿ)�”}”(hŒmem_cgroup_print_oom_context”h]”j)�”}”(hŒmem_cgroup_print_oom_context”h]”hŒmem_cgroup_print_oom_context”…”�”}”(hjêÐh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjæÐubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÅÐh²hh³j×Ðh´Mubj )�”}”(hŒ1(struct mem_cgroup *memcg, struct task_struct *p)”h]”(j )�”}”(hŒstruct mem_cgroup *memcg”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÑubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÑubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hj$Ñh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj!Ñubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j&ÑŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljìÐsbŒc.mem_cgroup_print_oom_context”†”asbuh1hhjÑubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDÑh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÑubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjRÑh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÑubj)�”}”(hŒmemcg”h]”hŒmemcg”…”�”}”(hj_Ñh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÑubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjþÐubj )�”}”(hŒstruct task_struct *p”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjxÑh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjtÑubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…Ñh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjtÑubh)�”}”(hhh]”j)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hj–Ñh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj“Ñubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j˜ÑŒmodname”NŒ classname”Njpjs)�”}”jv]”j@ÑŒc.mem_cgroup_print_oom_context”†”asbuh1hhjtÑubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´Ñh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjtÑubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÂÑh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjtÑubj)�”}”(hjR h]”hŒp”…”�”}”(hjÏÑh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjtÑubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjþÐubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÅÐh²hh³j×Ðh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÁÐh²hh³j×Ðh´Mubah}”(h]”j¼Ðah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j×Ðh´Mhj¾Ðh²hubj4)�”}”(hhh]”jM)�”}”(hŒ4Print OOM information relevant to memory controller.”h]”hŒ4Print OOM information relevant to memory controller.”…”�”}”(hjøÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MhjõÑh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¾Ðh²hh³j×Ðh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÒjHjÒjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒé**Parameters** ``struct mem_cgroup *memcg`` The memory cgroup that went over limit ``struct task_struct *p`` Task that is going to be killed **NOTE** **memcg** and **p**'s mem_cgroup can be different when hierarchy is enabled”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÒh]”hŒ Parameters”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MhjÒubj¤)�”}”(hhh]”(j©)�”}”(hŒD``struct mem_cgroup *memcg`` The memory cgroup that went over limit ”h]”(j¯)�”}”(hŒ``struct mem_cgroup *memcg``”h]”jS)�”}”(hj9Òh]”hŒstruct mem_cgroup *memcg”…”�”}”(hj;Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj7Òubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mhj3ÒubjÉ)�”}”(hhh]”jM)�”}”(hŒ&The memory cgroup that went over limit”h]”hŒ&The memory cgroup that went over limit”…”�”}”(hjRÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jNÒh´MhjOÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj3Òubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jNÒh´Mhj0Òubj©)�”}”(hŒ:``struct task_struct *p`` Task that is going to be killed ”h]”(j¯)�”}”(hŒ``struct task_struct *p``”h]”jS)�”}”(hjrÒh]”hŒstruct task_struct *p”…”�”}”(hjtÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjpÒubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MhjlÒubjÉ)�”}”(hhh]”jM)�”}”(hŒTask that is going to be killed”h]”hŒTask that is going to be killed”…”�”}”(hj‹Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‡Òh´MhjˆÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjlÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‡Òh´Mhj0Òubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÒubjM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MhjÒubjM)�”}”(hŒK**memcg** and **p**'s mem_cgroup can be different when hierarchy is enabled”h]”(jŽ)�”}”(hŒ **memcg**”h]”hŒmemcg”…”�”}”(hjÇÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÃÒubhŒ and ”…”�”}”(hjÃÒh²hh³Nh´NubjŽ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjÙÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÃÒubhŒ:’s mem_cgroup can be different when hierarchy is enabled”…”�”}”(hjÃÒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MhjÒubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ)mem_cgroup_print_oom_meminfo (C function)”Œc.mem_cgroup_print_oom_meminfo”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒÕh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjãÔubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjßÔubj )�”}”(hŒstruct mem_cgroup *oom_domain”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjWÕh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjSÕubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdÕh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjSÕubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hjuÕh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjrÕubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jwÕŒmodname”NŒ classname”Njpjs)�”}”jv]”j¨ÔŒc.mem_cgroup_get_oom_group”†”asbuh1hhjSÕubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“Õh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjSÕubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¡Õh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjSÕubj)�”}”(hŒ oom_domain”h]”hŒ oom_domain”…”�”}”(hj®Õh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjSÕubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjßÔubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjiÔh²hh³jzÔh´M¿ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjeÔh²hh³jzÔh´M¿ubah}”(h]”j`Ôah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jzÔh´M¿hjbÔh²hubj4)�”}”(hhh]”jM)�”}”(hŒ)get a memory cgroup to clean up after OOM”h]”hŒ)get a memory cgroup to clean up after OOM”…”�”}”(hjØÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M¿hjÕÕh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjbÔh²hh³jzÔh´M¿ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjðÕjHjðÕjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXz**Parameters** ``struct task_struct *victim`` task to be killed by the OOM killer ``struct mem_cgroup *oom_domain`` memcg in case of memcg OOM, NULL in case of system-wide OOM **Description** Returns a pointer to a memory cgroup, which has to be cleaned up by killing all belonging OOM-killable tasks. Caller has to call mem_cgroup_put() on the returned non-NULL memcg.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjúÕh]”hŒ Parameters”…”�”}”(hjüÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjøÕubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÃhjôÕubj¤)�”}”(hhh]”(j©)�”}”(hŒC``struct task_struct *victim`` task to be killed by the OOM killer ”h]”(j¯)�”}”(hŒ``struct task_struct *victim``”h]”jS)�”}”(hjÖh]”hŒstruct task_struct *victim”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÀhjÖubjÉ)�”}”(hhh]”jM)�”}”(hŒ#task to be killed by the OOM killer”h]”hŒ#task to be killed by the OOM killer”…”�”}”(hj2Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j.Öh´MÀhj/Öubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j.Öh´MÀhjÖubj©)�”}”(hŒ^``struct mem_cgroup *oom_domain`` memcg in case of memcg OOM, NULL in case of system-wide OOM ”h]”(j¯)�”}”(hŒ!``struct mem_cgroup *oom_domain``”h]”jS)�”}”(hjRÖh]”hŒstruct mem_cgroup *oom_domain”…”�”}”(hjTÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjPÖubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÁhjLÖubjÉ)�”}”(hhh]”jM)�”}”(hŒ;memcg in case of memcg OOM, NULL in case of system-wide OOM”h]”hŒ;memcg in case of memcg OOM, NULL in case of system-wide OOM”…”�”}”(hjkÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jgÖh´MÁhjhÖubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjLÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jgÖh´MÁhjÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjôÕubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj�Öh]”hŒ Description”…”�”}”(hj�Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‹Öubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÃhjôÕubjM)�”}”(hŒmReturns a pointer to a memory cgroup, which has to be cleaned up by killing all belonging OOM-killable tasks.”h]”hŒmReturns a pointer to a memory cgroup, which has to be cleaned up by killing all belonging OOM-killable tasks.”…”�”}”(hj£Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÂhjôÕubjM)�”}”(hŒCCaller has to call mem_cgroup_put() on the returned non-NULL memcg.”h]”hŒCCaller has to call mem_cgroup_put() on the returned non-NULL memcg.”…”�”}”(hj²Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.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”]”(héŒconsume_stock (C function)”Œc.consume_stock”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒDbool consume_stock (struct mem_cgroup *memcg, unsigned int nr_pages)”h]”hù)�”}”(hŒCbool consume_stock(struct mem_cgroup *memcg, unsigned int nr_pages)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjáÖh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÝÖh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MBubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïÖh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÝÖh²hh³jîÖh´MBubhÿ)�”}”(hŒ consume_stock”h]”j)�”}”(hŒ consume_stock”h]”hŒ consume_stock”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjýÖubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÝÖh²hh³jîÖh´MBubj )�”}”(hŒ1(struct mem_cgroup *memcg, unsigned int nr_pages)”h]”(j )�”}”(hŒstruct mem_cgroup *memcg”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj×ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*×h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj×ubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hj;×h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj8×ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j=׌modname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj×sbŒc.consume_stock”†”asbuh1hhj×ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[×h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj×ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hji×h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj×ubj)�”}”(hŒmemcg”h]”hŒmemcg”…”�”}”(hjv×h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj×ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj×ubj )�”}”(hŒunsigned int nr_pages”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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‹×ubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(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‹×ubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hjÇ×h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‹×ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj×ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÝÖh²hh³jîÖh´MBubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÙÖh²hh³jîÖh´MBubah}”(h]”jÔÖah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jîÖh´MBhjÖÖh²hubj4)�”}”(hhh]”jM)�”}”(hŒ*Try to consume stocked charge on this cpu.”h]”hŒ*Try to consume stocked charge on this cpu.”…”�”}”(hjñ×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MBhjî×h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÖÖh²hh³jîÖh´MBubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj ØjHj ØjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX|**Parameters** ``struct mem_cgroup *memcg`` memcg to consume from. ``unsigned int nr_pages`` how many pages to charge. **Description** Consume the cached charge if enough nr_pages are present otherwise return failure. Also return failure for charge request larger than MEMCG_CHARGE_BATCH or if the local lock is already taken. returns true if successful, false otherwise.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjØh]”hŒ Parameters”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjØubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MFhj Øubj¤)�”}”(hhh]”(j©)�”}”(hŒ4``struct mem_cgroup *memcg`` memcg to consume from. ”h]”(j¯)�”}”(hŒ``struct mem_cgroup *memcg``”h]”jS)�”}”(hj2Øh]”hŒstruct mem_cgroup *memcg”…”�”}”(hj4Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj0Øubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MChj,ØubjÉ)�”}”(hhh]”jM)�”}”(hŒmemcg to consume from.”h]”hŒmemcg to consume from.”…”�”}”(hjKØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jGØh´MChjHØubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj,Øubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jGØh´MChj)Øubj©)�”}”(hŒ4``unsigned int nr_pages`` how many pages to charge. ”h]”(j¯)�”}”(hŒ``unsigned int nr_pages``”h]”jS)�”}”(hjkØh]”hŒunsigned int nr_pages”…”�”}”(hjmØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjiØubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MDhjeØubjÉ)�”}”(hhh]”jM)�”}”(hŒhow many pages to charge.”h]”hŒhow many pages to charge.”…”�”}”(hj„Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j€Øh´MDhj�Øubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjeØubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j€Øh´MDhj)Øubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj ØubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj¦Øh]”hŒ Description”…”�”}”(hj¨Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¤Øubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MFhj ØubjM)�”}”(hŒ¿Consume the cached charge if enough nr_pages are present otherwise return failure. Also return failure for charge request larger than MEMCG_CHARGE_BATCH or if the local lock is already taken.”h]”hŒ¿Consume the cached charge if enough nr_pages are present otherwise return failure. Also return failure for charge request larger than MEMCG_CHARGE_BATCH or if the local lock is already taken.”…”�”}”(hj¼Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MEhj ØubjM)�”}”(hŒ,returns true if successful, false otherwise.”h]”hŒ,returns true if successful, false otherwise.”…”�”}”(hjËØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MIhj Øubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%__memcg_kmem_charge_page (C function)”Œc.__memcg_kmem_charge_page”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒFint __memcg_kmem_charge_page (struct page *page, gfp_t gfp, int order)”h]”hù)�”}”(hŒEint __memcg_kmem_charge_page(struct page *page, gfp_t gfp, int order)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjúØh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjöØh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mw ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Ùh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjöØh²hh³jÙh´Mw ubhÿ)�”}”(hŒ__memcg_kmem_charge_page”h]”j)�”}”(hŒ__memcg_kmem_charge_page”h]”hŒ__memcg_kmem_charge_page”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjöØh²hh³jÙh´Mw ubj )�”}”(hŒ)(struct page *page, gfp_t gfp, int order)”h]”(j )�”}”(hŒstruct page *page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj7Ùh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj3ÙubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDÙh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj3Ùubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjUÙh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjRÙubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jWÙŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÙsbŒc.__memcg_kmem_charge_page”†”asbuh1hhj3ÙubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuÙh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj3ÙubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjƒÙh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj3Ùubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj�Ùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3Ùubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj/Ùubj )�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj¬Ùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj©Ùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j®ÙŒmodname”NŒ classname”Njpjs)�”}”jv]”jqÙŒc.__memcg_kmem_charge_page”†”asbuh1hhj¥ÙubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊÙh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¥Ùubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjØÙh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¥Ùubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj/Ùubj )�”}”(hŒ int order”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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íÙubj)�”}”(hŒorder”h]”hŒorder”…”�”}”(hj Úh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjíÙubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj/Ùubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjöØh²hh³jÙh´Mw ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjòØh²hh³jÙh´Mw ubah}”(h]”jíØah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÙh´Mw hjïØh²hubj4)�”}”(hhh]”jM)�”}”(hŒ/charge a kmem page to the current memory cgroup”h]”hŒ/charge a kmem page to the current memory cgroup”…”�”}”(hj7Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mw hj4Úh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjïØh²hh³jÙh´Mw ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjOÚjHjOÚjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ¸**Parameters** ``struct page *page`` page to charge ``gfp_t gfp`` reclaim mode ``int order`` allocation order **Description** Returns 0 on success, an error code on failure.”h]”(jM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M{ hjSÚubj¤)�”}”(hhh]”(j©)�”}”(hŒ%``struct page *page`` page to charge ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hjxÚh]”hŒstruct page *page”…”�”}”(hjzÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjvÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mx hjrÚubjÉ)�”}”(hhh]”jM)�”}”(hŒpage to charge”h]”hŒpage to charge”…”�”}”(hj‘Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�Úh´Mx hjŽÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjrÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�Úh´Mx hjoÚubj©)�”}”(hŒ``gfp_t gfp`` reclaim mode ”h]”(j¯)�”}”(hŒ ``gfp_t gfp``”h]”jS)�”}”(hj±Úh]”hŒ gfp_t gfp”…”�”}”(hj³Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¯Úubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´My hj«ÚubjÉ)�”}”(hhh]”jM)�”}”(hŒ reclaim mode”h]”hŒ reclaim mode”…”�”}”(hjÊÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÆÚh´My hjÇÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj«Úubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÆÚh´My hjoÚubj©)�”}”(hŒ``int order`` allocation order ”h]”(j¯)�”}”(hŒ ``int order``”h]”jS)�”}”(hjêÚh]”hŒ int order”…”�”}”(hjìÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjèÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mz hjäÚubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation order”h]”hŒallocation order”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÿÚh´Mz hjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjäÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÿÚh´Mz hjoÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjSÚubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj%Ûh]”hŒ Description”…”�”}”(hj'Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj#Ûubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M| hjSÚubjM)�”}”(hŒ/Returns 0 on success, an error code on failure.”h]”hŒ/Returns 0 on success, an error code on failure.”…”�”}”(hj;Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M{ hjSÚubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ'__memcg_kmem_uncharge_page (C function)”Œc.__memcg_kmem_uncharge_page”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ>void __memcg_kmem_uncharge_page (struct page *page, int order)”h]”hù)�”}”(hŒ=void __memcg_kmem_uncharge_page(struct page *page, int order)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjjÛh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjfÛh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M� ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyÛh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjfÛh²hh³jxÛh´M� ubhÿ)�”}”(hŒ__memcg_kmem_uncharge_page”h]”j)�”}”(hŒ__memcg_kmem_uncharge_page”h]”hŒ__memcg_kmem_uncharge_page”…”�”}”(hj‹Ûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‡Ûubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjfÛh²hh³jxÛh´M� ubj )�”}”(hŒ(struct page *page, int order)”h]”(j )�”}”(hŒstruct page *page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj§Ûh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj£ÛubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´Ûh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj£Ûubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÅÛh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÂÛubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÇÛŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj�ÛsbŒc.__memcg_kmem_uncharge_page”†”asbuh1hhj£ÛubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåÛh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj£ÛubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjóÛh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj£Ûubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj£Ûubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjŸÛubj )�”}”(hŒ int order”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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Üubj)�”}”(hŒorder”h]”hŒorder”…”�”}”(hj5Üh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÜubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjŸÛubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjfÛh²hh³jxÛh´M� ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjbÛh²hh³jxÛh´M� ubah}”(h]”j]Ûah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jxÛh´M� hj_Ûh²hubj4)�”}”(hhh]”jM)�”}”(hŒuncharge a kmem page”h]”hŒuncharge a kmem page”…”�”}”(hj_Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M� hj\Üh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj_Ûh²hh³jxÛh´M� ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjwÜjHjwÜjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒZ**Parameters** ``struct page *page`` page to uncharge ``int order`` allocation order”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj�Üh]”hŒ Parameters”…”�”}”(hjƒÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M” hj{Üubj¤)�”}”(hhh]”(j©)�”}”(hŒ'``struct page *page`` page to uncharge ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hj Üh]”hŒstruct page *page”…”�”}”(hj¢Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjžÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M‘ hjšÜubjÉ)�”}”(hhh]”jM)�”}”(hŒpage to uncharge”h]”hŒpage to uncharge”…”�”}”(hj¹Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jµÜh´M‘ hj¶Üubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjšÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jµÜh´M‘ hj—Üubj©)�”}”(hŒ``int order`` allocation order”h]”(j¯)�”}”(hŒ ``int order``”h]”jS)�”}”(hjÙÜh]”hŒ int order”…”�”}”(hjÛÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj×Üubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M“ hjÓÜubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation order”h]”hŒallocation order”…”�”}”(hjòÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M’ hjïÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÓÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³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”]”(héŒ mem_cgroup_wb_stats (C function)”Œc.mem_cgroup_wb_stats”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒšvoid mem_cgroup_wb_stats (struct bdi_writeback *wb, unsigned long *pfilepages, unsigned long *pheadroom, unsigned long *pdirty, unsigned long *pwriteback)”h]”hù)�”}”(hŒ™void mem_cgroup_wb_stats(struct bdi_writeback *wb, unsigned long *pfilepages, unsigned long *pheadroom, unsigned long *pdirty, unsigned long *pwriteback)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj3Ýh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj/Ýh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÞubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBÝh²hh³Nh´Nubah}”(•h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj/Ýh²hh³jAÝh´MÞubhÿ)�”}”(hŒmem_cgroup_wb_stats”h]”j)�”}”(hŒmem_cgroup_wb_stats”h]”hŒmem_cgroup_wb_stats”…”�”}”(hjTÝh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjPÝubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj/Ýh²hh³jAÝh´MÞubj )�”}”(hŒ�(struct bdi_writeback *wb, unsigned long *pfilepages, unsigned long *pheadroom, unsigned long *pdirty, unsigned long *pwriteback)”h]”(j )�”}”(hŒstruct bdi_writeback *wb”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjpÝh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjlÝubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}Ýh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjlÝubh)�”}”(hhh]”j)�”}”(hŒ bdi_writeback”h]”hŒ bdi_writeback”…”�”}”(hjŽÝh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‹Ýubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j�ÝŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljVÝsbŒc.mem_cgroup_wb_stats”†”asbuh1hhjlÝubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®Ýh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjlÝubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¼Ýh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjlÝubj)�”}”(hŒwb”h]”hŒwb”…”�”}”(hjÉÝh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjlÝubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjhÝubj )�”}”(hŒunsigned long *pfilepages”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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ÞÝubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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ÞÝubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÞÝubj)�”}”(hŒ pfilepages”h]”hŒ pfilepages”…”�”}”(hj'Þh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÞÝubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjhÝubj )�”}”(hŒunsigned long *pheadroom”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj@Þh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj<ÞubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNÞh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj<Þubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj\Þh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj<ÞubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjÞh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj<ÞubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjxÞh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj<Þubj)�”}”(hŒ pheadroom”h]”hŒ pheadroom”…”�”}”(hj…Þh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj<Þubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjhÝubj )�”}”(hŒunsigned long *pdirty”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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šÞubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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šÞubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÖÞh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjšÞubj)�”}”(hŒpdirty”h]”hŒpdirty”…”�”}”(hjãÞh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjšÞubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjhÝubj )�”}”(hŒunsigned long *pwriteback”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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øÞubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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øÞubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj4ßh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjøÞubj)�”}”(hŒ pwriteback”h]”hŒ pwriteback”…”�”}”(hjAßh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjøÞubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjhÝubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj/Ýh²hh³jAÝh´MÞubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj+Ýh²hh³jAÝh´MÞubah}”(h]”j&Ýah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jAÝh´MÞhj(Ýh²hubj4)�”}”(hhh]”jM)�”}”(hŒ/retrieve writeback related stats from its memcg”h]”hŒ/retrieve writeback related stats from its memcg”…”�”}”(hjkßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÞhjhßh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj(Ýh²hh³jAÝh´MÞubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjƒßjHjƒßjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXh**Parameters** ``struct bdi_writeback *wb`` bdi_writeback in question ``unsigned long *pfilepages`` out parameter for number of file pages ``unsigned long *pheadroom`` out parameter for number of allocatable pages according to memcg ``unsigned long *pdirty`` out parameter for number of dirty pages ``unsigned long *pwriteback`` out parameter for number of pages under writeback **Description** Determine the numbers of file, headroom, dirty, and writeback pages in **wb**'s memcg. File, dirty and writeback are self-explanatory. Headroom is a bit more involved. A memcg's headroom is "min(max, high) - used". In the hierarchy, the headroom is calculated as the lowest headroom of itself and the ancestors. Note that this doesn't consider the actual amount of available memory in the system. The caller should further cap ***pheadroom** accordingly.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj�ßh]”hŒ Parameters”…”�”}”(hj�ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‹ßubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mâhj‡ßubj¤)�”}”(hhh]”(j©)�”}”(hŒ7``struct bdi_writeback *wb`` bdi_writeback in question ”h]”(j¯)�”}”(hŒ``struct bdi_writeback *wb``”h]”jS)�”}”(hj¬ßh]”hŒstruct bdi_writeback *wb”…”�”}”(hj®ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjªßubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mßhj¦ßubjÉ)�”}”(hhh]”jM)�”}”(hŒbdi_writeback in question”h]”hŒbdi_writeback in question”…”�”}”(hjÅßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÁßh´MßhjÂßubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¦ßubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÁßh´Mßhj£ßubj©)�”}”(hŒE``unsigned long *pfilepages`` out parameter for number of file pages ”h]”(j¯)�”}”(hŒ``unsigned long *pfilepages``”h]”jS)�”}”(hjåßh]”hŒunsigned long *pfilepages”…”�”}”(hjçßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjãßubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MàhjßßubjÉ)�”}”(hhh]”jM)�”}”(hŒ&out parameter for number of file pages”h]”hŒ&out parameter for number of file pages”…”�”}”(hjþßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³júßh´Màhjûßubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjßßubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³júßh´Màhj£ßubj©)�”}”(hŒ^``unsigned long *pheadroom`` out parameter for number of allocatable pages according to memcg ”h]”(j¯)�”}”(hŒ``unsigned long *pheadroom``”h]”jS)�”}”(hjàh]”hŒunsigned long *pheadroom”…”�”}”(hj àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MáhjàubjÉ)�”}”(hhh]”jM)�”}”(hŒ@out parameter for number of allocatable pages according to memcg”h]”hŒ@out parameter for number of allocatable pages according to memcg”…”�”}”(hj7àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j3àh´Máhj4àubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjàubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j3àh´Máhj£ßubj©)�”}”(hŒB``unsigned long *pdirty`` out parameter for number of dirty pages ”h]”(j¯)�”}”(hŒ``unsigned long *pdirty``”h]”jS)�”}”(hjWàh]”hŒunsigned long *pdirty”…”�”}”(hjYàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjUàubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MâhjQàubjÉ)�”}”(hhh]”jM)�”}”(hŒ'out parameter for number of dirty pages”h]”hŒ'out parameter for number of dirty pages”…”�”}”(hjpàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jlàh´Mâhjmàubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjQàubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jlàh´Mâhj£ßubj©)�”}”(hŒP``unsigned long *pwriteback`` out parameter for number of pages under writeback ”h]”(j¯)�”}”(hŒ``unsigned long *pwriteback``”h]”jS)�”}”(hj�àh]”hŒunsigned long *pwriteback”…”�”}”(hj’àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjŽàubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MãhjŠàubjÉ)�”}”(hhh]”jM)�”}”(hŒ1out parameter for number of pages under writeback”h]”hŒ1out parameter for number of pages under writeback”…”�”}”(hj©àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¥àh´Mãhj¦àubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjŠàubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¥àh´Mãhj£ßubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj‡ßubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjËàh]”hŒ Description”…”�”}”(hjÍàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÉàubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Måhj‡ßubjM)�”}”(hŒ©Determine the numbers of file, headroom, dirty, and writeback pages in **wb**'s memcg. File, dirty and writeback are self-explanatory. Headroom is a bit more involved.”h]”(hŒGDetermine the numbers of file, headroom, dirty, and writeback pages in ”…”�”}”(hjáàh²hh³Nh´NubjŽ)�”}”(hŒ**wb**”h]”hŒwb”…”�”}”(hjéàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjáàubhŒ^’s memcg. File, dirty and writeback are self-explanatory. Headroom is a bit more involved.”…”�”}”(hjáàh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mähj‡ßubjM)�”}”(hX!A memcg's headroom is "min(max, high) - used". In the hierarchy, the headroom is calculated as the lowest headroom of itself and the ancestors. Note that this doesn't consider the actual amount of available memory in the system. The caller should further cap ***pheadroom** accordingly.”h]”(hXA memcg’s headroom is “min(max, high) - usedâ€�. In the hierarchy, the headroom is calculated as the lowest headroom of itself and the ancestors. Note that this doesn’t consider the actual amount of available memory in the system. The caller should further cap ”…”�”}”(hjáh²hh³Nh´NubjŽ)�”}”(hŒ***pheadroom**”h]”hŒ *pheadroom”…”�”}”(hj áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjáubhŒ accordingly.”…”�”}”(hjáh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.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”]”(héŒ'mem_cgroup_from_private_id (C function)”Œc.mem_cgroup_from_private_id”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒBstruct mem_cgroup * mem_cgroup_from_private_id (unsigned short id)”h]”hù)�”}”(hŒ@struct mem_cgroup *mem_cgroup_from_private_id(unsigned short id)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjCáh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj?áh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÓubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQáh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj?áh²hh³jPáh´MÓubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hjbáh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj_áubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jdáŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒmem_cgroup_from_private_id”sbŒc.mem_cgroup_from_private_id”†”asbuh1hhj?áh²hh³jPáh´MÓubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒáh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj?áh²hh³jPáh´MÓubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj‘áh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj?áh²hh³jPáh´MÓubhÿ)�”}”(hŒmem_cgroup_from_private_id”h]”j)�”}”(hj€áh]”hŒmem_cgroup_from_private_id”…”�”}”(hj¢áh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjžáubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj?áh²hh³jPáh´MÓubj )�”}”(hŒ(unsigned short id)”h]”j )�”}”(hŒunsigned short id”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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¹áubjµ)�”}”(hŒshort”h]”hŒshort”…”�”}”(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¹áubj)�”}”(hŒid”h]”hŒid”…”�”}”(hjõáh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¹áubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjµáubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj?áh²hh³jPáh´MÓubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj;áh²hh³jPáh´MÓubah}”(h]”j6áah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jPáh´MÓhj8áh²hubj4)�”}”(hhh]”jM)�”}”(hŒlook up a memcg from a memcg id”h]”hŒlook up a memcg from a memcg id”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÓhjâh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj8áh²hh³jPáh´MÓubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj7âjHj7âjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒs**Parameters** ``unsigned short id`` the memcg id to look up **Description** Caller must hold rcu_read_lock().”h]”(jM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M×hj;âubj¤)�”}”(hhh]”j©)�”}”(hŒ.``unsigned short id`` the memcg id to look up ”h]”(j¯)�”}”(hŒ``unsigned short id``”h]”jS)�”}”(hj`âh]”hŒunsigned short id”…”�”}”(hjbâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj^âubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÔhjZâubjÉ)�”}”(hhh]”jM)�”}”(hŒthe memcg id to look up”h]”hŒthe memcg id to look up”…”�”}”(hjyâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³juâh´MÔhjvâubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjZâubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³juâh´MÔhjWâubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj;âubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj›âh]”hŒ Description”…”�”}”(hj�âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj™âubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MÖhj;âubjM)�”}”(hŒ!Caller must hold rcu_read_lock().”h]”hŒ!Caller must hold rcu_read_lock().”…”�”}”(hj±âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.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”]”(héŒ!mem_cgroup_css_reset (C function)”Œc.mem_cgroup_css_reset”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ;void mem_cgroup_css_reset (struct cgroup_subsys_state *css)”h]”hù)�”}”(hŒ:void mem_cgroup_css_reset(struct cgroup_subsys_state *css)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjàâh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÜâh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M9ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïâh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÜâh²hh³jîâh´M9ubhÿ)�”}”(hŒmem_cgroup_css_reset”h]”j)�”}”(hŒmem_cgroup_css_reset”h]”hŒmem_cgroup_css_reset”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjýâubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÜâh²hh³jîâh´M9ubj )�”}”(hŒ!(struct cgroup_subsys_state *css)”h]”j )�”}”(hŒstruct cgroup_subsys_state *css”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjãubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*ãh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjãubh)�”}”(hhh]”j)�”}”(hŒcgroup_subsys_state”h]”hŒcgroup_subsys_state”…”�”}”(hj;ãh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj8ãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j=ãŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljãsbŒc.mem_cgroup_css_reset”†”asbuh1hhjãubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[ãh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjãubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjiãh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjãubj)�”}”(hŒcss”h]”hŒcss”…”�”}”(hjvãh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjãubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÜâh²hh³jîâh´M9ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjØâh²hh³jîâh´M9ubah}”(h]”jÓâah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jîâh´M9hjÕâh²hubj4)�”}”(hhh]”jM)�”}”(hŒ reset the states of a mem_cgroup”h]”hŒ reset the states of a mem_cgroup”…”�”}”(hj ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M9hj�ãh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÕâh²hh³jîâh´M9ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¸ãjHj¸ãjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXþ**Parameters** ``struct cgroup_subsys_state *css`` the target css **Description** Reset the states of the mem_cgroup associated with **css**. This is invoked when the userland requests disabling on the default hierarchy but the memcg is pinned through dependency. The memcg should stop applying policies and should revert to the vanilla state as it may be made visible again. The current implementation only resets the essential configurations. This needs to be expanded to cover all the visible parts.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÂãh]”hŒ Parameters”…”�”}”(hjÄãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÀãubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M=hj¼ãubj¤)�”}”(hhh]”j©)�”}”(hŒ3``struct cgroup_subsys_state *css`` the target css ”h]”(j¯)�”}”(hŒ#``struct cgroup_subsys_state *css``”h]”jS)�”}”(hjáãh]”hŒstruct cgroup_subsys_state *css”…”�”}”(hjããh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjßãubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M:hjÛãubjÉ)�”}”(hhh]”jM)�”}”(hŒthe target css”h]”hŒthe target css”…”�”}”(hjúãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jöãh´M:hj÷ãubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÛãubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jöãh´M:hjØãubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¼ãubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjäh]”hŒ Description”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjäubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M<hj¼ãubjM)�”}”(hX'Reset the states of the mem_cgroup associated with **css**. This is invoked when the userland requests disabling on the default hierarchy but the memcg is pinned through dependency. The memcg should stop applying policies and should revert to the vanilla state as it may be made visible again.”h]”(hŒ3Reset the states of the mem_cgroup associated with ”…”�”}”(hj2äh²hh³Nh´NubjŽ)�”}”(hŒ**css**”h]”hŒcss”…”�”}”(hj:äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj2äubhŒí. This is invoked when the userland requests disabling on the default hierarchy but the memcg is pinned through dependency. The memcg should stop applying policies and should revert to the vanilla state as it may be made visible again.”…”�”}”(hj2äh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M;hj¼ãubjM)�”}”(hŒ~The current implementation only resets the essential configurations. This needs to be expanded to cover all the visible parts.”h]”hŒ~The current implementation only resets the essential configurations. This needs to be expanded to cover all the visible parts.”…”�”}”(hjSäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MAhj¼ãubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ,mem_cgroup_calculate_protection (C function)”Œ!c.mem_cgroup_calculate_protection”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒXvoid mem_cgroup_calculate_protection (struct mem_cgroup *root, struct mem_cgroup *memcg)”h]”hù)�”}”(hŒWvoid mem_cgroup_calculate_protection(struct mem_cgroup *root, struct mem_cgroup *memcg)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‚äh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj~äh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M;ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘äh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj~äh²hh³j�äh´M;ubhÿ)�”}”(hŒmem_cgroup_calculate_protection”h]”j)�”}”(hŒmem_cgroup_calculate_protection”h]”hŒmem_cgroup_calculate_protection”…”�”}”(hj£äh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŸäubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj~äh²hh³j�äh´M;ubj )�”}”(hŒ3(struct mem_cgroup *root, struct mem_cgroup *memcg)”h]”(j )�”}”(hŒstruct mem_cgroup *root”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¿äh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj»äubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌäh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj»äubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hjÝäh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÚäubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jßäŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj¥äsbŒ!c.mem_cgroup_calculate_protection”†”asbuh1hhj»äubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýäh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj»äubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj åh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj»äubj)�”}”(hŒroot”h]”hŒroot”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj»äubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj·äubj )�”}”(hŒstruct mem_cgroup *memcg”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj1åh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj-åubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>åh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj-åubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hjOåh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjLåubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jQåŒmodname”NŒ classname”Njpjs)�”}”jv]”jùäŒ!c.mem_cgroup_calculate_protection”†”asbuh1hhj-åubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmåh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj-åubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj{åh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj-åubj)�”}”(hŒmemcg”h]”hŒmemcg”…”�”}”(hjˆåh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj-åubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj·äubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj~äh²hh³j�äh´M;ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjzäh²hh³j�äh´M;ubah}”(h]”juäah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j�äh´M;hjwäh²hubj4)�”}”(hhh]”jM)�”}”(hŒ2check if memory consumption is in the normal range”h]”hŒ2check if memory consumption is in the normal range”…”�”}”(hj²åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M;hj¯åh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjwäh²hh³j�äh´M;ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÊåjHjÊåjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX/**Parameters** ``struct mem_cgroup *root`` the top ancestor of the sub-tree being checked ``struct mem_cgroup *memcg`` the memory cgroup to check **Description** WARNING: This function is not stateless! It can only be used as part of a top-down tree iteration, not for isolated queries.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÔåh]”hŒ Parameters”…”�”}”(hjÖåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÒåubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M?hjÎåubj¤)�”}”(hhh]”(j©)�”}”(hŒK``struct mem_cgroup *root`` the top ancestor of the sub-tree being checked ”h]”(j¯)�”}”(hŒ``struct mem_cgroup *root``”h]”jS)�”}”(hjóåh]”hŒstruct mem_cgroup *root”…”�”}”(hjõåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjñåubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M<hjíåubjÉ)�”}”(hhh]”jM)�”}”(hŒ.the top ancestor of the sub-tree being checked”h]”hŒ.the top ancestor of the sub-tree being checked”…”�”}”(hj æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jæh´M<hj æubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjíåubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jæh´M<hjêåubj©)�”}”(hŒ8``struct mem_cgroup *memcg`` the memory cgroup to check ”h]”(j¯)�”}”(hŒ``struct mem_cgroup *memcg``”h]”jS)�”}”(hj,æh]”hŒstruct mem_cgroup *memcg”…”�”}”(hj.æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj*æubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M=hj&æubjÉ)�”}”(hhh]”jM)�”}”(hŒthe memory cgroup to check”h]”hŒthe memory cgroup to check”…”�”}”(hjEæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jAæh´M=hjBæubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj&æubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jAæh´M=hjêåubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÎåubjM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M?hjÎåubj¤)�”}”(hhh]”j©)�”}”(hŒ|WARNING: This function is not stateless! It can only be used as part of a top-down tree iteration, not for isolated queries.”h]”(j¯)�”}”(hŒDWARNING: This function is not stateless! It can only be used as part”h]”hŒDWARNING: This function is not stateless! It can only be used as part”…”�”}”(hj„æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M>hj€æubjÉ)�”}”(hhh]”jM)�”}”(hŒ7of a top-down tree iteration, not for isolated queries.”h]”hŒ7of a top-down tree iteration, not for isolated queries.”…”�”}”(hj–æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M?hj“æubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj€æubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³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”]”(héŒ&mem_cgroup_charge_hugetlb (C function)”Œc.mem_cgroup_charge_hugetlb”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ>int mem_cgroup_charge_hugetlb (struct folio *folio, gfp_t gfp)”h]”hù)�”}”(hŒ=int mem_cgroup_charge_hugetlb(struct folio *folio, gfp_t gfp)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj׿h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÓæh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MrubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjææh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÓæh²hh³jåæh´Mrubhÿ)�”}”(hŒmem_cgroup_charge_hugetlb”h]”j)�”}”(hŒmem_cgroup_charge_hugetlb”h]”hŒmem_cgroup_charge_hugetlb”…”�”}”(hjøæh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjôæubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÓæh²hh³jåæh´Mrubj )�”}”(hŒ (struct folio *folio, gfp_t gfp)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjçubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!çh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjçubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj2çh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj/çubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j4çŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljúæsbŒc.mem_cgroup_charge_hugetlb”†”asbuh1hhjçubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRçh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjçubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj`çh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjçubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjmçh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjçubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj çubj )�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj‰çh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj†çubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j‹çŒmodname”NŒ classname”Njpjs)�”}”jv]”jNçŒc.mem_cgroup_charge_hugetlb”†”asbuh1hhj‚çubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§çh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj‚çubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjµçh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‚çubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj çubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÓæh²hh³jåæh´Mrubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÏæh²hh³jåæh´Mrubah}”(h]”jÊæah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jåæh´MrhjÌæh²hubj4)�”}”(hhh]”jM)�”}”(hŒ$charge the memcg for a hugetlb folio”h]”hŒ$charge the memcg for a hugetlb folio”…”�”}”(hjßçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MrhjÜçh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÌæh²hh³jåæh´Mrubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj÷çjHj÷çjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX—**Parameters** ``struct folio *folio`` folio being charged ``gfp_t gfp`` reclaim mode **Description** This function is called when allocating a huge page folio, after the page has already been obtained and charged to the appropriate hugetlb cgroup controller (if it is enabled). Returns ENOMEM if the memcg is already full. Returns 0 if either the charge was successful, or if we skip the charging.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjèh]”hŒ Parameters”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÿçubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mvhjûçubj¤)�”}”(hhh]”(j©)�”}”(hŒ,``struct folio *folio`` folio being charged ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj èh]”hŒstruct folio *folio”…”�”}”(hj"èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjèubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MshjèubjÉ)�”}”(hhh]”jM)�”}”(hŒfolio being charged”h]”hŒfolio being charged”…”�”}”(hj9èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j5èh´Mshj6èubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjèubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j5èh´Mshjèubj©)�”}”(hŒ``gfp_t gfp`` reclaim mode ”h]”(j¯)�”}”(hŒ ``gfp_t gfp``”h]”jS)�”}”(hjYèh]”hŒ gfp_t gfp”…”�”}”(hj[èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjWèubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MthjSèubjÉ)�”}”(hhh]”jM)�”}”(hŒ reclaim mode”h]”hŒ reclaim mode”…”�”}”(hjrèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jnèh´Mthjoèubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjSèubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jnèh´Mthjèubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjûçubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj”èh]”hŒ Description”…”�”}”(hj–èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj’èubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MvhjûçubjM)�”}”(hŒ°This function is called when allocating a huge page folio, after the page has already been obtained and charged to the appropriate hugetlb cgroup controller (if it is enabled).”h]”hŒ°This function is called when allocating a huge page folio, after the page has already been obtained and charged to the appropriate hugetlb cgroup controller (if it is enabled).”…”�”}”(hjªèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MuhjûçubjM)�”}”(hŒwReturns ENOMEM if the memcg is already full. Returns 0 if either the charge was successful, or if we skip the charging.”h]”hŒwReturns ENOMEM if the memcg is already full. Returns 0 if either the charge was successful, or if we skip the charging.”…”�”}”(hj¹èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Myhjûçubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ+mem_cgroup_swapin_charge_folio (C function)”Œ c.mem_cgroup_swapin_charge_folio”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒlint mem_cgroup_swapin_charge_folio (struct folio *folio, unsigned short id, struct mm_struct *mm, gfp_t gfp)”h]”hù)�”}”(hŒkint mem_cgroup_swapin_charge_folio(struct folio *folio, unsigned short id, struct mm_struct *mm, gfp_t gfp)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjèèh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjäèh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M”ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷èh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjäèh²hh³jöèh´M”ubhÿ)�”}”(hŒmem_cgroup_swapin_charge_folio”h]”j)�”}”(hŒmem_cgroup_swapin_charge_folio”h]”hŒmem_cgroup_swapin_charge_folio”…”�”}”(hj éh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjéubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjäèh²hh³jöèh´M”ubj )�”}”(hŒI(struct folio *folio, unsigned short id, struct mm_struct *mm, gfp_t gfp)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj%éh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj!éubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2éh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj!éubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjCéh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj@éubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jEéŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj ésbŒ c.mem_cgroup_swapin_charge_folio”†”asbuh1hhj!éubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcéh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj!éubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjqéh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj!éubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj~éh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj!éubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjéubj )�”}”(hŒunsigned short id”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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“éubjµ)�”}”(hŒshort”h]”hŒshort”…”�”}”(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“éubj)�”}”(hŒid”h]”hŒid”…”�”}”(hjÏéh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj“éubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjéubj )�”}”(hŒstruct mm_struct *mm”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjèéh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjäéubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõéh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjäéubh)�”}”(hhh]”j)�”}”(hŒ mm_struct”h]”hŒ mm_struct”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjêubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jêŒmodname”NŒ classname”Njpjs)�”}”jv]”j_éŒ c.mem_cgroup_swapin_charge_folio”†”asbuh1hhjäéubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$êh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjäéubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj2êh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjäéubj)�”}”(hŒmm”h]”hŒmm”…”�”}”(hj?êh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjäéubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjéubj )�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj[êh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjXêubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j]êŒmodname”NŒ classname”Njpjs)�”}”jv]”j_éŒ c.mem_cgroup_swapin_charge_folio”†”asbuh1hhjTêubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyêh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjTêubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj‡êh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjTêubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjéubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjäèh²hh³jöèh´M”ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjàèh²hh³jöèh´M”ubah}”(h]”jÛèah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jöèh´M”hjÝèh²hubj4)�”}”(hhh]”jM)�”}”(hŒ*Charge a newly allocated folio for swapin.”h]”hŒ*Charge a newly allocated folio for swapin.”…”�”}”(hj±êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M”hj®êh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÝèh²hh³jöèh´M”ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÉêjHjÉêjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXx**Parameters** ``struct folio *folio`` the folio to charge ``unsigned short id`` memory cgroup id ``struct mm_struct *mm`` mm context of the victim ``gfp_t gfp`` reclaim mode **Description** This function charges a folio allocated for swapin. Please call this before adding the folio to the swapcache. Returns 0 on success. Otherwise, an error code is returned.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÓêh]”hŒ Parameters”…”�”}”(hjÕêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÑêubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M˜hjÍêubj¤)�”}”(hhh]”(j©)�”}”(hŒ,``struct folio *folio`` the folio to charge ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjòêh]”hŒstruct folio *folio”…”�”}”(hjôêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjðêubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M•hjìêubjÉ)�”}”(hhh]”jM)�”}”(hŒthe folio to charge”h]”hŒthe folio to charge”…”�”}”(hj ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jëh´M•hjëubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjìêubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jëh´M•hjéêubj©)�”}”(hŒ'``unsigned short id`` memory cgroup id ”h]”(j¯)�”}”(hŒ``unsigned short id``”h]”jS)�”}”(hj+ëh]”hŒunsigned short id”…”�”}”(hj-ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj)ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M–hj%ëubjÉ)�”}”(hhh]”jM)�”}”(hŒmemory cgroup id”h]”hŒmemory cgroup id”…”�”}”(hjDëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j@ëh´M–hjAëubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj%ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j@ëh´M–hjéêubj©)�”}”(hŒ2``struct mm_struct *mm`` mm context of the victim ”h]”(j¯)�”}”(hŒ``struct mm_struct *mm``”h]”jS)�”}”(hjdëh]”hŒstruct mm_struct *mm”…”�”}”(hjfëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjbëubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M—hj^ëubjÉ)�”}”(hhh]”jM)�”}”(hŒmm context of the victim”h]”hŒmm context of the victim”…”�”}”(hj}ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jyëh´M—hjzëubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj^ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jyëh´M—hjéêubj©)�”}”(hŒ``gfp_t gfp`` reclaim mode ”h]”(j¯)�”}”(hŒ ``gfp_t gfp``”h]”jS)�”}”(hj�ëh]”hŒ gfp_t gfp”…”�”}”(hjŸëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj›ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M˜hj—ëubjÉ)�”}”(hhh]”jM)�”}”(hŒ reclaim mode”h]”hŒ reclaim mode”…”�”}”(hj¶ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j²ëh´M˜hj³ëubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj—ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j²ëh´M˜hjéêubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÍêubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjØëh]”hŒ Description”…”�”}”(hjÚëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÖëubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MšhjÍêubjM)�”}”(hŒnThis function charges a folio allocated for swapin. Please call this before adding the folio to the swapcache.”h]”hŒnThis function charges a folio allocated for swapin. Please call this before adding the folio to the swapcache.”…”�”}”(hjîëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M™hjÍêubjM)�”}”(hŒ;Returns 0 on success. Otherwise, an error code is returned.”h]”hŒ;Returns 0 on success. Otherwise, an error code is returned.”…”�”}”(hjýëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.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”]”(héŒ%mem_cgroup_replace_folio (C function)”Œc.mem_cgroup_replace_folio”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒDvoid mem_cgroup_replace_folio (struct folio *old, struct folio *new)”h]”hù)�”}”(hŒCvoid mem_cgroup_replace_folio(struct folio *old, struct folio *new)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj,ìh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj(ìh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MGubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;ìh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj(ìh²hh³j:ìh´MGubhÿ)�”}”(hŒmem_cgroup_replace_folio”h]”j)�”}”(hŒmem_cgroup_replace_folio”h]”hŒmem_cgroup_replace_folio”…”�”}”(hjMìh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjIìubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj(ìh²hh³j:ìh´MGubj )�”}”(hŒ&(struct folio *old, struct folio *new)”h]”(j )�”}”(hŒstruct folio *old”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjiìh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjeìubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvìh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjeìubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj‡ìh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj„ìubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j‰ìŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljOìsbŒc.mem_cgroup_replace_folio”†”asbuh1hhjeìubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§ìh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjeìubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjµìh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjeìubj)�”}”(hŒold”h]”hŒold”…”�”}”(hjÂìh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjeìubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjaìubj )�”}”(hŒstruct folio *new”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÛìh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj×ìubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèìh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj×ìubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjùìh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjöìubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jûìŒmodname”NŒ classname”Njpjs)�”}”jv]”j£ìŒc.mem_cgroup_replace_folio”†”asbuh1hhj×ìubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj×ìubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj%íh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj×ìubj)�”}”(hŒnew”h]”hŒnew”…”�”}”(hj2íh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj×ìubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjaìubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj(ìh²hh³j:ìh´MGubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj$ìh²hh³j:ìh´MGubah}”(h]”jìah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j:ìh´MGhj!ìh²hubj4)�”}”(hhh]”jM)�”}”(hŒCharge a folio's replacement.”h]”hŒCharge a folio’s replacement.”…”�”}”(hj\íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MGhjYíh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj!ìh²hh³j:ìh´MGubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjtíjHjtíjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``struct folio *old`` Currently circulating folio. ``struct folio *new`` Replacement folio. **Description** Charge **new** as a replacement folio for **old**. **old** will be uncharged upon free. Both folios must be locked, **new->mapping** must be set up.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj~íh]”hŒ Parameters”…”�”}”(hj€íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj|íubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MKhjxíubj¤)�”}”(hhh]”(j©)�”}”(hŒ3``struct folio *old`` Currently circulating folio. ”h]”(j¯)�”}”(hŒ``struct folio *old``”h]”jS)�”}”(hj�íh]”hŒstruct folio *old”…”�”}”(hjŸíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj›íubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MHhj—íubjÉ)�”}”(hhh]”jM)�”}”(hŒCurrently circulating folio.”h]”hŒCurrently circulating folio.”…”�”}”(hj¶íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j²íh´MHhj³íubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj—íubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j²íh´MHhj”íubj©)�”}”(hŒ)``struct folio *new`` Replacement folio. ”h]”(j¯)�”}”(hŒ``struct folio *new``”h]”jS)�”}”(hjÖíh]”hŒstruct folio *new”…”�”}”(hjØíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÔíubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MIhjÐíubjÉ)�”}”(hhh]”jM)�”}”(hŒReplacement folio.”h]”hŒReplacement folio.”…”�”}”(hjïíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jëíh´MIhjìíubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÐíubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jëíh´MIhj”íubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjxíubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjîh]”hŒ Description”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjîubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MKhjxíubjM)�”}”(hŒWCharge **new** as a replacement folio for **old**. **old** will be uncharged upon free.”h]”(hŒCharge ”…”�”}”(hj'îh²hh³Nh´NubjŽ)�”}”(hŒ**new**”h]”hŒnew”…”�”}”(hj/îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj'îubhŒ as a replacement folio for ”…”�”}”(hj'îh²hh³Nh´NubjŽ)�”}”(hŒ**old**”h]”hŒold”…”�”}”(hjAîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj'îubhŒ. ”…”�”}”(hj'îh²hh³Nh´NubjŽ)�”}”(hŒ**old**”h]”hŒold”…”�”}”(hjSîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj'îubhŒ will be uncharged upon free.”…”�”}”(hj'îh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MJhjxíubjM)�”}”(hŒmapping** must be set up.”h]”(hŒBoth folios must be locked, ”…”�”}”(hjlîh²hh³Nh´NubjŽ)�”}”(hŒ**new->mapping**”h]”hŒ new->mapping”…”�”}”(hjtîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjlîubhŒ must be set up.”…”�”}”(hjlîh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MMhjxíubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmem_cgroup_migrate (C function)”Œc.mem_cgroup_migrate”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ>void mem_cgroup_migrate (struct folio *old, struct folio *new)”h]”hù)�”}”(hŒ=void mem_cgroup_migrate(struct folio *old, struct folio *new)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj­îh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj©îh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M~ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼îh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj©îh²hh³j»îh´M~ubhÿ)�”}”(hŒmem_cgroup_migrate”h]”j)�”}”(hŒmem_cgroup_migrate”h]”hŒmem_cgroup_migrate”…”�”}”(hjÎîh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÊîubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj©îh²hh³j»îh´M~ubj )�”}”(hŒ&(struct folio *old, struct folio *new)”h]”(j )�”}”(hŒstruct folio *old”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjêîh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjæîubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷îh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjæîubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjïubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j ïŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÐîsbŒc.mem_cgroup_migrate”†”asbuh1hhjæîubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(ïh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjæîubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj6ïh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjæîubj)�”}”(hŒold”h]”hŒold”…”�”}”(hjCïh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjæîubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjâîubj )�”}”(hŒstruct folio *new”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj\ïh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjXïubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjiïh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjXïubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjzïh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjwïubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j|ïŒmodname”NŒ classname”Njpjs)�”}”jv]”j$ïŒc.mem_cgroup_migrate”†”asbuh1hhjXïubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜ïh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjXïubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¦ïh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjXïubj)�”}”(hŒnew”h]”hŒnew”…”�”}”(hj³ïh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjXïubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjâîubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj©îh²hh³j»îh´M~ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¥îh²hh³j»îh´M~ubah}”(h]”j îah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j»îh´M~hj¢îh²hubj4)�”}”(hhh]”jM)�”}”(hŒ6Transfer the memcg data from the old to the new folio.”h]”hŒ6Transfer the memcg data from the old to the new folio.”…”�”}”(hjÝïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M~hjÚïh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¢îh²hh³j»îh´M~ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjõïjHjõïjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXº**Parameters** ``struct folio *old`` Currently circulating folio. ``struct folio *new`` Replacement folio. **Description** Transfer the memcg data from the old folio to the new folio for migration. The old folio's data info will be cleared. The memory counters remain unchanged, unless the charge moves out of a fully reparented ancestry and has to be settled (see below). Both folios must be locked, **new->mapping** must be set up.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÿïh]”hŒ Parameters”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjýïubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M‚hjùïubj¤)�”}”(hhh]”(j©)�”}”(hŒ3``struct folio *old`` Currently circulating folio. ”h]”(j¯)�”}”(hŒ``struct folio *old``”h]”jS)�”}”(hjðh]”hŒstruct folio *old”…”�”}”(hj ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjðubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MhjðubjÉ)�”}”(hhh]”jM)�”}”(hŒCurrently circulating folio.”h]”hŒCurrently circulating folio.”…”�”}”(hj7ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j3ðh´Mhj4ðubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjðubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j3ðh´Mhjðubj©)�”}”(hŒ)``struct folio *new`` Replacement folio. ”h]”(j¯)�”}”(hŒ``struct folio *new``”h]”jS)�”}”(hjWðh]”hŒstruct folio *new”…”�”}”(hjYðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjUðubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M€hjQðubjÉ)�”}”(hhh]”jM)�”}”(hŒReplacement folio.”h]”hŒReplacement folio.”…”�”}”(hjpðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jlðh´M€hjmðubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjQðubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jlðh´M€hjðubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjùïubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj’ðh]”hŒ Description”…”�”}”(hj”ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�ðubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M‚hjùïubjM)�”}”(hŒùTransfer the memcg data from the old folio to the new folio for migration. The old folio's data info will be cleared. The memory counters remain unchanged, unless the charge moves out of a fully reparented ancestry and has to be settled (see below).”h]”hŒûTransfer the memcg data from the old folio to the new folio for migration. The old folio’s data info will be cleared. The memory counters remain unchanged, unless the charge moves out of a fully reparented ancestry and has to be settled (see below).”…”�”}”(hj¨ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M�hjùïubjM)�”}”(hŒmapping** must be set up.”h]”(hŒBoth folios must be locked, ”…”�”}”(hj·ðh²hh³Nh´NubjŽ)�”}”(hŒ**new->mapping**”h]”hŒ new->mapping”…”�”}”(hj¿ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj·ðubhŒ must be set up.”…”�”}”(hj·ðh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.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”]”(héŒ!mem_cgroup_sk_charge (C function)”Œc.mem_cgroup_sk_charge”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒXbool mem_cgroup_sk_charge (const struct sock *sk, unsigned int nr_pages, gfp_t gfp_mask)”h]”hù)�”}”(hŒWbool mem_cgroup_sk_charge(const struct sock *sk, unsigned int nr_pages, gfp_t gfp_mask)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjøðh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjôðh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MíubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjôðh²hh³jñh´Míubhÿ)�”}”(hŒmem_cgroup_sk_charge”h]”j)�”}”(hŒmem_cgroup_sk_charge”h]”hŒmem_cgroup_sk_charge”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjôðh²hh³jñh´Míubj )�”}”(hŒ>(const struct sock *sk, unsigned int nr_pages, gfp_t gfp_mask)”h]”(j )�”}”(hŒconst struct sock *sk”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj4ñh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj0ñubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAñh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj0ñubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjOñh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj0ñubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\ñh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj0ñubh)�”}”(hhh]”j)�”}”(hŒsock”h]”hŒsock”…”�”}”(hjmñh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjjñubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”joñŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljñsbŒc.mem_cgroup_sk_charge”†”asbuh1hhj0ñubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�ñh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj0ñubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj›ñh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj0ñubj)�”}”(hŒsk”h]”hŒsk”…”�”}”(hj¨ñh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj0ñubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj,ñubj )�”}”(hŒunsigned int nr_pages”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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½ñubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(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½ñubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hjùñh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj½ñubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j 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 ]”jah"]”h$]”h&]”uh1jhjòubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jòŒmodname”NŒ classname”Njpjs)�”}”jv]”j‰ñŒc.mem_cgroup_sk_charge”†”asbuh1hhjòubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3òh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjòubj)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hjAòh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjòubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj,ñubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjôðh²hh³jñh´Míubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjððh²hh³jñh´Míubah}”(h]”jëðah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jñh´Míhjíðh²hubj4)�”}”(hhh]”jM)�”}”(hŒcharge socket memory”h]”hŒcharge socket memory”…”�”}”(hjkòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Míhjhòh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjíðh²hh³jñh´Míubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjƒòjHjƒòjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX5**Parameters** ``const struct sock *sk`` socket in memcg to charge ``unsigned int nr_pages`` number of pages to charge ``gfp_t gfp_mask`` reclaim mode **Description** Charges **nr_pages** to **memcg**. Returns ``true`` if the charge fit within **memcg**'s configured limit, ``false`` if it doesn't.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj�òh]”hŒ Parameters”…”�”}”(hj�òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‹òubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mñhj‡òubj¤)�”}”(hhh]”(j©)�”}”(hŒ4``const struct sock *sk`` socket in memcg to charge ”h]”(j¯)�”}”(hŒ``const struct sock *sk``”h]”jS)�”}”(hj¬òh]”hŒconst struct sock *sk”…”�”}”(hj®òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjªòubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mîhj¦òubjÉ)�”}”(hhh]”jM)�”}”(hŒsocket in memcg to charge”h]”hŒsocket in memcg to charge”…”�”}”(hjÅòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÁòh´MîhjÂòubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¦òubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÁòh´Mîhj£òubj©)�”}”(hŒ4``unsigned int nr_pages`` number of pages to charge ”h]”(j¯)�”}”(hŒ``unsigned int nr_pages``”h]”jS)�”}”(hjåòh]”hŒunsigned int nr_pages”…”�”}”(hjçòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjãòubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MïhjßòubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages to charge”h]”hŒnumber of pages to charge”…”�”}”(hjþòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³júòh´Mïhjûòubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjßòubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³júòh´Mïhj£òubj©)�”}”(hŒ ``gfp_t gfp_mask`` reclaim mode ”h]”(j¯)�”}”(hŒ``gfp_t gfp_mask``”h]”jS)�”}”(hjóh]”hŒgfp_t gfp_mask”…”�”}”(hj óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjóubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MðhjóubjÉ)�”}”(hhh]”jM)�”}”(hŒ reclaim mode”h]”hŒ reclaim mode”…”�”}”(hj7óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j3óh´Mðhj4óubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjóubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j3óh´Mðhj£òubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj‡òubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(h•jYóh]”hŒ Description”…”�”}”(hj[óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjWóubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mòhj‡òubjM)�”}”(hŒƒCharges **nr_pages** to **memcg**. Returns ``true`` if the charge fit within **memcg**'s configured limit, ``false`` if it doesn't.”h]”(hŒCharges ”…”�”}”(hjoóh²hh³Nh´NubjŽ)�”}”(hŒ **nr_pages**”h]”hŒnr_pages”…”�”}”(hjwóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjoóubhŒ to ”…”�”}”(hjoóh²hh³Nh´NubjŽ)�”}”(hŒ **memcg**”h]”hŒmemcg”…”�”}”(hj‰óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjoóubhŒ . Returns ”…”�”}”(hjoóh²hh³Nh´NubjS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj›óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjoóubhŒ if the charge fit within ”…”�”}”(hjoóh²hh³Nh´NubjŽ)�”}”(hŒ **memcg**”h]”hŒmemcg”…”�”}”(hj­óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjoóubhŒ’s configured limit, ”…”�”}”(hjoóh²hh³Nh´NubjS)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj¿óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjoóubhŒ if it doesn’t.”…”�”}”(hjoóh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.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”]”(héŒ#mem_cgroup_sk_uncharge (C function)”Œc.mem_cgroup_sk_uncharge”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒJvoid mem_cgroup_sk_uncharge (const struct sock *sk, unsigned int nr_pages)”h]”hù)�”}”(hŒIvoid mem_cgroup_sk_uncharge(const struct sock *sk, unsigned int nr_pages)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjøóh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjôóh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjôóh²hh³jôh´Mubhÿ)�”}”(hŒmem_cgroup_sk_uncharge”h]”j)�”}”(hŒmem_cgroup_sk_uncharge”h]”hŒmem_cgroup_sk_uncharge”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjôubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjôóh²hh³jôh´Mubj )�”}”(hŒ.(const struct sock *sk, unsigned int nr_pages)”h]”(j )�”}”(hŒconst struct sock *sk”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj5ôh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj1ôubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBôh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj1ôubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjPôh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj1ôubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]ôh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj1ôubh)�”}”(hhh]”j)�”}”(hŒsock”h]”hŒsock”…”�”}”(hjnôh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjkôubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jpôŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljôsbŒc.mem_cgroup_sk_uncharge”†”asbuh1hhj1ôubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽôh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj1ôubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjœôh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj1ôubj)�”}”(hŒsk”h]”hŒsk”…”�”}”(hj©ôh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj1ôubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj-ôubj )�”}”(hŒunsigned int nr_pages”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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¾ôubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(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¾ôubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hjúôh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾ôubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj-ôubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjôóh²hh³jôh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjðóh²hh³jôh´Mubah}”(h]”jëóah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jôh´Mhjíóh²hubj4)�”}”(hhh]”jM)�”}”(hŒuncharge socket memory”h]”hŒuncharge socket memory”…”�”}”(hj$õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mhj!õh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjíóh²hh³jôh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj<õjHj<õjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ€**Parameters** ``const struct sock *sk`` socket in memcg to uncharge ``unsigned int nr_pages`` number of pages to uncharge”h]”(jM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M hj@õubj¤)�”}”(hhh]”(j©)�”}”(hŒ6``const struct sock *sk`` socket in memcg to uncharge ”h]”(j¯)�”}”(hŒ``const struct sock *sk``”h]”jS)�”}”(hjeõh]”hŒconst struct sock *sk”…”�”}”(hjgõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjcõubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mhj_õubjÉ)�”}”(hhh]”jM)�”}”(hŒsocket in memcg to uncharge”h]”hŒsocket in memcg to uncharge”…”�”}”(hj~õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jzõh´Mhj{õubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj_õubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jzõh´Mhj\õubj©)�”}”(hŒ5``unsigned int nr_pages`` number of pages to uncharge”h]”(j¯)�”}”(hŒ``unsigned int nr_pages``”h]”jS)�”}”(hjžõh]”hŒunsigned int nr_pages”…”�”}”(hj õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjœõubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M hj˜õubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages to uncharge”h]”hŒnumber of pages to uncharge”…”�”}”(hj·õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mhj´õubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj˜õubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³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”]”(héŒ)__mem_cgroup_try_charge_swap (C function)”Œc.__mem_cgroup_try_charge_swap”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ6int __mem_cgroup_try_charge_swap (struct folio *folio)”h]”hù)�”}”(hŒ5int __mem_cgroup_try_charge_swap(struct folio *folio)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjøõh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjôõh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M]ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjôõh²hh³jöh´M]ubhÿ)�”}”(hŒ__mem_cgroup_try_charge_swap”h]”j)�”}”(hŒ__mem_cgroup_try_charge_swap”h]”hŒ__mem_cgroup_try_charge_swap”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjöubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjôõh²hh³jöh´M]ubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj5öh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj1öubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBöh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj1öubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjSöh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjPöubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jUöŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljösbŒc.__mem_cgroup_try_charge_swap”†”asbuh1hhj1öubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsöh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj1öubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj�öh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj1öubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjŽöh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj1öubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj-öubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjôõh²hh³jöh´M]ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjðõh²hh³jöh´M]ubah}”(h]”jëõah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jöh´M]hjíõh²hubj4)�”}”(hhh]”jM)�”}”(hŒ#try charging swap space for a folio”h]”hŒ#try charging swap space for a folio”…”�”}”(hj¸öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M]hjµöh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjíõh²hh³jöh´M]ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÐöjHjÐöjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒÃ**Parameters** ``struct folio *folio`` folio being added to swap **Description** Try to charge **folio**'s memcg for the swap space at folio->swap. Returns 0 on success, -ENOMEM on failure.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÚöh]”hŒ Parameters”…”�”}”(hjÜöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjØöubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MahjÔöubj¤)�”}”(hhh]”j©)�”}”(hŒ2``struct folio *folio`` folio being added to swap ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjùöh]”hŒstruct folio *folio”…”�”}”(hjûöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj÷öubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M^hjóöubjÉ)�”}”(hhh]”jM)�”}”(hŒfolio being added to swap”h]”hŒfolio being added to swap”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j÷h´M^hj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjóöubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j÷h´M^hjðöubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÔöubjM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M`hjÔöubjM)�”}”(hŒBTry to charge **folio**'s memcg for the swap space at folio->swap.”h]”(hŒTry to charge ”…”�”}”(hjJ÷h²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjR÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjJ÷ubhŒ-’s memcg for the swap space at folio->swap.”…”�”}”(hjJ÷h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M_hjÔöubjM)�”}”(hŒ)Returns 0 on success, -ENOMEM on failure.”h]”hŒ)Returns 0 on success, -ENOMEM on failure.”…”�”}”(hjk÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MahjÔöubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ'__mem_cgroup_uncharge_swap (C function)”Œc.__mem_cgroup_uncharge_swap”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒJvoid __mem_cgroup_uncharge_swap (unsigned short id, unsigned int nr_pages)”h]”hù)�”}”(hŒIvoid __mem_cgroup_uncharge_swap(unsigned short id, unsigned int nr_pages)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjš÷h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj–÷h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M’ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©÷h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj–÷h²hh³j¨÷h´M’ubhÿ)�”}”(hŒ__mem_cgroup_uncharge_swap”h]”j)�”}”(hŒ__mem_cgroup_uncharge_swap”h]”hŒ__mem_cgroup_uncharge_swap”…”�”}”(hj»÷h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj·÷ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj–÷h²hh³j¨÷h´M’ubj )�”}”(hŒ*(unsigned short id, unsigned int nr_pages)”h]”(j )�”}”(hŒunsigned short id”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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Ó÷ubjµ)�”}”(hŒshort”h]”hŒshort”…”�”}”(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Ó÷ubj)�”}”(hŒid”h]”hŒid”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÓ÷ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÏ÷ubj )�”}”(hŒunsigned int nr_pages”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj(øh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj$øubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6øh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj$øubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjDøh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj$øubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRøh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj$øubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hj`øh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj$øubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÏ÷ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj–÷h²hh³j¨÷h´M’ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj’÷h²hh³j¨÷h´M’ubah}”(h]”j�÷ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¨÷h´M’hj�÷h²hubj4)�”}”(hhh]”jM)�”}”(hŒuncharge swap space”h]”hŒuncharge swap space”…”�”}”(hjŠøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M’hj‡øh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj�÷h²hh³j¨÷h´M’ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¢øjHj¢øjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ**Parameters** ``unsigned short id`` cgroup id to uncharge ``unsigned int nr_pages`` the amount of swap space to uncharge”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¬øh]”hŒ Parameters”…”�”}”(hj®øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjªøubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M–hj¦øubj¤)�”}”(hhh]”(j©)�”}”(hŒ,``unsigned short id`` cgroup id to uncharge ”h]”(j¯)�”}”(hŒ``unsigned short id``”h]”jS)�”}”(hjËøh]”hŒunsigned short id”…”�”}”(hjÍøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÉøubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M“hjÅøubjÉ)�”}”(hhh]”jM)�”}”(hŒcgroup id to uncharge”h]”hŒcgroup id to uncharge”…”�”}”(hjäøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jàøh´M“hjáøubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÅøubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jàøh´M“hjÂøubj©)�”}”(hŒ>``unsigned int nr_pages`` the amount of swap space to uncharge”h]”(j¯)�”}”(hŒ``unsigned int nr_pages``”h]”jS)�”}”(hjùh]”hŒunsigned int nr_pages”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjùubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M•hjþøubjÉ)�”}”(hhh]”jM)�”}”(hŒ$the amount of swap space to uncharge”h]”hŒ$the amount of swap space to uncharge”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M”hjùubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjþøubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³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”]”(héŒ!obj_cgroup_may_zswap (C function)”Œc.obj_cgroup_may_zswap”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ4bool obj_cgroup_may_zswap (struct obj_cgroup *objcg)”h]”hù)�”}”(hŒ3bool obj_cgroup_may_zswap(struct obj_cgroup *objcg)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hj^ùh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjZùh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MXubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlùh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjZùh²hh³jkùh´MXubhÿ)�”}”(hŒobj_cgroup_may_zswap”h]”j)�”}”(hŒobj_cgroup_may_zswap”h]”hŒobj_cgroup_may_zswap”…”�”}”(hj~ùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjzùubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjZùh²hh³jkùh´MXubj )�”}”(hŒ(struct obj_cgroup *objcg)”h]”j )�”}”(hŒstruct obj_cgroup *objcg”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjšùh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj–ùubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§ùh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj–ùubh)�”}”(hhh]”j)�”}”(hŒ obj_cgroup”h]”hŒ obj_cgroup”…”�”}”(hj¸ùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjµùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jºùŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj€ùsbŒc.obj_cgroup_may_zswap”†”asbuh1hhj–ùubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØùh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj–ùubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjæùh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj–ùubj)�”}”(hŒobjcg”h]”hŒobjcg”…”�”}”(hjóùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj–ùubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj’ùubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjZùh²hh³jkùh´MXubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjVùh²hh³jkùh´MXubah}”(h]”jQùah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jkùh´MXhjSùh²hubj4)�”}”(hhh]”jM)�”}”(hŒcheck if this cgroup can zswap”h]”hŒcheck if this cgroup can zswap”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MXhjúh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjSùh²hh³jkùh´MXubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj5újHj5újI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXÍ**Parameters** ``struct obj_cgroup *objcg`` the object cgroup **Description** Check if the hierarchical zswap limit has been reached. This doesn't check for specific headroom, and it is not atomic either. But with zswap, the size of the allocation is only known once compression has occurred, and this optimistic pre-check avoids spending cycles on compression when there is already no room left or zswap is disabled altogether somewhere in the hierarchy.”h]”(jM)�”}”(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&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M\hj9úubj¤)�”}”(hhh]”j©)�”}”(hŒ/``struct obj_cgroup *objcg`` the object cgroup ”h]”(j¯)�”}”(hŒ``struct obj_cgroup *objcg``”h]”jS)�”}”(hj^úh]”hŒstruct obj_cgroup *objcg”…”�”}”(hj`úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj\úubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MYhjXúubjÉ)�”}”(hhh]”jM)�”}”(hŒthe object cgroup”h]”hŒthe object cgroup”…”�”}”(hjwúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jsúh´MYhjtúubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjXúubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jsúh´MYhjUúubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj9úubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj™úh]”hŒ Description”…”�”}”(hj›úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj—úubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M[hj9úubjM)�”}”(hŒ7Check if the hierarchical zswap limit has been reached.”h]”hŒ7Check if the hierarchical zswap limit has been reached.”…”�”}”(hj¯úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MZhj9úubjM)�”}”(hXAThis doesn't check for specific headroom, and it is not atomic either. But with zswap, the size of the allocation is only known once compression has occurred, and this optimistic pre-check avoids spending cycles on compression when there is already no room left or zswap is disabled altogether somewhere in the hierarchy.”h]”hXCThis doesn’t check for specific headroom, and it is not atomic either. But with zswap, the size of the allocation is only known once compression has occurred, and this optimistic pre-check avoids spending cycles on compression when there is already no room left or zswap is disabled altogether somewhere in the hierarchy.”…”�”}”(hj¾úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.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”]”(héŒ$obj_cgroup_charge_zswap (C function)”Œc.obj_cgroup_charge_zswap”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒDvoid obj_cgroup_charge_zswap (struct obj_cgroup *objcg, size_t size)”h]”hù)�”}”(hŒCvoid obj_cgroup_charge_zswap(struct obj_cgroup *objcg, size_t size)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjíúh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjéúh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M…ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüúh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjéúh²hh³jûúh´M…ubhÿ)�”}”(hŒobj_cgroup_charge_zswap”h]”j)�”}”(hŒobj_cgroup_charge_zswap”h]”hŒobj_cgroup_charge_zswap”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ûubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjéúh²hh³jûúh´M…ubj )�”}”(hŒ'(struct obj_cgroup *objcg, size_t size)”h]”(j )�”}”(hŒstruct obj_cgroup *objcg”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj*ûh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj&ûubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7ûh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj&ûubh)�”}”(hhh]”j)�”}”(hŒ obj_cgroup”h]”hŒ obj_cgroup”…”�”}”(hjHûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjEûubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jJûŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljûsbŒc.obj_cgroup_charge_zswap”†”asbuh1hhj&ûubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhûh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj&ûubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjvûh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj&ûubj)�”}”(hŒobjcg”h]”hŒobjcg”…”�”}”(hjƒûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj&ûubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj"ûubj )�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjŸûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjœûubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¡ûŒmodname”NŒ classname”Njpjs)�”}”jv]”jdûŒc.obj_cgroup_charge_zswap”†”asbuh1hhj˜ûubjÇ)�”}”(hŒ ”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 ]”jah"]”h$]”h&]”uh1jhj˜ûubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj"ûubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjéúh²hh³jûúh´M…ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjåúh²hh³jûúh´M…ubah}”(h]”jàúah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jûúh´M…hjâúh²hubj4)�”}”(hhh]”jM)�”}”(hŒ!charge compression backend memory”h]”hŒ!charge compression backend memory”…”�”}”(hjõûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M…hjòûh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjâúh²hh³jûúh´M…ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj üjHj üjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒù**Parameters** ``struct obj_cgroup *objcg`` the object cgroup ``size_t size`` size of compressed object **Description** This forces the charge after obj_cgroup_may_zswap() allowed compression and storage in zswap for this cgroup to go ahead.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjüh]”hŒ Parameters”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjüubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M‰hjüubj¤)�”}”(hhh]”(j©)�”}”(hŒ/``struct obj_cgroup *objcg`` the object cgroup ”h]”(j¯)�”}”(hŒ``struct obj_cgroup *objcg``”h]”jS)�”}”(hj6üh]”hŒstruct obj_cgroup *objcg”…”�”}”(hj8üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj4üubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M†hj0üubjÉ)�”}”(hhh]”jM)�”}”(hŒthe object cgroup”h]”hŒthe object cgroup”…”�”}”(hjOüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jKüh´M†hjLüubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj0üubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jKüh´M†hj-üubj©)�”}”(hŒ*``size_t size`` size of compressed object ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hjoüh]”hŒ size_t size”…”�”}”(hjqüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjmüubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M‡hjiüubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of compressed object”h]”hŒsize of compressed object”…”�”}”(hjˆüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j„üh´M‡hj…üubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjiüubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j„üh´M‡hj-üubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjüubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjªüh]”hŒ Description”…”�”}”(hj¬üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¨üubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M‰hjüubjM)�”}”(hŒyThis forces the charge after obj_cgroup_may_zswap() allowed compression and storage in zswap for this cgroup to go ahead.”h]”hŒyThis forces the charge after obj_cgroup_may_zswap() allowed compression and storage in zswap for this cgroup to go ahead.”…”�”}”(hjÀüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.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”]”(héŒ&obj_cgroup_uncharge_zswap (C function)”Œc.obj_cgroup_uncharge_zswap”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒFvoid obj_cgroup_uncharge_zswap (struct obj_cgroup *objcg, size_t size)”h]”hù)�”}”(hŒEvoid obj_cgroup_uncharge_zswap(struct obj_cgroup *objcg, size_t size)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjïüh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjëüh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M¦ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþüh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjëüh²hh³jýüh´M¦ubhÿ)�”}”(hŒobj_cgroup_uncharge_zswap”h]”j)�”}”(hŒobj_cgroup_uncharge_zswap”h]”hŒobj_cgroup_uncharge_zswap”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ýubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjëüh²hh³jýüh´M¦ubj )�”}”(hŒ'(struct obj_cgroup *objcg, size_t size)”h]”(j )�”}”(hŒstruct obj_cgroup *objcg”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj,ýh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj(ýubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9ýh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj(ýubh)�”}”(hhh]”j)�”}”(hŒ obj_cgroup”h]”hŒ obj_cgroup”…”�”}”(hjJýh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjGýubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jLýŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljýsbŒc.obj_cgroup_uncharge_zswap”†”asbuh1hhj(ýubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjýh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj(ýubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjxýh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj(ýubj)�”}”(hŒobjcg”h]”hŒobjcg”…”�”}”(hj…ýh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj(ýubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj$ýubj )�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj¡ýh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjžýubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j£ýŒmodname”NŒ classname”Njpjs)�”}”jv]”jfýŒc.obj_cgroup_uncharge_zswap”†”asbuh1hhjšýubjÇ)�”}”(hŒ ”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 ]”jah"]”h$]”h&]”uh1jhjšýubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj$ýubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjëüh²hh³jýüh´M¦ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjçüh²hh³jýüh´M¦ubah}”(h]”jâüah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jýüh´M¦hjäüh²hubj4)�”}”(hhh]”jM)�”}”(hŒ#uncharge compression backend memory”h]”hŒ#uncharge compression backend memory”…”�”}”(hj÷ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M¦hjôýh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjäüh²hh³jýüh´M¦ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjþjHjþjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ¢**Parameters** ``struct obj_cgroup *objcg`` the object cgroup ``size_t size`` size of compressed object **Description** Uncharges zswap memory on page in.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjþh]”hŒ Parameters”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjþubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´Mªhjþubj¤)�”}”(hhh]”(j©)�”}”(hŒ/``struct obj_cgroup *objcg`` the object cgroup ”h]”(j¯)�”}”(hŒ``struct obj_cgroup *objcg``”h]”jS)�”}”(hj8þh]”hŒstruct obj_cgroup *objcg”…”�”}”(hj:þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj6þubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M§hj2þubjÉ)�”}”(hhh]”jM)�”}”(hŒthe object cgroup”h]”hŒthe object cgroup”…”�”}”(hjQþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jMþh´M§hjNþubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj2þubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jMþh´M§hj/þubj©)�”}”(hŒ*``size_t size`` size of compressed object ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hjqþh]”hŒ size_t size”…”�”}”(hjsþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjoþubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M¨hjkþubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of compressed object”h]”hŒsize of compressed object”…”�”}”(hjŠþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j†þh´M¨hj‡þubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjkþubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j†þh´M¨hj/þubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjþubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj¬þh]”hŒ Description”…”�”}”(hj®þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjªþubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´MªhjþubjM)�”}”(hŒ"Uncharges zswap memory on page in.”h]”hŒ"Uncharges zswap memory on page in.”…”�”}”(hjÂþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./mm/memcontrol.c”h´M©hjþubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubjK‰)�”}”(hŒ0#kernel-doc:: mm/memory-tiers.c (build warnings)”h]”hŒ0#kernel-doc:: mm/memory-tiers.c (build warnings)”…”�”}”hjØþsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jJ‰hjÞÁh²hh³hÊh´K{ubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒshmem_recalc_inode (C function)”Œc.shmem_recalc_inode”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒIbool shmem_recalc_inode (struct inode *inode, long alloced, long swapped)”h]”hù)�”}”(hŒHbool shmem_recalc_inode(struct inode *inode, long alloced, long swapped)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjÿþh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjûþh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M©ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ÿh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjûþh²hh³j ÿh´M©ubhÿ)�”}”(hŒshmem_recalc_inode”h]”j)�”}”(hŒshmem_recalc_inode”h]”hŒshmem_recalc_inode”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÿubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjûþh²hh³j ÿh´M©ubj )�”}”(hŒ1(struct inode *inode, long alloced, long swapped)”h]”(j )�”}”(hŒstruct inode *inode”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj;ÿh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj7ÿubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHÿh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj7ÿubh)�”}”(hhh]”j)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjYÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjVÿubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j[ÿŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj!ÿsbŒc.shmem_recalc_inode”†”asbuh1hhj7ÿubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyÿh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj7ÿubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj‡ÿh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj7ÿubj)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj”ÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7ÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj3ÿubj )�”}”(hŒ long alloced”h]”(jµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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©ÿubj)�”}”(hŒalloced”h]”hŒalloced”…”�”}”(hjÉÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj©ÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj3ÿubj )�”}”(hŒ long swapped”h]”(jµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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Þÿubj)�”}”(hŒswapped”h]”hŒswapped”…”�”}”(hjþÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÞÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj3ÿubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjûþh²hh³j ÿh´M©ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj÷þh²hh³j ÿh´M©ubah}”(h]”jòþah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j ÿh´M©hjôþh²hubj4)�”}”(hhh]”jM)�”}”(hŒ'recalculate the block usage of an inode”h]”hŒ'recalculate the block usage of an inode”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M©hj%h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjôþh²hh³j ÿh´M©ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj@jHj@jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``struct inode *inode`` inode to recalc ``long alloced`` the change in number of pages allocated to inode ``long swapped`` the change in number of pages swapped from inode **Description** We have to calculate the free blocks since the mm can drop undirtied hole pages behind our back. But normally info->alloced == inode->i_mapping->nrpages + info->swapped So mm freed is info->alloced - (inode->i_mapping->nrpages + info->swapped) **Return** true if swapped was incremented from 0, for shmem_writeout().”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjJh]”hŒ Parameters”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjHubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M­hjDubj¤)�”}”(hhh]”(j©)�”}”(hŒ(``struct inode *inode`` inode to recalc ”h]”(j¯)�”}”(hŒ``struct inode *inode``”h]”jS)�”}”(hjih]”hŒstruct inode *inode”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjgubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MªhjcubjÉ)�”}”(hhh]”jM)�”}”(hŒinode to recalc”h]”hŒinode to recalc”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j~h´Mªhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjcubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j~h´Mªhj`ubj©)�”}”(hŒB``long alloced`` the change in number of pages allocated to inode ”h]”(j¯)�”}”(hŒ``long alloced``”h]”jS)�”}”(hj¢h]”hŒ long alloced”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M«hjœubjÉ)�”}”(hhh]”jM)�”}”(hŒ0the change in number of pages allocated to inode”h]”hŒ0the change in number of pages allocated to inode”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j·h´M«hj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjœubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j·h´M«hj`ubj©)�”}”(hŒB``long swapped`` the change in number of pages swapped from inode ”h]”(j¯)�”}”(hŒ``long swapped``”h]”jS)�”}”(hjÛh]”hŒ long swapped”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M¬hjÕubjÉ)�”}”(hhh]”jM)�”}”(hŒ0the change in number of pages swapped from inode”h]”hŒ0the change in number of pages swapped from inode”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jðh´M¬hjñubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jðh´M¬hj`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjDubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M®hjDubjM)�”}”(hŒ`We have to calculate the free blocks since the mm can drop undirtied hole pages behind our back.”h]”hŒ`We have to calculate the free blocks since the mm can drop undirtied hole pages behind our back.”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M­hjDubjM)�”}”(hŒ”But normally info->alloced == inode->i_mapping->nrpages + info->swapped So mm freed is info->alloced - (inode->i_mapping->nrpages + info->swapped)”h]”hŒ”But normally info->alloced == inode->i_mapping->nrpages + info->swapped So mm freed is info->alloced - (inode->i_mapping->nrpages + info->swapped)”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M°hjDubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjLh]”hŒReturn”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjJubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M³hjDubjM)�”}”(hŒ=true if swapped was incremented from 0, for shmem_writeout().”h]”hŒ=true if swapped was incremented from 0, for shmem_writeout().”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M´hjDubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒshmem_writeout (C function)”Œc.shmem_writeout”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ_int shmem_writeout (struct swap_io_ctx *ctx, struct folio *folio, struct list_head *folio_list)”h]”hù)�”}”(hŒ^int shmem_writeout(struct swap_io_ctx *ctx, struct folio *folio, struct list_head *folio_list)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj�h²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M@ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�h²hh³jŸh´M@ubhÿ)�”}”(hŒshmem_writeout”h]”j)�”}”(hŒshmem_writeout”h]”hŒshmem_writeout”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj®ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj�h²hh³jŸh´M@ubj )�”}”(hŒL(struct swap_io_ctx *ctx, struct folio *folio, struct list_head *folio_list)”h]”(j )�”}”(hŒstruct swap_io_ctx *ctx”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÊubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÊubh)�”}”(hhh]”j)�”}”(hŒ swap_io_ctx”h]”hŒ swap_io_ctx”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjéubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jîŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj´sbŒc.shmem_writeout”†”asbuh1hhjÊubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÊubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÊubj)�”}”(hŒctx”h]”hŒctx”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÊubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÆubj )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj<ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj<ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj[ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j`Œmodname”NŒ classname”Njpjs)�”}”jv]”jŒc.shmem_writeout”†”asbuh1hhj<ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj<ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj<ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÆubj )�”}”(hŒstruct list_head *folio_list”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¬ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¬ubh)�”}”(hhh]”j)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjËubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÐŒmodname”NŒ classname”Njpjs)�”}”jv]”jŒc.shmem_writeout”†”asbuh1hhj¬ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¬ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¬ubj)�”}”(hŒ folio_list”h]”hŒ folio_list”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¬ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÆubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj�h²hh³jŸh´M@ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj‰h²hh³jŸh´M@ubah}”(h]”j„ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jŸh´M@hj†h²hubj4)�”}”(hhh]”jM)�”}”(hŒWrite the folio to swap”h]”hŒWrite the folio to swap”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M@hj.h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj†h²hh³jŸh´M@ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjIjHjIjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒù**Parameters** ``struct swap_io_ctx *ctx`` swap I/O context ``struct folio *folio`` The folio to write ``struct list_head *folio_list`` list to put back folios on split **Description** Move the folio from the page cache to the swap cache.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjSh]”hŒ Parameters”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjQubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MDhjMubj¤)�”}”(hhh]”(j©)�”}”(hŒ-``struct swap_io_ctx *ctx`` swap I/O context ”h]”(j¯)�”}”(hŒ``struct swap_io_ctx *ctx``”h]”jS)�”}”(hjrh]”hŒstruct swap_io_ctx *ctx”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjpubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MAhjlubjÉ)�”}”(hhh]”jM)�”}”(hŒswap I/O context”h]”hŒswap I/O context”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‡h´MAhjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjlubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‡h´MAhjiubj©)�”}”(hŒ+``struct folio *folio`` The folio to write ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj«h]”hŒstruct folio *folio”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MBhj¥ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to write”h]”hŒThe folio to write”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÀh´MBhjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÀh´MBhjiubj©)�”}”(hŒB``struct list_head *folio_list`` list to put back folios on split ”h]”(j¯)�”}”(hŒ ``struct list_head *folio_list``”h]”jS)�”}”(hjäh]”hŒstruct list_head *folio_list”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjâubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MChjÞubjÉ)�”}”(hhh]”jM)�”}”(hŒ list to put back folios on split”h]”hŒ list to put back folios on split”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jùh´MChjúubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jùh´MChjiubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjMubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjh]”hŒ Description”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MEhjMubjM)�”}”(hŒ5Move the folio from the page cache to the swap cache.”h]”hŒ5Move the folio from the page cache to the swap cache.”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MDhjMubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒshmem_get_folio (C function)”Œc.shmem_get_folio”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒtint shmem_get_folio (struct inode *inode, pgoff_t index, loff_t write_end, struct folio **foliop, enum sgp_type sgp)”h]”hù)�”}”(hŒsint shmem_get_folio(struct inode *inode, pgoff_t index, loff_t write_end, struct folio **foliop, enum sgp_type sgp)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj`h²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M3 ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj`h²hh³jrh´M3 ubhÿ)�”}”(hŒshmem_get_folio”h]”j)�”}”(hŒshmem_get_folio”h]”hŒshmem_get_folio”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj`h²hh³jrh´M3 ubj )�”}”(hŒ`(struct inode *inode, pgoff_t index, loff_t write_end, struct folio **foliop, enum sgp_type sgp)”h]”(j )�”}”(hŒstruct inode *inode”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�ubh)�”}”(hhh]”j)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¼ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÁŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj‡sbŒc.shmem_get_folio”†”asbuh1hhj�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj�ubj)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj™ubj )�”}”(hŒ pgoff_t index”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jŒmodname”NŒ classname”Njpjs)�”}”jv]”jÛŒc.shmem_get_folio”†”asbuh1hhjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj™ubj )�”}”(hŒloff_t write_end”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj[ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j`Œmodname”NŒ classname”Njpjs)�”}”jv]”jÛŒc.shmem_get_folio”†”asbuh1hhjWubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjWubj)�”}”(hŒ write_end”h]”hŒ write_end”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjWubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj™ubj )�”}”(hŒstruct folio **foliop”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjŸubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŸubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÃŒmodname”NŒ classname”Njpjs)�”}”jv]”jÛŒc.shmem_get_folio”†”asbuh1hhjŸubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŸubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjŸubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjŸubj)�”}”(hŒfoliop”h]”hŒfoliop”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŸubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj™ubj )�”}”(hŒenum sgp_type sgp”h]”(j5)�”}”(hj‘ôh]”hŒenum”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubh)�”}”(hhh]”j)�”}”(hŒsgp_type”h]”hŒsgp_type”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j@Œmodname”NŒ classname”Njpjs)�”}”jv]”jÛŒc.shmem_get_folio”†”asbuh1hhjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubj)�”}”(hŒsgp”h]”hŒsgp”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj™ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj`h²hh³jrh´M3 ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj\h²hh³jrh´M3 ubah}”(h]”jWah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jrh´M3 hjYh²hubj4)�”}”(hhh]”jM)�”}”(hŒfind, and lock a shmem folio.”h]”hŒfind, and lock a shmem folio.”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M3 hj‘h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjYh²hh³jrh´M3 ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¬jHj¬jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXü**Parameters** ``struct inode *inode`` inode to search ``pgoff_t index`` the page index. ``loff_t write_end`` end of a write, could extend inode size ``struct folio **foliop`` pointer to the folio if found ``enum sgp_type sgp`` SGP_* flags to control behavior **Description** Looks up the page cache entry at **inode** & **index**. If a folio is present, it is returned locked with an increased refcount. If the caller modifies data in the folio, it must call folio_mark_dirty() before unlocking the folio to ensure that the folio is not reclaimed. There is no need to reserve space before calling folio_mark_dirty(). When no folio is found, the behavior depends on **sgp**: - for SGP_READ, ***foliop** is ``NULL`` and 0 is returned - for SGP_NOALLOC, ***foliop** is ``NULL`` and -ENOENT is returned - for all other flags a new folio is allocated, inserted into the page cache and returned locked in **foliop**. **Context** May sleep. **Return** 0 if successful, else a negative error code.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¶h]”hŒ Parameters”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M7 hj°ubj¤)�”}”(hhh]”(j©)�”}”(hŒ(``struct inode *inode`` inode to search ”h]”(j¯)�”}”(hŒ``struct inode *inode``”h]”jS)�”}”(hjÕh]”hŒstruct inode *inode”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M4 hjÏubjÉ)�”}”(hhh]”jM)�”}”(hŒinode to search”h]”hŒinode to search”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jêh´M4 hjëubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jêh´M4 hjÌubj©)�”}”(hŒ"``pgoff_t index`` the page index. ”h]”(j¯)�”}”(hŒ``pgoff_t index``”h]”jS)�”}”(hjh]”hŒ pgoff_t index”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M5 hjubjÉ)�”}”(hhh]”jM)�”}”(hŒthe page index.”h]”hŒthe page index.”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j#h´M5 hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j#h´M5 hjÌubj©)�”}”(hŒ=``loff_t write_end`` end of a write, could extend inode size ”h]”(j¯)�”}”(hŒ``loff_t write_end``”h]”jS)�”}”(hjGh]”hŒloff_t write_end”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M6 hjAubjÉ)�”}”(hhh]”jM)�”}”(hŒ'end of a write, could extend inode size”h]”hŒ'end of a write, could extend inode size”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j\h´M6 hj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjAubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j\h´M6 hjÌubj©)�”}”(hŒ8``struct folio **foliop`` pointer to the folio if found ”h]”(j¯)�”}”(hŒ``struct folio **foliop``”h]”jS)�”}”(hj€h]”hŒstruct folio **foliop”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M7 hjzubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to the folio if found”h]”hŒpointer to the folio if found”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j•h´M7 hj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjzubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j•h´M7 hjÌubj©)�”}”(hŒ6``enum sgp_type sgp`` SGP_* flags to control behavior ”h]”(j¯)�”}”(hŒ``enum sgp_type sgp``”h]”jS)�”}”(hj¹h]”hŒenum sgp_type sgp”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M8 hj³ubjÉ)�”}”(hhh]”jM)�”}”(hŒSGP_* flags to control behavior”h]”hŒSGP_* flags to control behavior”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÎh´M8 hjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÎh´M8 hjÌubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj°ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjôh]”hŒ Description”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjòubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M: hj°ubjM)�”}”(hŒ�Looks up the page cache entry at **inode** & **index**. If a folio is present, it is returned locked with an increased refcount.”h]”(hŒ!Looks up the page cache entry at ”…”�”}”(hj h²hh³Nh´NubjŽ)�”}”(hŒ **inode**”h]”hŒinode”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ubhŒ & ”…”�”}”(hj h²hh³Nh´NubjŽ)�”}”(hŒ **index**”h]”hŒindex”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ubhŒK. If a folio is present, it is returned locked with an increased refcount.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M9 hj°ubjM)�”}”(hŒÔIf the caller modifies data in the folio, it must call folio_mark_dirty() before unlocking the folio to ensure that the folio is not reclaimed. There is no need to reserve space before calling folio_mark_dirty().”h]”hŒÔIf the caller modifies data in the folio, it must call folio_mark_dirty() before unlocking the folio to ensure that the folio is not reclaimed. There is no need to reserve space before calling folio_mark_dirty().”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M< hj°ubj¤)�”}”(hhh]”j©)�”}”(hX(When no folio is found, the behavior depends on **sgp**: - for SGP_READ, ***foliop** is ``NULL`` and 0 is returned - for SGP_NOALLOC, ***foliop** is ``NULL`` and -ENOENT is returned - for all other flags a new folio is allocated, inserted into the page cache and returned locked in **foliop**. ”h]”(j¯)�”}”(hŒ8When no folio is found, the behavior depends on **sgp**:”h]”(hŒ0When no folio is found, the behavior depends on ”…”�”}”(hjSh²hh³Nh´NubjŽ)�”}”(hŒ**sgp**”h]”hŒsgp”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjSubhŒ:”…”�”}”(hjSh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MD hjOubjÉ)�”}”(hhh]”jaW)�”}”(hhh]”(jÕ/)�”}”(hŒ7for SGP_READ, ***foliop** is ``NULL`` and 0 is returned”h]”jM)�”}”(hj|h]”(hŒfor SGP_READ, ”…”�”}”(hj~h²hh³Nh´NubjŽ)�”}”(hŒ ***foliop**”h]”hŒ*foliop”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj~ubhŒ is ”…”�”}”(hj~h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj~ubhŒ and 0 is returned”…”�”}”(hj~h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MA hjzubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjwubjÕ/)�”}”(hŒ@for SGP_NOALLOC, ***foliop** is ``NULL`` and -ENOENT is returned”h]”jM)�”}”(hj¸h]”(hŒfor SGP_NOALLOC, ”…”�”}”(hjºh²hh³Nh´NubjŽ)�”}”(hŒ ***foliop**”h]”hŒ*foliop”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjºubhŒ is ”…”�”}”(hjºh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjºubhŒ and -ENOENT is returned”…”�”}”(hjºh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MB hj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjwubjÕ/)�”}”(hŒnfor all other flags a new folio is allocated, inserted into the page cache and returned locked in **foliop**. ”h]”jM)�”}”(hŒmfor all other flags a new folio is allocated, inserted into the page cache and returned locked in **foliop**.”h]”(hŒbfor all other flags a new folio is allocated, inserted into the page cache and returned locked in ”…”�”}”(hjöh²hh³Nh´NubjŽ)�”}”(hŒ **foliop**”h]”hŒfoliop”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjöubhŒ.”…”�”}”(hjöh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MC hjòubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjwubeh}”(h]”h ]”h"]”h$]”h&]”jƒWj„Wuh1j`Wh³j¯h´MA hjtubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjOubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jsh´MD hjLubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj°ubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hj7 h]”hŒContext”…”�”}”(hj9 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj5 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MF hj°ubjM)�”}”(hŒ May sleep.”h]”hŒ May sleep.”…”�”}”(hjM h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MG hj°ubjM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MI hj°ubjM)�”}”(hŒ,0 if successful, else a negative error code.”h]”hŒ,0 if successful, else a negative error code.”…”�”}”(hjt h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MH hj°ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$shmem_kernel_file_setup (C function)”Œc.shmem_kernel_file_setup”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒXstruct file * shmem_kernel_file_setup (const char *name, loff_t size, vma_flags_t flags)”h]”hù)�”}”(hŒVstruct file *shmem_kernel_file_setup(const char *name, loff_t size, vma_flags_t flags)”• h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj£ h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjŸ h²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MÚubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj± h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŸ h²hh³j° h´MÚubh)�”}”(hhh]”j)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¿ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÄ Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒshmem_kernel_file_setup”sbŒc.shmem_kernel_file_setup”†”asbuh1hhjŸ h²hh³j° h´MÚubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjã h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŸ h²hh³j° h´MÚubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjñ h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjŸ h²hh³j° h´MÚubhÿ)�”}”(hŒshmem_kernel_file_setup”h]”j)�”}”(hjà h]”hŒshmem_kernel_file_setup”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjþ ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjŸ h²hh³j° h´MÚubj )�”}”(hŒ2(const char *name, loff_t size, vma_flags_t flags)”h]”(j )�”}”(hŒconst char *name”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj* h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj ubjµ)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjF h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjT h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj ubj)�”}”(hŒname”h]”hŒname”…”�”}”(hja h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj ubj )�”}”(hŒ loff_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj} h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjz ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j Œmodname”NŒ classname”Njpjs)�”}”jv]”jÞ Œc.shmem_kernel_file_setup”†”asbuh1hhjv ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj› h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjv ubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj© h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjv ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj ubj )�”}”(hŒvma_flags_t flags”h]”(h)�”}”(hhh]”j)�”}”(hŒ vma_flags_t”h]”hŒ vma_flags_t”…”�”}”(hjÅ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÇ Œmodname”NŒ classname”Njpjs)�”}”jv]”jÞ Œc.shmem_kernel_file_setup”†”asbuh1hhj¾ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjã h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¾ ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjñ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjŸ h²hh³j° h´MÚubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj› h²hh³j° h´MÚubah}”(h]”j– ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j° h´MÚhj˜ h²hubj4)�”}”(hhh]”jM)�”}”(hXCget an unlinked file living in tmpfs which must be kernel internal. There will be NO LSM permission checks against the underlying inode. So users of this interface must do LSM checks at a higher layer. The users are the big_key and shm implementations. LSM checks are provided at the key or shm level rather than the inode.”h]”hXCget an unlinked file living in tmpfs which must be kernel internal. There will be NO LSM permission checks against the underlying inode. So users of this interface must do LSM checks at a higher layer. The users are the big_key and shm implementations. LSM checks are provided at the key or shm level rather than the inode.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MÚhj h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj˜ h²hh³j° h´MÚubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj3 jHj3 jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒå**Parameters** ``const char *name`` name for dentry (to be seen in /proc//maps) ``loff_t size`` size to be set for the file ``vma_flags_t flags`` VMA_NORESERVE_BIT suppresses pre-accounting of the entire object size”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj= h]”hŒ Parameters”…”�”}”(hj? h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj; ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MÞhj7 ubj¤)�”}”(hhh]”(j©)�”}”(hŒF``const char *name`` name for dentry (to be seen in /proc//maps) ”h]”(j¯)�”}”(hŒ``const char *name``”h]”jS)�”}”(hj\ h]”hŒconst char *name”…”�”}”(hj^ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjZ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MßhjV ubjÉ)�”}”(hhh]”jM)�”}”(hŒ0name for dentry (to be seen in /proc//maps)”h]”hŒ0name for dentry (to be seen in /proc//maps)”…”�”}”(hju h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jq h´Mßhjr ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjV ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jq h´MßhjS ubj©)�”}”(hŒ,``loff_t size`` size to be set for the file ”h]”(j¯)�”}”(hŒ``loff_t size``”h]”jS)�”}”(hj• h]”hŒ loff_t size”…”�”}”(hj— h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj“ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´Màhj� ubjÉ)�”}”(hhh]”jM)�”}”(hŒsize to be set for the file”h]”hŒsize to be set for the file”…”�”}”(hj® h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jª h´Màhj« ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj� ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jª h´MàhjS ubj©)�”}”(hŒ[``vma_flags_t flags`` VMA_NORESERVE_BIT suppresses pre-accounting of the entire object size”h]”(j¯)�”}”(hŒ``vma_flags_t flags``”h]”jS)�”}”(hjÎ h]”hŒvma_flags_t flags”…”�”}”(hjÐ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÌ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MâhjÈ ubjÉ)�”}”(hhh]”jM)�”}”(hŒEVMA_NORESERVE_BIT suppresses pre-accounting of the entire object size”h]”hŒEVMA_NORESERVE_BIT suppresses pre-accounting of the entire object size”…”�”}”(hjç h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´Máhjä ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÈ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jã h´MâhjS ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj7 ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒshmem_file_setup (C function)”Œc.shmem_file_setup”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒQstruct file * shmem_file_setup (const char *name, loff_t size, vma_flags_t flags)”h]”hù)�”}”(hŒOstruct file *shmem_file_setup(const char *name, loff_t size, vma_flags_t flags)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj$ h²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MëubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6 h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj$ h²hh³j5 h´Mëubh)�”}”(hhh]”j)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjG h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjD ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jI Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒshmem_file_setup”sbŒc.shmem_file_setup”†”asbuh1hhj$ h²hh³j5 h´MëubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj$ h²hh³j5 h´MëubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj$ h²hh³j5 h´Mëubhÿ)�”}”(hŒshmem_file_setup”h]”j)�”}”(hje h]”hŒshmem_file_setup”…”�”}”(hj‡ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjƒ ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj$ h²hh³j5 h´Mëubj )�”}”(hŒ2(const char *name, loff_t size, vma_flags_t flags)”h]”(j )�”}”(hŒconst char *name”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj¢ h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjž ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯ h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjž ubjµ)�”}”(hŒchar”h]”hŒchar”…”�”}”(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ž ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÙ h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjž ubj)�”}”(hŒname”h]”hŒname”…”�”}”(hjæ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjž ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjš ubj )�”}”(hŒ loff_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÿ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j Œmodname”NŒ classname”Njpjs)�”}”jv]”jc Œc.shmem_file_setup”†”asbuh1hhjû ubjÇ)�”}”(hŒ ”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 ]”jah"]”h$]”h&]”uh1jhjû ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjš ubj )�”}”(hŒvma_flags_t flags”h]”(h)�”}”(hhh]”j)�”}”(hŒ vma_flags_t”h]”hŒ vma_flags_t”…”�”}”(hjJ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjG ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jL Œmodname”NŒ classname”Njpjs)�”}”jv]”jc Œc.shmem_file_setup”†”asbuh1hhjC ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjC ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjC ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjš ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj$ h²hh³j5 h´Mëubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj h²hh³j5 h´Mëubah}”(h]”j ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j5 h´Mëhj h²hubj4)�”}”(hhh]”jM)�”}”(hŒ$get an unlinked file living in tmpfs”h]”hŒ$get an unlinked file living in tmpfs”…”�”}”(hj  h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´Mëhj� h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj h²hh³j5 h´Mëubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¸ jHj¸ jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒå**Parameters** ``const char *name`` name for dentry (to be seen in /proc//maps) ``loff_t size`` size to be set for the file ``vma_flags_t flags`` VMA_NORESERVE_BIT suppresses pre-accounting of the entire object size”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj h]”hŒ Parameters”…”�”}”(hjÄ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÀ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´Mïhj¼ ubj¤)�”}”(hhh]”(j©)�”}”(hŒF``const char *name`` name for dentry (to be seen in /proc//maps) ”h]”(j¯)�”}”(hŒ``const char *name``”h]”jS)�”}”(hjá h]”hŒconst char *name”…”�”}”(hjã h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjß ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MìhjÛ ubjÉ)�”}”(hhh]”jM)�”}”(hŒ0name for dentry (to be seen in /proc//maps)”h]”hŒ0name for dentry (to be seen in /proc//maps)”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jö h´Mìhj÷ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÛ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jö h´MìhjØ ubj©)�”}”(hŒ,``loff_t size`` size to be set for the file ”h]”(j¯)�”}”(hŒ``loff_t size``”h]”jS)�”}”(hjh]”hŒ loff_t size”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MíhjubjÉ)�”}”(hhh]”jM)�”}”(hŒsize to be set for the file”h]”hŒsize to be set for the file”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j/h´Míhj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j/h´MíhjØ ubj©)�”}”(hŒ[``vma_flags_t flags`` VMA_NORESERVE_BIT suppresses pre-accounting of the entire object size”h]”(j¯)�”}”(hŒ``vma_flags_t flags``”h]”jS)�”}”(hjSh]”hŒvma_flags_t flags”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MïhjMubjÉ)�”}”(hhh]”jM)�”}”(hŒEVMA_NORESERVE_BIT suppresses pre-accounting of the entire object size”h]”hŒEVMA_NORESERVE_BIT suppresses pre-accounting of the entire object size”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´Mîhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjMubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jhh´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”]”(héŒ&shmem_file_setup_with_mnt (C function)”Œc.shmem_file_setup_with_mnt”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒpstruct file * shmem_file_setup_with_mnt (struct vfsmount *mnt, const char *name, loff_t size, vma_flags_t flags)”h]”hù)�”}”(hŒnstruct file *shmem_file_setup_with_mnt(struct vfsmount *mnt, const char *name, loff_t size, vma_flags_t flags)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj©h²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M÷ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj©h²hh³jºh´M÷ubh)�”}”(hhh]”j)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÉubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÎŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒshmem_file_setup_with_mnt”sbŒc.shmem_file_setup_with_mnt”†”asbuh1hhj©h²hh³jºh´M÷ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj©h²hh³jºh´M÷ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj©h²hh³jºh´M÷ubhÿ)�”}”(hŒshmem_file_setup_with_mnt”h]”j)�”}”(hjêh]”hŒshmem_file_setup_with_mnt”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj©h²hh³jºh´M÷ubj )�”}”(hŒH(struct vfsmount *mnt, const char *name, loff_t size, vma_flags_t flags)”h]”(j )�”}”(hŒstruct vfsmount *mnt”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj#ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj#ubh)�”}”(hhh]”j)�”}”(hŒvfsmount”h]”hŒvfsmount”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjBubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jGŒmodname”NŒ classname”Njpjs)�”}”jv]”jèŒc.shmem_file_setup_with_mnt”†”asbuh1hhj#ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj#ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj#ubj)�”}”(hŒmnt”h]”hŒmnt”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjubj )�”}”(hŒconst char *name”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj“ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj“ubjµ)�”}”(hŒchar”h]”hŒchar”…”�”}”(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“ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj“ubj)�”}”(hŒname”h]”hŒname”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj“ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjubj )�”}”(hŒ loff_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjôubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jùŒmodname”NŒ classname”Njpjs)�”}”jv]”jèŒc.shmem_file_setup_with_mnt”†”asbuh1hhjðubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjðubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjðubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjubj )�”}”(hŒvma_flags_t flags”h]”(h)�”}”(hhh]”j)�”}”(hŒ vma_flags_t”h]”hŒ vma_flags_t”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jAŒmodname”NŒ classname”Njpjs)�”}”jv]”jèŒc.shmem_file_setup_with_mnt”†”asbuh1hhj8ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj8ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj8ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj©h²hh³jºh´M÷ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¥h²hh³jºh´M÷ubah}”(h]”j ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jºh´M÷hj¢h²hubj4)�”}”(hhh]”jM)�”}”(hŒ$get an unlinked file living in tmpfs”h]”hŒ$get an unlinked file living in tmpfs”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M÷hj’h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¢h²hh³jºh´M÷ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj­jHj­jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX0**Parameters** ``struct vfsmount *mnt`` the tmpfs mount where the file will be created ``const char *name`` name for dentry (to be seen in /proc//maps) ``loff_t size`` size to be set for the file ``vma_flags_t flags`` VMA_NORESERVE_BIT suppresses pre-accounting of the entire object size”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj·h]”hŒ Parameters”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjµubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´Mûhj±ubj¤)�”}”(hhh]”(j©)�”}”(hŒH``struct vfsmount *mnt`` the tmpfs mount where the file will be created ”h]”(j¯)�”}”(hŒ``struct vfsmount *mnt``”h]”jS)�”}”(hjÖh]”hŒstruct vfsmount *mnt”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MøhjÐubjÉ)�”}”(hhh]”jM)�”}”(hŒ.the tmpfs mount where the file will be created”h]”hŒ.the tmpfs mount where the file will be created”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jëh´Møhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jëh´MøhjÍubj©)�”}”(hŒF``const char *name`` name for dentry (to be seen in /proc//maps) ”h]”(j¯)�”}”(hŒ``const char *name``”h]”jS)�”}”(hjh]”hŒconst char *name”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´Mùhj ubjÉ)�”}”(hhh]”jM)�”}”(hŒ0name for dentry (to be seen in /proc//maps)”h]”hŒ0name for dentry (to be seen in /proc//maps)”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j$h´Mùhj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j$h´MùhjÍubj©)�”}”(hŒ,``loff_t size`` size to be set for the file ”h]”(j¯)�”}”(hŒ``loff_t size``”h]”jS)�”}”(hjHh]”hŒ loff_t size”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjFubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MúhjBubjÉ)�”}”(hhh]”jM)�”}”(hŒsize to be set for the file”h]”hŒsize to be set for the file”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j]h´Múhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjBubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j]h´MúhjÍubj©)�”}”(hŒ[``vma_flags_t flags`` VMA_NORESERVE_BIT suppresses pre-accounting of the entire object size”h]”(j¯)�”}”(hŒ``vma_flags_t flags``”h]”jS)�”}”(hj�h]”hŒvma_flags_t flags”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´Mühj{ubjÉ)�”}”(hhh]”jM)�”}”(hŒEVMA_NORESERVE_BIT suppresses pre-accounting of the entire object size”h]”hŒEVMA_NORESERVE_BIT suppresses pre-accounting of the entire object size”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´Mûhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³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”]”(héŒshmem_zero_setup (C function)”Œc.shmem_zero_setup”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ1int shmem_zero_setup (struct vm_area_struct *vma)”h]”hù)�”}”(hŒ0int shmem_zero_setup(struct vm_area_struct *vma)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj×h²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj×h²hh³jéh´Mubhÿ)�”}”(hŒshmem_zero_setup”h]”j)�”}”(hŒshmem_zero_setup”h]”hŒshmem_zero_setup”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjøubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj×h²hh³jéh´Mubj )�”}”(hŒ(struct vm_area_struct *vma)”h]”j )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j8Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljþsbŒc.shmem_zero_setup”†”asbuh1hhjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj×h²hh³jéh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÓh²hh³jéh´Mubah}”(h]”jÎah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jéh´MhjÐh²hubj4)�”}”(hhh]”jM)�”}”(hŒ setup a shared anonymous mapping”h]”hŒ setup a shared anonymous mapping”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´Mhj˜h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÐh²hh³jéh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj³jHj³jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ�**Parameters** ``struct vm_area_struct *vma`` the vma to be mmapped is prepared by do_mmap **Return** 0 on success, or error”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj½h]”hŒ Parameters”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´Mhj·ubj¤)�”}”(hhh]”j©)�”}”(hŒL``struct vm_area_struct *vma`` the vma to be mmapped is prepared by do_mmap ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hjÜh]”hŒstruct vm_area_struct *vma”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MhjÖubjÉ)�”}”(hhh]”jM)�”}”(hŒ,the vma to be mmapped is prepared by do_mmap”h]”hŒ,the vma to be mmapped is prepared by do_mmap”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jñh´Mhjòubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jñh´MhjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj·ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjh]”hŒReturn”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´Mhj·ubjM)�”}”(hŒ0 on success, or error”h]”hŒ0 on success, or error”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´Mhj·ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"shmem_zero_setup_desc (C function)”Œc.shmem_zero_setup_desc”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ5int shmem_zero_setup_desc (struct vm_area_desc *desc)”h]”hù)�”}”(hŒ4int shmem_zero_setup_desc(struct vm_area_desc *desc)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjXh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M'ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjXh²hh³jjh´M'ubhÿ)�”}”(hŒshmem_zero_setup_desc”h]”j)�”}”(hŒshmem_zero_setup_desc”h]”hŒshmem_zero_setup_desc”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjyubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjXh²hh³jjh´M'ubj )�”}”(hŒ(struct vm_area_desc *desc)”h]”j )�”}”(hŒstruct vm_area_desc *desc”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj•ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj•ubh)�”}”(hhh]”j)�”}”(hŒ vm_area_desc”h]”hŒ vm_area_desc”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj´ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¹Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljsbŒc.shmem_zero_setup_desc”†”asbuh1hhj•ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj•ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj•ubj)�”}”(hŒdesc”h]”hŒdesc”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj•ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‘ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjXh²hh³jjh´M'ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjTh²hh³jjh´M'ubah}”(h]”jOah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jjh´M'hjQh²hubj4)�”}”(hhh]”jM)�”}”(hŒKsame as shmem_zero_setup, but determined by VMA descriptor for convenience.”h]”hŒKsame as shmem_zero_setup, but determined by VMA descriptor for convenience.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M'hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjQh²hh³jjh´M'ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj4jHj4jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒa**Parameters** ``struct vm_area_desc *desc`` Describes VMA **Return** 0 on success, or error”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj>h]”hŒ Parameters”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M+hj8ubj¤)�”}”(hhh]”j©)�”}”(hŒ,``struct vm_area_desc *desc`` Describes VMA ”h]”(j¯)�”}”(hŒ``struct vm_area_desc *desc``”h]”jS)�”}”(hj]h]”hŒstruct vm_area_desc *desc”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M)hjWubjÉ)�”}”(hhh]”jM)�”}”(hŒ Describes VMA”h]”hŒ Describes VMA”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jrh´M)hjsubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjWubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jrh´M)hjTubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj8ubjM)�”}”(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&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M+hj8ubjM)�”}”(hŒ0 on success, or error”h]”hŒ0 on success, or error”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M*hj8ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!shmem_read_folio_gfp (C function)”Œc.shmem_read_folio_gfp”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ]struct folio * shmem_read_folio_gfp (struct address_space *mapping, pgoff_t index, gfp_t gfp)”h]”hù)�”}”(hŒ[struct folio *shmem_read_folio_gfp(struct address_space *mapping, pgoff_t index, gfp_t gfp)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÙh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M:ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÙh²hh³jêh´M:ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jþŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒshmem_read_folio_gfp”sbŒc.shmem_read_folio_gfp”†”asbuh1hhjÙh²hh³jêh´M:ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÙh²hh³jêh´M:ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÙh²hh³jêh´M:ubhÿ)�”}”(hŒshmem_read_folio_gfp”h]”j)�”}”(hjh]”hŒshmem_read_folio_gfp”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj8ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÙh²hh³jêh´M:ubj )�”}”(hŒ9(struct address_space *mapping, pgoff_t index, gfp_t gfp)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjSubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjSubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjrubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jwŒmodname”NŒ classname”Njpjs)�”}”jv]”jŒc.shmem_read_folio_gfp”†”asbuh1hhjSubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjSubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjSubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjSubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjOubj )�”}”(hŒ pgoff_t index”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÇubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÌŒmodname”NŒ classname”Njpjs)�”}”jv]”jŒc.shmem_read_folio_gfp”†”asbuh1hhjÃubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÃubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÃubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjOubj )�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jŒmodname”NŒ classname”Njpjs)�”}”jv]”jŒc.shmem_read_folio_gfp”†”asbuh1hhj ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj ubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjOubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÙh²hh³jêh´M:ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÕh²hh³jêh´M:ubah}”(h]”jÐah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jêh´M:hjÒh²hubj4)�”}”(hhh]”jM)�”}”(hŒread_folio() method: which does not suit tmpfs, since it may have pages in swapcache, and needs to find those for itself; although drivers/gpu/drm i915 and ttm rely upon this support. i915_gem_object_get_pages_gtt() mixes __GFP_NORETRY | __GFP_NOWARN in with the mapping_gfp_mask(), to avoid OOMing the machine unnecessarily.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjŠh]”hŒ Parameters”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M>hj„ubj¤)�”}”(hhh]”(j©)�”}”(hŒ<``struct address_space *mapping`` the folio's address_space ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj©h]”hŒstruct address_space *mapping”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M;hj£ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe folio's address_space”h]”hŒthe folio’s address_space”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¾h´M;hj¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¾h´M;hj ubj©)�”}”(hŒ"``pgoff_t index`` the folio index ”h]”(j¯)�”}”(hŒ``pgoff_t index``”h]”jS)�”}”(hjâh]”hŒ pgoff_t index”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M<hjÜubjÉ)�”}”(hhh]”jM)�”}”(hŒthe folio index”h]”hŒthe folio index”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j÷h´M<hjøubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j÷h´M<hj ubj©)�”}”(hŒ<``gfp_t gfp`` the page allocator flags to use if allocating ”h]”(j¯)�”}”(hŒ ``gfp_t gfp``”h]”jS)�”}”(hjh]”hŒ gfp_t gfp”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M=hjubjÉ)�”}”(hhh]”jM)�”}”(hŒ-the page allocator flags to use if allocating”h]”hŒ-the page allocator flags to use if allocating”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j0h´M=hj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j0h´M=hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj„ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjVh]”hŒ Description”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjTubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M?hj„ubjM)�”}”(hXiThis behaves as a tmpfs "read_cache_page_gfp(mapping, index, gfp)", with any new page allocations done using the specified allocation flags. But read_cache_page_gfp() uses the ->read_folio() method: which does not suit tmpfs, since it may have pages in swapcache, and needs to find those for itself; although drivers/gpu/drm i915 and ttm rely upon this support.”h]”hXmThis behaves as a tmpfs “read_cache_page_gfp(mapping, index, gfp)â€�, with any new page allocations done using the specified allocation flags. But read_cache_page_gfp() uses the ->read_folio() method: which does not suit tmpfs, since it may have pages in swapcache, and needs to find those for itself; although drivers/gpu/drm i915 and ttm rely upon this support.”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´M>hj„ubjM)�”}”(hŒ�i915_gem_object_get_pages_gtt() mixes __GFP_NORETRY | __GFP_NOWARN in with the mapping_gfp_mask(), to avoid OOMing the machine unnecessarily.”h]”hŒ�i915_gem_object_get_pages_gtt() mixes __GFP_NORETRY | __GFP_NOWARN in with the mapping_gfp_mask(), to avoid OOMing the machine unnecessarily.”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:124: ./mm/shmem.c”h´MDhj„ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$migrate_vma_split_folio (C function)”Œc.migrate_vma_split_folio”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒJint migrate_vma_split_folio (struct folio *folio, struct page *fault_page)”h]”hù)�”}”(hŒIint migrate_vma_split_folio(struct folio *folio, struct page *fault_page)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¦h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´KLubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¦h²hh³j¸h´KLubhÿ)�”}”(hŒmigrate_vma_split_folio”h]”j)�”}”(hŒmigrate_vma_split_folio”h]”hŒmigrate_vma_split_folio”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÇubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¦h²hh³j¸h´KLubj )�”}”(hŒ.(struct folio *folio, struct page *fault_page)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjãubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjãubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÍsbŒc.migrate_vma_split_folio”†”asbuh1hhjãubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjãubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjãubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjßubj )�”}”(hŒstruct page *fault_page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjUubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjUubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjtubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jyŒmodname”NŒ classname”Njpjs)�”}”jv]”j!Œc.migrate_vma_split_folio”†”asbuh1hhjUubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjUubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjUubj)�”}”(hŒ fault_page”h]”hŒ fault_page”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjUubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjßubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¦h²hh³j¸h´KLubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¢h²hh³j¸h´KLubah}”(h]”j�ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¸h´KLhjŸh²hubj4)�”}”(hhh]”jM)�”}”(hŒ$Helper function to split a THP folio”h]”hŒ$Helper function to split a THP folio”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´KLhj×h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjŸh²hh³j¸h´KLubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjòjHjòjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX<**Parameters** ``struct folio *folio`` the folio to split ``struct page *fault_page`` struct page associated with the fault if any **Description** If **folio** is not the folio containing **fault_page**, the caller must hold a reference on **folio**. The helper consumes that reference. Returns 0 on success”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjüh]”hŒ Parameters”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjúubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´KPhjöubj¤)�”}”(hhh]”(j©)�”}”(hŒ+``struct folio *folio`` the folio to split ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjh]”hŒstruct folio *folio”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´KMhjubjÉ)�”}”(hhh]”jM)�”}”(hŒthe folio to split”h]”hŒthe folio to split”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j0h´KMhj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j0h´KMhjubj©)�”}”(hŒI``struct page *fault_page`` struct page associated with the fault if any ”h]”(j¯)�”}”(hŒ``struct page *fault_page``”h]”jS)�”}”(hjTh]”hŒstruct page *fault_page”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjRubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´KNhjNubjÉ)�”}”(hhh]”jM)�”}”(hŒ,struct page associated with the fault if any”h]”hŒ,struct page associated with the fault if any”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jih´KNhjjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjNubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jih´KNhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjöubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj�h]”hŒ Description”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´KPhjöubjM)�”}”(hŒ‹If **folio** is not the folio containing **fault_page**, the caller must hold a reference on **folio**. The helper consumes that reference.”h]”(hŒIf ”…”�”}”(hj¥h²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¥ubhŒ is not the folio containing ”…”�”}”(hj¥h²hh³Nh´NubjŽ)�”}”(hŒ**fault_page**”h]”hŒ fault_page”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¥ubhŒ&, the caller must hold a reference on ”…”�”}”(hj¥h²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¥ubhŒ%. The helper consumes that reference.”…”�”}”(hj¥h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´KOhjöubjM)�”}”(hŒReturns 0 on success”h]”hŒReturns 0 on success”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´KRhjöubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmigrate_vma_setup (C function)”Œc.migrate_vma_setup”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ0int migrate_vma_setup (struct migrate_vma *args)”h]”hù)�”}”(hŒ/int migrate_vma_setup(struct migrate_vma *args)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´M¥ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjh²hh³j'h´M¥ubhÿ)�”}”(hŒmigrate_vma_setup”h]”j)�”}”(hŒmigrate_vma_setup”h]”hŒmigrate_vma_setup”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj6ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjh²hh³j'h´M¥ubj )�”}”(hŒ(struct migrate_vma *args)”h]”j )�”}”(hŒstruct migrate_vma *args”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjRubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjRubh)�”}”(hhh]”j)�”}”(hŒ migrate_vma”h]”hŒ migrate_vma”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjqubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jvŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj<sbŒc.migrate_vma_setup”†”asbuh1hhjRubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjRubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjRubj)�”}”(hŒargs”h]”hŒargs”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjNubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjh²hh³j'h´M¥ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjh²hh³j'h´M¥ubah}”(h]”j ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j'h´M¥hjh²hubj4)�”}”(hhh]”jM)�”}”(hŒ$prepare to migrate a range of memory”h]”hŒ$prepare to migrate a range of memory”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´M¥hjÖh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjh²hh³j'h´M¥ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjñjHjñjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX� **Parameters** ``struct migrate_vma *args`` contains the vma, start, and pfns arrays for the migration **Return** negative errno on failures, 0 when 0 or more pages were migrated without an error. **Description** Prepare to migrate a range of memory virtual address range by collecting all the pages backing each virtual address in the range, saving them inside the src array. Then lock those pages and unmap them. Once the pages are locked and unmapped, check whether each page is pinned or not. Pages that aren't pinned have the MIGRATE_PFN_MIGRATE flag set (by this function) in the corresponding src array entry. Then restores any pages that are pinned, by remapping and unlocking those pages. The caller should then allocate destination memory and copy source memory to it for all those entries (ie with MIGRATE_PFN_VALID and MIGRATE_PFN_MIGRATE flag set). Once these are allocated and copied, the caller must update each corresponding entry in the dst array with the pfn value of the destination page and with MIGRATE_PFN_VALID. Destination pages must be locked via lock_page(). Note that the caller does not have to migrate all the pages that are marked with MIGRATE_PFN_MIGRATE flag in src array unless this is a migration from device memory to system memory. If the caller cannot migrate a device page back to system memory, then it must return VM_FAULT_SIGBUS, which has severe consequences for the userspace process, so it must be avoided if at all possible. For empty entries inside CPU page table (pte_none() or pmd_none() is true) we do set MIGRATE_PFN_MIGRATE flag inside the corresponding source array thus allowing the caller to allocate device memory for those unbacked virtual addresses. For this the caller simply has to allocate device memory and properly set the destination entry like for regular migration. Note that this can still fail, and thus inside the device driver you must check if the migration was successful for those entries after calling migrate_vma_pages(), just like for regular migration. After that, the callers must call migrate_vma_pages() to go over each entry in the src array that has the MIGRATE_PFN_VALID and MIGRATE_PFN_MIGRATE flag set. If the corresponding entry in dst array has MIGRATE_PFN_VALID flag set, then migrate_vma_pages() to migrate struct page information from the source struct page to the destination struct page. If it fails to migrate the struct page information, then it clears the MIGRATE_PFN_MIGRATE flag in the src array. At this point all successfully migrated pages have an entry in the src array with MIGRATE_PFN_VALID and MIGRATE_PFN_MIGRATE flag set and the dst array entry with MIGRATE_PFN_VALID flag set. Once migrate_vma_pages() returns the caller may inspect which pages were successfully migrated, and which were not. Successfully migrated pages will have the MIGRATE_PFN_MIGRATE flag set for their src array entry. It is safe to update device page table after migrate_vma_pages() because both destination and source page are still locked, and the mmap_lock is held in read mode (hence no one can unmap the range being migrated). Once the caller is done cleaning up things and updating its page table (if it chose to do so, this is not an obligation) it finally calls migrate_vma_finalize() to update the CPU page table to point to new pages for successfully migrated pages or otherwise restore the CPU page table to point to the original source pages.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjûh]”hŒ Parameters”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjùubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´M©hjõubj¤)�”}”(hhh]”j©)�”}”(hŒX``struct migrate_vma *args`` contains the vma, start, and pfns arrays for the migration ”h]”(j¯)�”}”(hŒ``struct migrate_vma *args``”h]”jS)�”}”(hjh]”hŒstruct migrate_vma *args”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´M¦hjubjÉ)�”}”(hhh]”jM)�”}”(hŒ:contains the vma, start, and pfns arrays for the migration”h]”hŒ:contains the vma, start, and pfns arrays for the migration”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j/h´M¦hj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j/h´M¦hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjõubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjUh]”hŒReturn”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjSubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´M¨hjõubjM)�”}”(hŒRnegative errno on failures, 0 when 0 or more pages were migrated without an error.”h]”hŒRnegative errno on failures, 0 when 0 or more pages were migrated without an error.”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´M¨hjõubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj|h]”hŒ Description”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjzubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´M«hjõubjM)�”}”(hXçPrepare to migrate a range of memory virtual address range by collecting all the pages backing each virtual address in the range, saving them inside the src array. Then lock those pages and unmap them. Once the pages are locked and unmapped, check whether each page is pinned or not. Pages that aren't pinned have the MIGRATE_PFN_MIGRATE flag set (by this function) in the corresponding src array entry. Then restores any pages that are pinned, by remapping and unlocking those pages.”h]”hXéPrepare to migrate a range of memory virtual address range by collecting all the pages backing each virtual address in the range, saving them inside the src array. Then lock those pages and unmap them. Once the pages are locked and unmapped, check whether each page is pinned or not. Pages that aren’t pinned have the MIGRATE_PFN_MIGRATE flag set (by this function) in the corresponding src array entry. Then restores any pages that are pinned, by remapping and unlocking those pages.”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´MªhjõubjM)�”}”(hXƒThe caller should then allocate destination memory and copy source memory to it for all those entries (ie with MIGRATE_PFN_VALID and MIGRATE_PFN_MIGRATE flag set). Once these are allocated and copied, the caller must update each corresponding entry in the dst array with the pfn value of the destination page and with MIGRATE_PFN_VALID. Destination pages must be locked via lock_page().”h]”hXƒThe caller should then allocate destination memory and copy source memory to it for all those entries (ie with MIGRATE_PFN_VALID and MIGRATE_PFN_MIGRATE flag set). Once these are allocated and copied, the caller must update each corresponding entry in the dst array with the pfn value of the destination page and with MIGRATE_PFN_VALID. Destination pages must be locked via lock_page().”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´M²hjõubjM)�”}”(hX�Note that the caller does not have to migrate all the pages that are marked with MIGRATE_PFN_MIGRATE flag in src array unless this is a migration from device memory to system memory. If the caller cannot migrate a device page back to system memory, then it must return VM_FAULT_SIGBUS, which has severe consequences for the userspace process, so it must be avoided if at all possible.”h]”hX�Note that the caller does not have to migrate all the pages that are marked with MIGRATE_PFN_MIGRATE flag in src array unless this is a migration from device memory to system memory. If the caller cannot migrate a device page back to system memory, then it must return VM_FAULT_SIGBUS, which has severe consequences for the userspace process, so it must be avoided if at all possible.”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´M¹hjõubjM)�”}”(hX0For empty entries inside CPU page table (pte_none() or pmd_none() is true) we do set MIGRATE_PFN_MIGRATE flag inside the corresponding source array thus allowing the caller to allocate device memory for those unbacked virtual addresses. For this the caller simply has to allocate device memory and properly set the destination entry like for regular migration. Note that this can still fail, and thus inside the device driver you must check if the migration was successful for those entries after calling migrate_vma_pages(), just like for regular migration.”h]”hX0For empty entries inside CPU page table (pte_none() or pmd_none() is true) we do set MIGRATE_PFN_MIGRATE flag inside the corresponding source array thus allowing the caller to allocate device memory for those unbacked virtual addresses. For this the caller simply has to allocate device memory and properly set the destination entry like for regular migration. Note that this can still fail, and thus inside the device driver you must check if the migration was successful for those entries after calling migrate_vma_pages(), just like for regular migration.”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´MÀhjõubjM)�”}”(hXÐAfter that, the callers must call migrate_vma_pages() to go over each entry in the src array that has the MIGRATE_PFN_VALID and MIGRATE_PFN_MIGRATE flag set. If the corresponding entry in dst array has MIGRATE_PFN_VALID flag set, then migrate_vma_pages() to migrate struct page information from the source struct page to the destination struct page. If it fails to migrate the struct page information, then it clears the MIGRATE_PFN_MIGRATE flag in the src array.”h]”hXÐAfter that, the callers must call migrate_vma_pages() to go over each entry in the src array that has the MIGRATE_PFN_VALID and MIGRATE_PFN_MIGRATE flag set. If the corresponding entry in dst array has MIGRATE_PFN_VALID flag set, then migrate_vma_pages() to migrate struct page information from the source struct page to the destination struct page. If it fails to migrate the struct page information, then it clears the MIGRATE_PFN_MIGRATE flag in the src array.”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´MÉhjõubjM)�”}”(hŒ½At this point all successfully migrated pages have an entry in the src array with MIGRATE_PFN_VALID and MIGRATE_PFN_MIGRATE flag set and the dst array entry with MIGRATE_PFN_VALID flag set.”h]”hŒ½At this point all successfully migrated pages have an entry in the src array with MIGRATE_PFN_VALID and MIGRATE_PFN_MIGRATE flag set and the dst array entry with MIGRATE_PFN_VALID flag set.”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´MÑhjõubjM)�”}”(hŒÖOnce migrate_vma_pages() returns the caller may inspect which pages were successfully migrated, and which were not. Successfully migrated pages will have the MIGRATE_PFN_MIGRATE flag set for their src array entry.”h]”hŒÖOnce migrate_vma_pages() returns the caller may inspect which pages were successfully migrated, and which were not. Successfully migrated pages will have the MIGRATE_PFN_MIGRATE flag set for their src array entry.”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´MÕhjõubjM)�”}”(hŒÕIt is safe to update device page table after migrate_vma_pages() because both destination and source page are still locked, and the mmap_lock is held in read mode (hence no one can unmap the range being migrated).”h]”hŒÕIt is safe to update device page table after migrate_vma_pages() because both destination and source page are still locked, and the mmap_lock is held in read mode (hence no one can unmap the range being migrated).”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´MÙhjõubjM)�”}”(hXBOnce the caller is done cleaning up things and updating its page table (if it chose to do so, this is not an obligation) it finally calls migrate_vma_finalize() to update the CPU page table to point to new pages for successfully migrated pages or otherwise restore the CPU page table to point to the original source pages.”h]”hXBOnce the caller is done cleaning up things and updating its page table (if it chose to do so, this is not an obligation) it finally calls migrate_vma_finalize() to update the CPU page table to point to new pages for successfully migrated pages or otherwise restore the CPU page table to point to the original source pages.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.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”]”(héŒ-migrate_vma_insert_huge_pmd_page (C function)”Œ"c.migrate_vma_insert_huge_pmd_page”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒŠint migrate_vma_insert_huge_pmd_page (struct migrate_vma *migrate, unsigned long addr, struct page *page, unsigned long *src, pmd_t *pmdp)”h]”hù)�”}”(hŒ‰int migrate_vma_insert_huge_pmd_page(struct migrate_vma *migrate, unsigned long addr, struct page *page, unsigned long *src, pmd_t *pmdp)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj5h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj5h²hh³jGh´Mubhÿ)�”}”(hŒ migrate_vma_insert_huge_pmd_page”h]”j)�”}”(hŒ migrate_vma_insert_huge_pmd_page”h]”hŒ migrate_vma_insert_huge_pmd_page”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjVubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj5h²hh³jGh´Mubj )�”}”(hŒe(struct migrate_vma *migrate, unsigned long addr, struct page *page, unsigned long *src, pmd_t *pmdp)”h]”(j )�”}”(hŒstruct migrate_vma *migrate”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjrubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjrubh)�”}”(hhh]”j)�”}”(hŒ migrate_vma”•h]”hŒ migrate_vma”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‘ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j–Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj\sbŒ"c.migrate_vma_insert_huge_pmd_page”†”asbuh1hhjrubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjrubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjrubj)�”}”(hŒmigrate”h]”hŒmigrate”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjrubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjnubj )�”}”(hŒunsigned long addr”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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äubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjäubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjäubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjäubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjnubj )�”}”(hŒstruct page *page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj5ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj5ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjTubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jYŒmodname”NŒ classname”Njpjs)�”}”jv]”j°Œ"c.migrate_vma_insert_huge_pmd_page”†”asbuh1hhj5ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj5ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj5ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjnubj )�”}”(hŒunsigned long *src”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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¥ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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¥ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¥ubj)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjnubj )�”}”(hŒ pmd_t *pmdp”h]”(h)�”}”(hhh]”j)�”}”(hŒpmd_t”h]”hŒpmd_t”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j Œmodname”NŒ classname”Njpjs)�”}”jv]”j°Œ"c.migrate_vma_insert_huge_pmd_page”†”asbuh1hhjubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjubj)�”}”(hŒpmdp”h]”hŒpmdp”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjnubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj5h²hh³jGh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj1h²hh³jGh´Mubah}”(h]”j,ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jGh´Mhj.h²hubj4)�”}”(hhh]”jM)�”}”(hŒŒInsert a huge folio into **migrate->vma->vm_mm** at **addr**. folio is already allocated as a part of the migration process with large page.”h]”(hŒInsert a huge folio into ”…”�”}”(hjmh²hh³Nh´NubjŽ)�”}”(hŒ**migrate->vma->vm_mm**”h]”hŒmigrate->vma->vm_mm”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjmubhŒ at ”…”�”}”(hjmh²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjmubhŒP. folio is already allocated as a part of the migration process with large page.”…”�”}”(hjmh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´Mhjjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj.h²hh³jGh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj©jHj©jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXî**Parameters** ``struct migrate_vma *migrate`` migrate_vma arguments ``unsigned long addr`` address where the folio will be inserted ``struct page *page`` page to be inserted at **addr** ``unsigned long *src`` src pfn which is being migrated ``pmd_t *pmdp`` pointer to the pmd **Description** **page** needs to be initialized and setup after it's allocated. The code bits here follow closely the code in __do_huge_pmd_anonymous_page(). This API does not support THP zero pages.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj³h]”hŒ Parameters”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´Mhj­ubj¤)�”}”(hhh]”(j©)�”}”(hŒ6``struct migrate_vma *migrate`` migrate_vma arguments ”h]”(j¯)�”}”(hŒ``struct migrate_vma *migrate``”h]”jS)�”}”(hjÒh]”hŒstruct migrate_vma *migrate”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´MhjÌubjÉ)�”}”(hhh]”jM)�”}”(hŒmigrate_vma arguments”h]”hŒmigrate_vma arguments”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jçh´Mhjèubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÌubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jçh´MhjÉubj©)�”}”(hŒ@``unsigned long addr`` address where the folio will be inserted ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hj h]”hŒunsigned long addr”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´MhjubjÉ)�”}”(hhh]”jM)�”}”(hŒ(address where the folio will be inserted”h]”hŒ(address where the folio will be inserted”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j h´Mhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j h´MhjÉubj©)�”}”(hŒ6``struct page *page`` page to be inserted at **addr** ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hjDh]”hŒstruct page *page”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´Mhj>ubjÉ)�”}”(hhh]”jM)�”}”(hŒpage to be inserted at **addr**”h]”(hŒpage to be inserted at ”…”�”}”(hj]h²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jYh´MhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jYh´MhjÉubj©)�”}”(hŒ7``unsigned long *src`` src pfn which is being migrated ”h]”(j¯)�”}”(hŒ``unsigned long *src``”h]”jS)�”}”(hj‹h]”hŒunsigned long *src”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´Mhj…ubjÉ)�”}”(hhh]”jM)�”}”(hŒsrc pfn which is being migrated”h]”hŒsrc pfn which is being migrated”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j h´Mhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j h´MhjÉubj©)�”}”(hŒ#``pmd_t *pmdp`` pointer to the pmd ”h]”(j¯)�”}”(hŒ``pmd_t *pmdp``”h]”jS)�”}”(hjÄh]”hŒ pmd_t *pmdp”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´Mhj¾ubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to the pmd”h]”hŒpointer to the pmd”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÙh´MhjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÙh´MhjÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj­ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÿh]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjýubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´Mhj­ubjM)�”}”(hŒ¸**page** needs to be initialized and setup after it's allocated. The code bits here follow closely the code in __do_huge_pmd_anonymous_page(). This API does not support THP zero pages.”h]”(jŽ)�”}”(hŒ**page**”h]”hŒpage”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ubhŒ² needs to be initialized and setup after it’s allocated. The code bits here follow closely the code in __do_huge_pmd_anonymous_page(). This API does not support THP zero pages.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´Mhj­ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!migrate_device_pages (C function)”Œc.migrate_device_pages”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒbvoid migrate_device_pages (unsigned long *src_pfns, unsigned long *dst_pfns, unsigned long npages)”h]”hù)�”}”(hŒavoid migrate_device_pages(unsigned long *src_pfns, unsigned long *dst_pfns, unsigned long npages)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjR h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjN h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´MïubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hja h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjN h²hh³j` h´Mïubhÿ)�”}”(hŒmigrate_device_pages”h]”j)�”}”(hŒmigrate_device_pages”h]”hŒmigrate_device_pages”…”�”}”(hjs h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjo ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjN h²hh³j` h´Mïubj )�”}”(hŒH(unsigned long *src_pfns, unsigned long *dst_pfns, unsigned long npages)”h]”(j )�”}”(hŒunsigned long *src_pfns”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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‹ ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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‹ ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÇ h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj‹ ubj)�”}”(hŒsrc_pfns”h]”hŒsrc_pfns”…”�”}”(hjÔ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‹ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‡ ubj )�”}”(hŒunsigned long *dst_pfns”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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é ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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é ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj%!h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjé ubj)�”}”(hŒdst_pfns”h]”hŒdst_pfns”…”�”}”(hj2!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjé ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‡ ubj )�”}”(hŒunsigned long npages”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjK!h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjG!ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY!h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjG!ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjg!h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjG!ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju!h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjG!ubj)�”}”(hŒnpages”h]”hŒnpages”…”�”}”(hjƒ!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjG!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‡ ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjN h²hh³j` h´Mïubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjJ h²hh³j` h´Mïubah}”(h]”jE ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j` h´MïhjG h²hubj4)�”}”(hhh]”jM)�”}”(hŒ+migrate meta-data from src page to dst page”h]”hŒ+migrate meta-data from src page to dst page”…”�”}”(hj­!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´Mïhjª!h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjG h²hh³j` h´Mïubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÅ!jHjÅ!jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX{**Parameters** ``unsigned long *src_pfns`` src_pfns returned from migrate_device_range() ``unsigned long *dst_pfns`` array of pfns allocated by the driver to migrate memory to ``unsigned long npages`` number of pages in the range **Description** Equivalent to migrate_vma_pages(). This is called to migrate struct page meta-data from source struct page to destination.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÏ!h]”hŒ Parameters”…”�”}”(hjÑ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÍ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´MóhjÉ!ubj¤)�”}”(hhh]”(j©)�”}”(hŒJ``unsigned long *src_pfns`` src_pfns returned from migrate_device_range() ”h]”(j¯)�”}”(hŒ``unsigned long *src_pfns``”h]”jS)�”}”(hjî!h]”hŒunsigned long *src_pfns”…”�”}”(hjð!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjì!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´Mðhjè!ubjÉ)�”}”(hhh]”jM)�”}”(hŒ-src_pfns returned from migrate_device_range()”h]”hŒ-src_pfns returned from migrate_device_range()”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j"h´Mðhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjè!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j"h´Mðhjå!ubj©)�”}”(hŒW``unsigned long *dst_pfns`` array of pfns allocated by the driver to migrate memory to ”h]”(j¯)�”}”(hŒ``unsigned long *dst_pfns``”h]”jS)�”}”(hj'"h]”hŒunsigned long *dst_pfns”…”�”}”(hj)"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj%"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´Mñhj!"ubjÉ)�”}”(hhh]”jM)�”}”(hŒ:array of pfns allocated by the driver to migrate memory to”h]”hŒ:array of pfns allocated by the driver to migrate memory to”…”�”}”(hj@"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j<"h´Mñhj="ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj!"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j<"h´Mñhjå!ubj©)�”}”(hŒ6``unsigned long npages`` number of pages in the range ”h]”(j¯)�”}”(hŒ``unsigned long npages``”h]”jS)�”}”(hj`"h]”hŒunsigned long npages”…”�”}”(hjb"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj^"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´MòhjZ"ubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages in the range”h]”hŒnumber of pages in the range”…”�”}”(hjy"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ju"h´Mòhjv"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjZ"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³ju"h´Mòhjå!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÉ!ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj›"h]”hŒ Description”…”�”}”(hj�"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj™"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´MôhjÉ!ubjM)�”}”(hŒzEquivalent to migrate_vma_pages(). This is called to migrate struct page meta-data from source struct page to destination.”h]”hŒzEquivalent to migrate_vma_pages(). This is called to migrate struct page meta-data from source struct page to destination.”…”�”}”(hj±"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.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”]”(héŒmigrate_vma_pages (C function)”Œc.migrate_vma_pages”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ4void migrate_vma_pages (struct migrate_vma *migrate)”h]”hù)�”}”(hŒ3void migrate_vma_pages(struct migrate_vma *migrate)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjà"h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÜ"h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´MÿubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjï"h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÜ"h²hh³jî"h´Mÿubhÿ)�”}”(hŒmigrate_vma_pages”h]”j)�”}”(hŒmigrate_vma_pages”h]”hŒmigrate_vma_pages”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjý"ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÜ"h²hh³jî"h´Mÿubj )�”}”(hŒ(struct migrate_vma *migrate)”h]”j )�”}”(hŒstruct migrate_vma *migrate”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj#ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*#h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj#ubh)�”}”(hhh]”j)�”}”(hŒ migrate_vma”h]”hŒ migrate_vma”…”�”}”(hj;#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj8#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j=#Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj#sbŒc.migrate_vma_pages”†”asbuh1hhj#ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[#h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj#ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hji#h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj#ubj)�”}”(hŒmigrate”h]”hŒmigrate”…”�”}”(hjv#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj#ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÜ"h²hh³jî"h´Mÿubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjØ"h²hh³jî"h´Mÿubah}”(h]”jÓ"ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jî"h´MÿhjÕ"h²hubj4)�”}”(hhh]”jM)�”}”(hŒ+migrate meta-data from src page to dst page”h]”hŒ+migrate meta-data from src page to dst page”…”�”}”(hj #h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´Mÿhj�#h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÕ"h²hh³jî"h´Mÿubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¸#jHj¸#jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX!**Parameters** ``struct migrate_vma *migrate`` migrate struct containing all migration information **Description** This migrates struct page meta-data from source struct page to destination struct page. This effectively finishes the migration from source page to the destination page.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÂ#h]”hŒ Parameters”…”�”}”(hjÄ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÀ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´Mhj¼#ubj¤)�”}”(hhh]”j©)�”}”(hŒT``struct migrate_vma *migrate`` migrate struct containing all migration information ”h]”(j¯)�”}”(hŒ``struct migrate_vma *migrate``”h]”jS)�”}”(hjá#h]”hŒstruct migrate_vma *migrate”…”�”}”(hjã#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjß#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´MhjÛ#ubjÉ)�”}”(hhh]”jM)�”}”(hŒ3migrate struct containing all migration information”h]”hŒ3migrate struct containing all migration information”…”�”}”(hjú#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jö#h´Mhj÷#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÛ#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jö#h´MhjØ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¼#ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj$h]”hŒ Description”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´Mhj¼#ubjM)�”}”(hŒ©This migrates struct page meta-data from source struct page to destination struct page. This effectively finishes the migration from source page to the destination page.”h]”hŒ©This migrates struct page meta-data from source struct page to destination struct page. This effectively finishes the migration from source page to the destination page.”…”�”}”(hj2$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´Mhj¼#ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!migrate_vma_finalize (C function)”Œc.migrate_vma_finalize”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ7void migrate_vma_finalize (struct migrate_vma *migrate)”h]”hù)�”}”(hŒ6void migrate_vma_finalize(struct migrate_vma *migrate)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hja$h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj]$h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´MRubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjp$h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj]$h²hh³jo$h´MRubhÿ)�”}”(hŒmigrate_vma_finalize”h]”j)�”}”(hŒmigrate_vma_finalize”h]”hŒmigrate_vma_finalize”…”�”}”(hj‚$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj~$ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj]$h²hh³jo$h´MRubj )�”}”(hŒ(struct migrate_vma *migrate)”h]”j )�”}”(hŒstruct migrate_vma *migrate”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjž$h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjš$ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«$h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjš$ubh)�”}”(hhh]”j)�”}”(hŒ migrate_vma”h]”hŒ migrate_vma”…”�”}”(hj¼$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¹$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¾$Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj„$sbŒc.migrate_vma_finalize”†”asbuh1hhjš$ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜ$h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjš$ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjê$h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjš$ubj)�”}”(hŒmigrate”h]”hŒmigrate”…”�”}”(hj÷$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjš$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj–$ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj]$h²hh³jo$h´MRubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjY$h²hh³jo$h´MRubah}”(h]”jT$ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jo$h´MRhjV$h²hubj4)�”}”(hhh]”jM)�”}”(hŒrestore CPU page table entry”h]”hŒrestore CPU page table entry”…”�”}”(hj!%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´MRhj%h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjV$h²hh³jo$h´MRubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj9%jHj9%jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX„**Parameters** ``struct migrate_vma *migrate`` migrate struct containing all migration information **Description** This replaces the special migration pte entry with either a mapping to the new page if migration was successful for that page, or to the original page otherwise. This also unlocks the pages and puts them back on the lru, or drops the extra refcount, for device pages.”h]”(jM)�”}”(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&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´MVhj=%ubj¤)�”}”(hhh]”j©)�”}”(hŒT``struct migrate_vma *migrate`` migrate struct containing all migration information ”h]”(j¯)�”}”(hŒ``struct migrate_vma *migrate``”h]”jS)�”}”(hjb%h]”hŒstruct migrate_vma *migrate”…”�”}”(hjd%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj`%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´MShj\%ubjÉ)�”}”(hhh]”jM)�”}”(hŒ3migrate struct containing all migration information”h]”hŒ3migrate struct containing all migration information”…”�”}”(hj{%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jw%h´MShjx%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj\%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jw%h´MShjY%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj=%ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj�%h]”hŒ Description”…”�”}”(hjŸ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj›%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´MUhj=%ubjM)�”}”(hŒ¡This replaces the special migration pte entry with either a mapping to the new page if migration was successful for that page, or to the original page otherwise.”h]”hŒ¡This replaces the special migration pte entry with either a mapping to the new page if migration was successful for that page, or to the original page otherwise.”…”�”}”(hj³%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´MThj=%ubjM)�”}”(hŒiThis also unlocks the pages and puts them back on the lru, or drops the extra refcount, for device pages.”h]”hŒiThis also unlocks the pages and puts them back on the lru, or drops the extra refcount, for device pages.”…”�”}”(hjÂ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´MXhj=%ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!migrate_device_range (C function)”Œc.migrate_device_range”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ]int migrate_device_range (unsigned long *src_pfns, unsigned long start, unsigned long npages)”h]”hù)�”}”(hŒ\int migrate_device_range(unsigned long *src_pfns, unsigned long start, unsigned long npages)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjñ%h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjí%h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´MtubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjí%h²hh³jÿ%h´Mtubhÿ)�”}”(hŒmigrate_device_range”h]”j)�”}”(hŒmigrate_device_range”h]”hŒmigrate_device_range”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj&ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjí%h²hh³jÿ%h´Mtubj )�”}”(hŒD(unsigned long *src_pfns, unsigned long start, unsigned long npages)”h]”(j )�”}”(hŒunsigned long *src_pfns”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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*&ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjJ&h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj*&ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjX&h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj*&ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjf&h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj*&ubj)�”}”(hŒsrc_pfns”h]”hŒsrc_pfns”…”�”}”(hjs&h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj*&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj&&ubj )�”}”(hŒunsigned long start”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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ˆ&ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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ˆ&ubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjÄ&h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjˆ&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj&&ubj )�”}”(hŒunsigned long npages”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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Ù&ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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Ù&ubj)�”}”(hŒnpages”h]”hŒnpages”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙ&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj&&ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjí%h²hh³jÿ%h´Mtubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjé%h²hh³jÿ%h´Mtubah}”(h]”jä%ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÿ%h´Mthjæ%h²hubj4)�”}”(hhh]”jM)�”}”(hŒ-migrate device private pfns to normal memory.”h]”hŒ-migrate device private pfns to normal memory.”…”�”}”(hj?'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´Mthj<'h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjæ%h²hh³jÿ%h´Mtubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjW'jHjW'jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXÉ**Parameters** ``unsigned long *src_pfns`` array large enough to hold migrating source device private pfns. ``unsigned long start`` starting pfn in the range to migrate. ``unsigned long npages`` number of pages to migrate. **Description** migrate_vma_setup() is similar in concept to migrate_vma_setup() except that instead of looking up pages based on virtual address mappings a range of device pfns that should be migrated to system memory is used instead. This is useful when a driver needs to free device memory but doesn't know the virtual mappings of every page that may be in device memory. For example this is often the case when a driver is being unloaded or unbound from a device. Like migrate_vma_setup() this function will take a reference and lock any migrating pages that aren't free before unmapping them. Drivers may then allocate destination pages and start copying data from the device to CPU memory before calling migrate_device_pages().”h]”(jM)�”}”(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&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´Mxhj['ubj¤)�”}”(hhh]”(j©)�”}”(hŒ]``unsigned long *src_pfns`` array large enough to hold migrating source device private pfns. ”h]”(j¯)�”}”(hŒ``unsigned long *src_pfns``”h]”jS)�”}”(hj€'h]”hŒunsigned long *src_pfns”…”�”}”(hj‚'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj~'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´Muhjz'ubjÉ)�”}”(hhh]”jM)�”}”(hŒ@array large enough to hold migrating source device private pfns.”h]”hŒ@array large enough to hold migrating source device private pfns.”…”�”}”(hj™'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j•'h´Muhj–'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjz'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j•'h´Muhjw'ubj©)�”}”(hŒ>``unsigned long start`` starting pfn in the range to migrate. ”h]”(j¯)�”}”(hŒ``unsigned long start``”h]”jS)�”}”(hj¹'h]”hŒunsigned long start”…”�”}”(hj»'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj·'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´Mvhj³'ubjÉ)�”}”(hhh]”jM)�”}”(hŒ%starting pfn in the range to migrate.”h]”hŒ%starting pfn in the range to migrate.”…”�”}”(hjÒ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÎ'h´MvhjÏ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj³'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÎ'h´Mvhjw'ubj©)�”}”(hŒ5``unsigned long npages`` number of pages to migrate. ”h]”(j¯)�”}”(hŒ``unsigned long npages``”h]”jS)�”}”(hjò'h]”hŒunsigned long npages”…”�”}”(hjô'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjð'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´Mwhjì'ubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages to migrate.”h]”hŒnumber of pages to migrate.”…”�”}”(hj (h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j(h´Mwhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjì'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j(h´Mwhjw'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj['ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj-(h]”hŒ Description”…”�”}”(hj/(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj+(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´Myhj['ubjM)�”}”(hŒÛmigrate_vma_setup() is similar in concept to migrate_vma_setup() except that instead of looking up pages based on virtual address mappings a range of device pfns that should be migrated to system memory is used instead.”h]”hŒÛmigrate_vma_setup() is similar in concept to migrate_vma_setup() except that instead of looking up pages based on virtual address mappings a range of device pfns that should be migrated to system memory is used instead.”…”�”}”(hjC(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´Mxhj['ubjM)�”}”(hŒçThis is useful when a driver needs to free device memory but doesn't know the virtual mappings of every page that may be in device memory. For example this is often the case when a driver is being unloaded or unbound from a device.”h]”hŒéThis is useful when a driver needs to free device memory but doesn’t know the virtual mappings of every page that may be in device memory. For example this is often the case when a driver is being unloaded or unbound from a device.”…”�”}”(hjR(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´M|hj['ubjM)�”}”(hX Like migrate_vma_setup() this function will take a reference and lock any migrating pages that aren't free before unmapping them. Drivers may then allocate destination pages and start copying data from the device to CPU memory before calling migrate_device_pages().”h]”hX Like migrate_vma_setup() this function will take a reference and lock any migrating pages that aren’t free before unmapping them. Drivers may then allocate destination pages and start copying data from the device to CPU memory before calling migrate_device_pages().”…”�”}”(hja(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.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”]”(héŒ migrate_device_pfns (C function)”Œc.migrate_device_pfns”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒGint migrate_device_pfns (unsigned long *src_pfns, unsigned long npages)”h]”hù)�”}”(hŒFint migrate_device_pfns(unsigned long *src_pfns, unsigned long npages)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj�(h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjŒ(h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´M«ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ(h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŒ(h²hh³jž(h´M«ubhÿ)�”}”(hŒmigrate_device_pfns”h]”j)�”}”(hŒmigrate_device_pfns”h]”hŒmigrate_device_pfns”…”�”}”(hj±(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj­(ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjŒ(h²hh³jž(h´M«ubj )�”}”(hŒ/(unsigned long *src_pfns, unsigned long npages)”h]”(j )�”}”(hŒunsigned long *src_pfns”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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É(ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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É(ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÉ(ubj)�”}”(hŒsrc_pfns”h]”hŒsrc_pfns”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÉ(ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÅ(ubj )�”}”(hŒunsigned long npages”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj+)h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj')ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9)h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj')ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjG)h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj')ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjU)h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj')ubj)�”}”(hŒnpages”h]”hŒnpages”…”�”}”(hjc)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj')ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÅ(ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjŒ(h²hh³jž(h´M«ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjˆ(h²hh³jž(h´M«ubah}”(h]”jƒ(ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jž(h´M«hj…(h²hubj4)�”}”(hhh]”jM)�”}”(hŒ-migrate device private pfns to normal memory.”h]”hŒ-migrate device private pfns to normal memory.”…”�”}”(hj�)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´M«hjŠ)h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj…(h²hh³jž(h´M«ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¥)jHj¥)jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX#**Parameters** ``unsigned long *src_pfns`` pre-populated array of source device private pfns to migrate. ``unsigned long npages`` number of pages to migrate. **Description** Similar to migrate_device_range() but supports non-contiguous pre-populated array of device pages to migrate.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¯)h]”hŒ Parameters”…”�”}”(hj±)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj­)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´M¯hj©)ubj¤)�”}”(hhh]”(j©)�”}”(hŒZ``unsigned long *src_pfns`` pre-populated array of source device private pfns to migrate. ”h]”(j¯)�”}”(hŒ``unsigned long *src_pfns``”h]”jS)�”}”(hjÎ)h]”hŒunsigned long *src_pfns”…”�”}”(hjÐ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÌ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´M¬hjÈ)ubjÉ)�”}”(hhh]”jM)�”}”(hŒ=pre-populated array of source device private pfns to migrate.”h]”hŒ=pre-populated array of source device private pfns to migrate.”…”�”}”(hjç)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jã)h´M¬hjä)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÈ)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jã)h´M¬hjÅ)ubj©)�”}”(hŒ5``unsigned long npages`` number of pages to migrate. ”h]”(j¯)�”}”(hŒ``unsigned long npages``”h]”jS)�”}”(hj*h]”hŒunsigned long npages”…”�”}”(hj *h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´M­hj*ubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages to migrate.”h]”hŒnumber of pages to migrate.”…”�”}”(hj *h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j*h´M­hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j*h´M­hjÅ)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj©)ubjM)�”}”(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&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´M¯hj©)ubjM)�”}”(hŒmSimilar to migrate_device_range() but supports non-contiguous pre-populated array of device pages to migrate.”h]”hŒmSimilar to migrate_device_range() but supports non-contiguous pre-populated array of device pages to migrate.”…”�”}”(hjX*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:125: ./mm/migrate_device.c”h´M®hj©)ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubjK‰)�”}”(hŒA#kernel-doc:: mm/nommu.c (duplicates kernel-doc from other files)”h]”hŒA#kernel-doc:: mm/nommu.c (duplicates kernel-doc from other files)”…”�”}”hjn*sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jJ‰hjÞÁh²hh³hÊh´K~ubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒwp_walk (C struct)”Œ c.wp_walk”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒwp_walk”h]”hù)�”}”(hŒstruct wp_walk”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj•*h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj‘*h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´KubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£*h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj‘*h²hh³j¢*h´Kubhÿ)�”}”(hŒwp_walk”h]”j)�”}”(hj�*h]”hŒwp_walk”…”�”}”(hjµ*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj±*ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj‘*h²hh³j¢*h´Kubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj�*h²hh³j¢*h´Kubah}”(h]”jˆ*ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¢*h´KhjŠ*h²hubj4)�”}”(hhh]”jM)�”}”(hŒ+Private struct for pagetable walk callbacks”h]”hŒ+Private struct for pagetable walk callbacks”…”�”}”(hj×*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´K hjÔ*h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjŠ*h²hh³j¢*h´Kubeh}”(h]”h ]”(jAŒstruct”eh"]”h$]”h&]”jFjAjGjï*jHjï*jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXw**Definition**:: struct wp_walk { struct mmu_notifier_range range; unsigned long tlbflush_start; unsigned long tlbflush_end; unsigned long total; }; **Members** ``range`` Range for mmu notifiers ``tlbflush_start`` Address of first modified pte ``tlbflush_end`` Address of last modified pte + 1 ``total`` Total number of modified ptes”h]”(jM)�”}”(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&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Khjó*ubj )�”}”(hŒ“struct wp_walk { struct mmu_notifier_range range; unsigned long tlbflush_start; unsigned long tlbflush_end; unsigned long total; };”h]”hŒ“struct wp_walk { struct mmu_notifier_range range; unsigned long tlbflush_start; unsigned long tlbflush_end; unsigned long total; };”…”�”}”hj+sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Khjó*ubjM)�”}”(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&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Khjó*ubj¤)�”}”(hhh]”(j©)�”}”(hŒ"``range`` Range for mmu notifiers ”h]”(j¯)�”}”(hŒ ``range``”h]”jS)�”}”(hjD+h]”hŒrange”…”�”}”(hjF+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjB+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´K hj>+ubjÉ)�”}”(hhh]”jM)�”}”(hŒRange for mmu notifiers”h]”hŒRange for mmu notifiers”…”�”}”(hj]+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jY+h´K hjZ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj>+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jY+h´K hj;+ubj©)�”}”(hŒ1``tlbflush_start`` Address of first modified pte ”h]”(j¯)�”}”(hŒ``tlbflush_start``”h]”jS)�”}”(hj}+h]”hŒtlbflush_start”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj{+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Khjw+ubjÉ)�”}”(hhh]”jM)�”}”(hŒAddress of first modified pte”h]”hŒAddress of first modified pte”…”�”}”(hj–+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j’+h´Khj“+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjw+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j’+h´Khj;+ubj©)�”}”(hŒ2``tlbflush_end`` Address of last modified pte + 1 ”h]”(j¯)�”}”(hŒ``tlbflush_end``”h]”jS)�”}”(hj¶+h]”hŒ tlbflush_end”…”�”}”(hj¸+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj´+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Khj°+ubjÉ)�”}”(hhh]”jM)�”}”(hŒ Address of last modified pte + 1”h]”hŒ Address of last modified pte + 1”…”�”}”(hjÏ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jË+h´KhjÌ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj°+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jË+h´Khj;+ubj©)�”}”(hŒ'``total`` Total number of modified ptes”h]”(j¯)�”}”(hŒ ``total``”h]”jS)�”}”(hjï+h]”hŒtotal”…”�”}”(hjñ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjí+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Khjé+ubjÉ)�”}”(hhh]”jM)�”}”(hŒTotal number of modified ptes”h]”hŒTotal number of modified ptes”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Khj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjé+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j,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”]”(héŒwp_pte (C function)”Œc.wp_pte”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒTint wp_pte (pte_t *pte, unsigned long addr, unsigned long end, struct mm_walk *walk)”h]”hù)�”}”(hŒSint wp_pte(pte_t *pte, unsigned long addr, unsigned long end, struct mm_walk *walk)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjI,h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjE,h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´KubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjX,h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjE,h²hh³jW,h´Kubhÿ)�”}”(hŒwp_pte”h]”j)�”}”(hŒwp_pte”h]”hŒwp_pte”…”�”}”(hjj,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjf,ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjE,h²hh³jW,h´Kubj )�”}”(hŒI(pte_t *pte, unsigned long addr, unsigned long end, struct mm_walk *walk)”h]”(j )�”}”(hŒ pte_t *pte”h]”(h)�”}”(hhh]”j)�”}”(hŒpte_t”h]”hŒpte_t”…”�”}”(hj‰,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj†,ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j‹,Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljl,sbŒc.wp_pte”†”asbuh1hhj‚,ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©,h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj‚,ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj·,h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj‚,ubj)�”}”(hŒpte”h]”hŒpte”…”�”}”(hjÄ,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‚,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj~,ubj )�”}”(hŒunsigned long addr”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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Ù,ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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Ù,ubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙ,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj~,ubj )�”}”(hŒunsigned long end”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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*-ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjJ-h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj*-ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjX-h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj*-ubj)�”}”(hŒend”h]”hŒend”…”�”}”(hjf-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj*-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj~,ubj )�”}”(hŒstruct mm_walk *walk”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj{-ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒ-h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj{-ubh)�”}”(hhh]”j)�”}”(hŒmm_walk”h]”hŒmm_walk”…”�”}”(hj�-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjš-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jŸ-Œmodname”NŒ classname”Njpjs)�”}”jv]”j¥,Œc.wp_pte”†”asbuh1hhj{-ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»-h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj{-ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÉ-h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj{-ubj)�”}”(hŒwalk”h]”hŒwalk”…”�”}”(hjÖ-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj{-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj~,ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjE,h²hh³jW,h´Kubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjA,h²hh³jW,h´Kubah}”(h]”j<,ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jW,h´Khj>,h²hubj4)�”}”(hhh]”jM)�”}”(hŒWrite-protect a pte”h]”hŒWrite-protect a pte”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Khjý-h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj>,h²hh³jW,h´Kubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj.jHj.jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX…**Parameters** ``pte_t *pte`` Pointer to the pte ``unsigned long addr`` The start of protecting virtual address ``unsigned long end`` The end of protecting virtual address ``struct mm_walk *walk`` pagetable walk callback argument **Description** The function write-protects a pte and records the range in virtual address space of touched ptes for efficient range TLB flushes.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj".h]”hŒ Parameters”…”�”}”(hj$.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj .ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Khj.ubj¤)�”}”(hhh]”(j©)�”}”(hŒ"``pte_t *pte`` Pointer to the pte ”h]”(j¯)�”}”(hŒ``pte_t *pte``”h]”jS)�”}”(hjA.h]”hŒ pte_t *pte”…”�”}”(hjC.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj?.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Khj;.ubjÉ)�”}”(hhh]”jM)�”}”(hŒPointer to the pte”h]”hŒPointer to the pte”…”�”}”(hjZ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jV.h´KhjW.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj;.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jV.h´Khj8.ubj©)�”}”(hŒ?``unsigned long addr`` The start of protecting virtual address ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hjz.h]”hŒunsigned long addr”…”�”}”(hj|.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjx.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Khjt.ubjÉ)�”}”(hhh]”jM)�”}”(hŒ'The start of protecting virtual address”h]”hŒ'The start of protecting virtual address”…”�”}”(hj“.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�.h´Khj�.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjt.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�.h´Khj8.ubj©)�”}”(hŒ<``unsigned long end`` The end of protecting virtual address ”h]”(j¯)�”}”(hŒ``unsigned long end``”h]”jS)�”}”(hj³.h]”hŒunsigned long end”…”�”}”(hjµ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj±.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Khj­.ubjÉ)�”}”(hhh]”jM)�”}”(hŒ%The end of protecting virtual address”h]”hŒ%The end of protecting virtual address”…”�”}”(hjÌ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÈ.h´KhjÉ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj­.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÈ.h´Khj8.ubj©)�”}”(hŒ:``struct mm_walk *walk`` pagetable walk callback argument ”h]”(j¯)�”}”(hŒ``struct mm_walk *walk``”h]”jS)�”}”(hjì.h]”hŒstruct mm_walk *walk”…”�”}”(hjî.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjê.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Khjæ.ubjÉ)�”}”(hhh]”jM)�”}”(hŒ pagetable walk callback argument”h]”hŒ pagetable walk callback argument”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j/h´Khj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjæ.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j/h´Khj8.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj.ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj'/h]”hŒ Description”…”�”}”(hj)/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj%/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Khj.ubjM)�”}”(hŒ�The function write-protects a pte and records the range in virtual address space of touched ptes for efficient range TLB flushes.”h]”hŒ�The function write-protects a pte and records the range in virtual address space of touched ptes for efficient range TLB flushes.”…”�”}”(hj=/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Khj.ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒclean_walk (C struct)”Œ c.clean_walk”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ clean_walk”h]”hù)�”}”(hŒstruct clean_walk”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjl/h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjh/h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´K$ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjz/h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjh/h²hh³jy/h´K$ubhÿ)�”}”(hŒ clean_walk”h]”j)�”}”(hjf/h]”hŒ clean_walk”…”�”}”(hjŒ/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjˆ/ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjh/h²hh³jy/h´K$ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjd/h²hh³jy/h´K$ubah}”(h]”j_/ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jy/h´K$hja/h²hubj4)�”}”(hhh]”jM)�”}”(hŒ1Private struct for the clean_record_pte function.”h]”hŒ1Private struct for the clean_record_pte function.”…”�”}”(hj®/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´K7hj«/h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hja/h²hh³jy/h´K$ubeh}”(h]”h ]”(jAŒstruct”eh"]”h$]”h&]”jFjAjGjÆ/jHjÆ/jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX>**Definition**:: struct clean_walk { struct wp_walk base; pgoff_t bitmap_pgoff; unsigned long *bitmap; pgoff_t start; pgoff_t end; }; **Members** ``base`` struct wp_walk we derive from ``bitmap_pgoff`` Address_space Page offset of the first bit in **bitmap** ``bitmap`` Bitmap with one bit for each page offset in the address_space range covered. ``start`` Address_space page offset of first modified pte relative to **bitmap_pgoff** ``end`` Address_space page offset of last modified pte relative to **bitmap_pgoff**”h]”(jM)�”}”(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&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´K;hjÊ/ubj )�”}”(hŒˆstruct clean_walk { struct wp_walk base; pgoff_t bitmap_pgoff; unsigned long *bitmap; pgoff_t start; pgoff_t end; };”h]”hŒˆstruct clean_walk { struct wp_walk base; pgoff_t bitmap_pgoff; unsigned long *bitmap; pgoff_t start; pgoff_t end; };”…”�”}”hjë/sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´K=hjÊ/ubjM)�”}”(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&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´KEhjÊ/ubj¤)�”}”(hhh]”(j©)�”}”(hŒ'``base`` struct wp_walk we derive from ”h]”(j¯)�”}”(hŒ``base``”h]”jS)�”}”(hj0h]”hŒbase”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´K9hj0ubjÉ)�”}”(hhh]”jM)�”}”(hŒstruct wp_walk we derive from”h]”hŒstruct wp_walk we derive from”…”�”}”(hj40h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j00h´K9hj10ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j00h´K9hj0ubj©)�”}”(hŒJ``bitmap_pgoff`` Address_space Page offset of the first bit in **bitmap** ”h]”(j¯)�”}”(hŒ``bitmap_pgoff``”h]”jS)�”}”(hjT0h]”hŒ bitmap_pgoff”…”�”}”(hjV0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjR0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´K:hjN0ubjÉ)�”}”(hhh]”jM)�”}”(hŒ8Address_space Page offset of the first bit in **bitmap**”h]”(hŒ.Address_space Page offset of the first bit in ”…”�”}”(hjm0h²hh³Nh´NubjŽ)�”}”(hŒ **bitmap**”h]”hŒbitmap”…”�”}”(hju0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjm0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ji0h´K:hjj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjN0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³ji0h´K:hj0ubj©)�”}”(hŒX``bitmap`` Bitmap with one bit for each page offset in the address_space range covered. ”h]”(j¯)�”}”(hŒ ``bitmap``”h]”jS)�”}”(hj›0h]”hŒbitmap”…”�”}”(hj�0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj™0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´KhjÏ0ubjÉ)�”}”(hhh]”jM)�”}”(hŒLAddress_space page offset of first modified pte relative to **bitmap_pgoff**”h]”(hŒhj0ubj©)�”}”(hŒS``end`` Address_space page offset of last modified pte relative to **bitmap_pgoff**”h]”(j¯)�”}”(hŒ``end``”h]”jS)�”}”(hj1h]”hŒend”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´K?hj1ubjÉ)�”}”(hhh]”jM)�”}”(hŒKAddress_space page offset of last modified pte relative to **bitmap_pgoff**”h]”(hŒ;Address_space page offset of last modified pte relative to ”…”�”}”(hj61h²hh³Nh´NubjŽ)�”}”(hŒ**bitmap_pgoff**”h]”hŒ bitmap_pgoff”…”�”}”(hj>1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj61ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j21h´K?hj31ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j21h´K?hj0ubeh}”(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”]”(héŒclean_record_pte (C function)”Œc.clean_record_pte”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ^int clean_record_pte (pte_t *pte, unsigned long addr, unsigned long end, struct mm_walk *walk)”h]”hù)�”}”(hŒ]int clean_record_pte(pte_t *pte, unsigned long addr, unsigned long end, struct mm_walk *walk)”h]”(jµ•)�”}”(hŒint”h]”hŒint”…”�”}”(hj„1h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj€1h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´KLubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“1h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj€1h²hh³j’1h´KLubhÿ)�”}”(hŒclean_record_pte”h]”j)�”}”(hŒclean_record_pte”h]”hŒclean_record_pte”…”�”}”(hj¥1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¡1ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj€1h²hh³j’1h´KLubj )�”}”(hŒI(pte_t *pte, unsigned long addr, unsigned long end, struct mm_walk *walk)”h]”(j )�”}”(hŒ pte_t *pte”h]”(h)�”}”(hhh]”j)�”}”(hŒpte_t”h]”hŒpte_t”…”�”}”(hjÄ1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÁ1ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÆ1Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj§1sbŒc.clean_record_pte”†”asbuh1hhj½1ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjä1h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj½1ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjò1h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj½1ubj)�”}”(hŒpte”h]”hŒpte”…”�”}”(hjÿ1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj½1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¹1ubj )�”}”(hŒunsigned long addr”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj2ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&2h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj2ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj42h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj2ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjB2h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj2ubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjP2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¹1ubj )�”}”(hŒunsigned long end”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hji2h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hje2ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjw2h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhje2ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj…2h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hje2ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“2h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhje2ubj)�”}”(hŒend”h]”hŒend”…”�”}”(hj¡2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhje2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¹1ubj )�”}”(hŒstruct mm_walk *walk”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjº2h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¶2ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇ2h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¶2ubh)�”}”(hhh]”j)�”}”(hŒmm_walk”h]”hŒmm_walk”…”�”}”(hjØ2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕ2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÚ2Œmodname”NŒ classname”Njpjs)�”}”jv]”jà1Œc.clean_record_pte”†”asbuh1hhj¶2ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjö2h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¶2ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¶2ubj)�”}”(hŒwalk”h]”hŒwalk”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¶2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¹1ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj€1h²hh³j’1h´KLubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj|1h²hh³j’1h´KLubah}”(h]”jw1ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j’1h´KLhjy1h²hubj4)�”}”(hhh]”jM)�”}”(hŒ;Clean a pte and record its address space offset in a bitmap”h]”hŒ;Clean a pte and record its address space offset in a bitmap”…”�”}”(hj;3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´KLhj83h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjy1h²hh³j’1h´KLubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjS3jHjS3jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``pte_t *pte`` Pointer to the pte ``unsigned long addr`` The start of virtual address to be clean ``unsigned long end`` The end of virtual address to be clean ``struct mm_walk *walk`` pagetable walk callback argument **Description** The function cleans a pte and records the range in virtual address space of touched ptes for efficient TLB flushes. It also records dirty ptes in a bitmap representing page offsets in the address_space, as well as the first and last of the bits touched.”h]”(jM)�”}”(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&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´KPhjW3ubj¤)�”}”(hhh]”(j©)�”}”(hŒ"``pte_t *pte`` Pointer to the pte ”h]”(j¯)�”}”(hŒ``pte_t *pte``”h]”jS)�”}”(hj|3h]”hŒ pte_t *pte”…”�”}”(hj~3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjz3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´KNhjv3ubjÉ)�”}”(hhh]”jM)�”}”(hŒPointer to the pte”h]”hŒPointer to the pte”…”�”}”(hj•3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‘3h´KNhj’3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjv3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‘3h´KNhjs3ubj©)�”}”(hŒ@``unsigned long addr`` The start of virtual address to be clean ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hjµ3h]”hŒunsigned long addr”…”�”}”(hj·3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj³3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´KOhj¯3ubjÉ)�”}”(hhh]”jM)�”}”(hŒ(The start of virtual address to be clean”h]”hŒ(The start of virtual address to be clean”…”�”}”(hjÎ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÊ3h´KOhjË3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¯3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÊ3h´KOhjs3ubj©)�”}”(hŒ=``unsigned long end`` The end of virtual address to be clean ”h]”(j¯)�”}”(hŒ``unsigned long end``”h]”jS)�”}”(hjî3h]”hŒunsigned long end”…”�”}”(hjð3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjì3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´KPhjè3ubjÉ)�”}”(hhh]”jM)�”}”(hŒ&The end of virtual address to be clean”h]”hŒ&The end of virtual address to be clean”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j4h´KPhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjè3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j4h´KPhjs3ubj©)�”}”(hŒ:``struct mm_walk *walk`` pagetable walk callback argument ”h]”(j¯)�”}”(hŒ``struct mm_walk *walk``”h]”jS)�”}”(hj'4h]”hŒstruct mm_walk *walk”…”�”}”(hj)4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj%4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´KQhj!4ubjÉ)�”}”(hhh]”jM)�”}”(hŒ pagetable walk callback argument”h]”hŒ pagetable walk callback argument”…”�”}”(hj@4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j<4h´KQhj=4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj!4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j<4h´KQhjs3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjW3ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjb4h]”hŒ Description”…”�”}”(hjd4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj`4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´KShjW3ubjM)�”}”(hŒýThe function cleans a pte and records the range in virtual address space of touched ptes for efficient TLB flushes. It also records dirty ptes in a bitmap representing page offsets in the address_space, as well as the first and last of the bits touched.”h]”hŒýThe function cleans a pte and records the range in virtual address space of touched ptes for efficient TLB flushes. It also records dirty ptes in a bitmap representing page offsets in the address_space, as well as the first and last of the bits touched.”…”�”}”(hjx4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´KRhjW3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$wp_shared_mapping_range (C function)”Œc.wp_shared_mapping_range”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒfunsigned long wp_shared_mapping_range (struct address_space *mapping, pgoff_t first_index, pgoff_t nr)”h]”hù)�”}”(hŒeunsigned long wp_shared_mapping_range(struct address_space *mapping, pgoff_t first_index, pgoff_t nr)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj§4h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj£4h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´KúubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶4h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj£4h²hh³jµ4h´Kúubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÄ4h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj£4h²hh³jµ4h´KúubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒ4h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj£4h²hh³jµ4h´Kúubhÿ)�”}”(hŒwp_shared_mapping_range”h]”j)�”}”(hŒwp_shared_mapping_range”h]”hŒwp_shared_mapping_range”…”�”}”(hjä4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjà4ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj£4h²hh³jµ4h´Kúubj )�”}”(hŒ@(struct address_space *mapping, pgoff_t first_index, pgoff_t nr)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjü4ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 5h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjü4ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j 5Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljæ4sbŒc.wp_shared_mapping_range”†”asbuh1hhjü4ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>5h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjü4ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjL5h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjü4ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjY5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjü4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjø4ubj )�”}”(hŒpgoff_t first_index”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hju5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjr5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jw5Œmodname”NŒ classname”Njpjs)�”}”jv]”j:5Œc.wp_shared_mapping_range”†”asbuh1hhjn5ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“5h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjn5ubj)�”}”(hŒ first_index”h]”hŒ first_index”…”�”}”(hj¡5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjn5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjø4ubj )�”}”(hŒ pgoff_t nr”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hj½5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjº5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¿5Œmodname”NŒ classname”Njpjs)�”}”jv]”j:5Œc.wp_shared_mapping_range”†”asbuh1hhj¶5ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛ5h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¶5ubj)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjé5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¶5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjø4ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj£4h²hh³jµ4h´Kúubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjŸ4h²hh³jµ4h´Kúubah}”(h]”jš4ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jµ4h´Kúhjœ4h²hubj4)�”}”(hhh]”jM)�”}”(hŒ0Write-protect all ptes in an address space range”h]”hŒ0Write-protect all ptes in an address space range”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Kúhj6h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjœ4h²hh³jµ4h´Kúubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj+6jHj+6jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXE**Parameters** ``struct address_space *mapping`` The address_space we want to write protect ``pgoff_t first_index`` The first page offset in the range ``pgoff_t nr`` Number of incremental page offsets to cover **Note** This function currently skips transhuge page-table entries, since it's intended for dirty-tracking on the PTE level. It will warn on encountering transhuge write-enabled entries, though, and can easily be extended to handle them as well. **Return** The number of ptes actually write-protected. Note that already write-protected ptes are not counted.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj56h]”hŒ Parameters”…”�”}”(hj76h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj36ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Kþhj/6ubj¤)�”}”(hhh]”(j©)�”}”(hŒM``struct address_space *mapping`` The address_space we want to write protect ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjT6h]”hŒstruct address_space *mapping”…”�”}”(hjV6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjR6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´KûhjN6ubjÉ)�”}”(hhh]”jM)�”}”(hŒ*The address_space we want to write protect”h]”hŒ*The address_space we want to write protect”…”�”}”(hjm6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ji6h´Kûhjj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjN6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³ji6h´KûhjK6ubj©)�”}”(hŒ;``pgoff_t first_index`` The first page offset in the range ”h]”(j¯)�”}”(hŒ``pgoff_t first_index``”h]”jS)�”}”(hj�6h]”hŒpgoff_t first_index”…”�”}”(hj�6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‹6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Kühj‡6ubjÉ)�”}”(hhh]”jM)�”}”(hŒ"The first page offset in the range”h]”hŒ"The first page offset in the range”…”�”}”(hj¦6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¢6h´Kühj£6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‡6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¢6h´KühjK6ubj©)�”}”(hŒ;``pgoff_t nr`` Number of incremental page offsets to cover ”h]”(j¯)�”}”(hŒ``pgoff_t nr``”h]”jS)�”}”(hjÆ6h]”hŒ pgoff_t nr”…”�”}”(hjÈ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÄ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´KýhjÀ6ubjÉ)�”}”(hhh]”jM)�”}”(hŒ+Number of incremental page offsets to cover”h]”hŒ+Number of incremental page offsets to cover”…”�”}”(hjß6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÛ6h´KýhjÜ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÀ6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÛ6h´KýhjK6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj/6ubjM)�”}”(hŒ**Note**”h]”jŽ)�”}”(hj7h]”hŒNote”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÿ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Kÿhj/6ubjM)�”}”(hŒíThis function currently skips transhuge page-table entries, since it's intended for dirty-tracking on the PTE level. It will warn on encountering transhuge write-enabled entries, though, and can easily be extended to handle them as well.”h]”hŒïThis function currently skips transhuge page-table entries, since it’s intended for dirty-tracking on the PTE level. It will warn on encountering transhuge write-enabled entries, though, and can easily be extended to handle them as well.”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Kÿhj/6ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj(7h]”hŒReturn”…”�”}”(hj*7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj&7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Mhj/6ubjM)�”}”(hŒdThe number of ptes actually write-protected. Note that already write-protected ptes are not counted.”h]”hŒdThe number of ptes actually write-protected. Note that already write-protected ptes are not counted.”…”�”}”(hj>7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Mhj/6ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ.clean_record_shared_mapping_range (C function)”Œ#c.clean_record_shared_mapping_range”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ»unsigned long clean_record_shared_mapping_range (struct address_space *mapping, pgoff_t first_index, pgoff_t nr, pgoff_t bitmap_pgoff, unsigned long *bitmap, pgoff_t *start, pgoff_t *end)”h]”hù)�”}”(hŒºunsigned long clean_record_shared_mapping_range(struct address_space *mapping, pgoff_t first_index, pgoff_t nr, pgoff_t bitmap_pgoff, unsigned long *bitmap, pgoff_t *start, pgoff_t *end)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjm7h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hji7h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|7h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhji7h²hh³j{7h´Mubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjŠ7h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hji7h²hh³j{7h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜7h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhji7h²hh³j{7h´Mubhÿ)�”}”(hŒ!clean_record_shared_mapping_range”h]”j)�”}”(hŒ!clean_record_shared_mapping_range”h]”hŒ!clean_record_shared_mapping_range”…”�”}”(hjª7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦7ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhji7h²hh³j{7h´Mubj )�”}”(hŒ‹(struct address_space *mapping, pgoff_t first_index, pgoff_t nr, pgoff_t bitmap_pgoff, unsigned long *bitmap, pgoff_t *start, pgoff_t *end)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÆ7h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÂ7ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓ7h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÂ7ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjä7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjá7ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jæ7Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj¬7sbŒ#c.clean_record_shared_mapping_range”†”asbuh1hhjÂ7ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÂ7ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÂ7ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÂ7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¾7ubj )�”}”(hŒpgoff_t first_index”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hj;8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj88ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j=8Œmodname”NŒ classname”Njpjs)�”}”jv]”j8Œ#c.clean_record_shared_mapping_range”†”asbuh1hhj48ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY8h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj48ubj)�”}”(hŒ first_index”h]”hŒ first_index”…”�”}”(hjg8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj48ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¾7ubj )�”}”(hŒ pgoff_t nr”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjƒ8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj€8ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j…8Œmodname”NŒ classname”Njpjs)�”}”jv]”j8Œ#c.clean_record_shared_mapping_range”†”asbuh1hhj|8ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡8h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj|8ubj)�”}”(hŒnr”h]”hŒnr”…”�”}”(hj¯8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj|8ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¾7ubj )�”}”(hŒpgoff_t bitmap_pgoff”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjË8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÈ8ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÍ8Œmodname”NŒ classname”Njpjs)�”}”jv]”j8Œ#c.clean_record_shared_mapping_range”†”asbuh1hhjÄ8ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé8h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÄ8ubj)�”}”(hŒ bitmap_pgoff”h]”hŒ bitmap_pgoff”…”�”}”(hj÷8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÄ8ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¾7ubj )�”}”(hŒunsigned long *bitmap”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj 9ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj 9ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj,9h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj 9ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:9h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj 9ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjH9h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj 9ubj)�”}”(hŒbitmap”h]”hŒbitmap”…”�”}”(hjU9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj 9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¾7ubj )�”}”(hŒpgoff_t *start”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjq9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjn9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”js9Œmodname”NŒ classname”Njpjs)�”}”jv]”j8Œ#c.clean_record_shared_mapping_range”†”asbuh1hhjj9ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�9h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjj9ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj�9h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjj9ubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjª9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjj9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¾7ubj )�”}”(hŒ pgoff_t *end”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjÆ9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÃ9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÈ9Œmodname”NŒ classname”Njpjs)�”}”jv]”j8Œ#c.clean_record_shared_mapping_range”†”asbuh1hhj¿9ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjä9h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¿9ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjò9h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¿9ubj)�”}”(hŒend”h]”hŒend”…”�”}”(hjÿ9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¿9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¾7ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hji7h²hh³j{7h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hje7h²hh³j{7h´Mubah}”(h]”j`7ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j{7h´Mhjb7h²hubj4)�”}”(hhh]”jM)�”}”(hŒ3Clean and record all ptes in an address space range”h]”hŒ3Clean and record all ptes in an address space range”…”�”}”(hj):h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Mhj&:h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjb7h²hh³j{7h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjA:jHjA:jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX¦**Parameters** ``struct address_space *mapping`` The address_space we want to clean ``pgoff_t first_index`` The first page offset in the range ``pgoff_t nr`` Number of incremental page offsets to cover ``pgoff_t bitmap_pgoff`` The page offset of the first bit in **bitmap** ``unsigned long *bitmap`` Pointer to a bitmap of at least **nr** bits. The bitmap needs to cover the whole range **first_index**..**first_index** + **nr**. ``pgoff_t *start`` Pointer to number of the first set bit in **bitmap**. is modified as new bits are set by the function. ``pgoff_t *end`` Pointer to the number of the last set bit in **bitmap**. none set. The value is modified as new bits are set by the function. **Description** When this function returns there is no guarantee that a CPU has not already dirtied new ptes. However it will not clean any ptes not reported in the bitmap. The guarantees are as follows: * All ptes dirty when the function starts executing will end up recorded in the bitmap. * All ptes dirtied after that will either remain dirty, be recorded in the bitmap or both. If a caller needs to make sure all dirty ptes are picked up and none additional are added, it first needs to write-protect the address-space range and make sure new writers are blocked in page_mkwrite() or pfn_mkwrite(). And then after a TLB flush following the write-protection pick up all dirty bits. This function currently skips transhuge page-table entries, since it's intended for dirty-tracking on the PTE level. It will warn on encountering transhuge dirty entries, though, and can easily be extended to handle them as well. **Return** The number of dirty ptes actually cleaned.”h]”(jM)�”}”(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&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´MhjE:ubj¤)�”}”(hhh]”(j©)�”}”(hŒE``struct address_space *mapping`` The address_space we want to clean ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjj:h]”hŒstruct address_space *mapping”…”�”}”(hjl:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjh:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Mhjd:ubjÉ)�”}”(hhh]”jM)�”}”(hŒ"The address_space we want to clean”h]”hŒ"The address_space we want to clean”…”�”}”(hjƒ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j:h´Mhj€:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjd:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j:h´Mhja:ubj©)�”}”(hŒ;``pgoff_t first_index`` The first page offset in the range ”h]”(j¯)�”}”(hŒ``pgoff_t first_index``”h]”jS)�”}”(hj£:h]”hŒpgoff_t first_index”…”�”}”(hj¥:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¡:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Mhj�:ubjÉ)�”}”(hhh]”jM)�”}”(hŒ"The first page offset in the range”h]”hŒ"The first page offset in the range”…”�”}”(hj¼:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¸:h´Mhj¹:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¸:h´Mhja:ubj©)�”}”(hŒ;``pgoff_t nr`` Number of incremental page offsets to cover ”h]”(j¯)�”}”(hŒ``pgoff_t nr``”h]”jS)�”}”(hjÜ:h]”hŒ pgoff_t nr”…”�”}”(hjÞ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÚ:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´MhjÖ:ubjÉ)�”}”(hhh]”jM)�”}”(hŒ+Number of incremental page offsets to cover”h]”hŒ+Number of incremental page offsets to cover”…”�”}”(hjõ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jñ:h´Mhjò:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÖ:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jñ:h´Mhja:ubj©)�”}”(hŒH``pgoff_t bitmap_pgoff`` The page offset of the first bit in **bitmap** ”h]”(j¯)�”}”(hŒ``pgoff_t bitmap_pgoff``”h]”jS)�”}”(hj;h]”hŒpgoff_t bitmap_pgoff”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Mhj;ubjÉ)�”}”(hhh]”jM)�”}”(hŒ.The page offset of the first bit in **bitmap**”h]”(hŒ$The page offset of the first bit in ”…”�”}”(hj.;h²hh³Nh´NubjŽ)�”}”(hŒ **bitmap**”h]”hŒbitmap”…”�”}”(hj6;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj.;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j*;h´Mhj+;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j*;h´Mhja:ubj©)�”}”(hŒœ``unsigned long *bitmap`` Pointer to a bitmap of at least **nr** bits. The bitmap needs to cover the whole range **first_index**..**first_index** + **nr**. ”h]”(j¯)�”}”(hŒ``unsigned long *bitmap``”h]”jS)�”}”(hj\;h]”hŒunsigned long *bitmap”…”�”}”(hj^;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjZ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´MhjV;ubjÉ)�”}”(hhh]”jM)�”}”(hŒ�Pointer to a bitmap of at least **nr** bits. The bitmap needs to cover the whole range **first_index**..**first_index** + **nr**.”h]”(hŒ Pointer to a bitmap of at least ”…”�”}”(hju;h²hh³Nh´NubjŽ)�”}”(hŒ**nr**”h]”hŒnr”…”�”}”(hj};h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hju;ubhŒ1 bits. The bitmap needs to cover the whole range ”…”�”}”(hju;h²hh³Nh´NubjŽ)�”}”(hŒ**first_index**”h]”hŒ first_index”…”�”}”(hj�;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hju;ubhŒ..**first_index** + ”…”�”}”(hju;h²hh³Nh´NubjŽ)�”}”(hŒ**nr**”h]”hŒnr”…”�”}”(hj¡;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hju;ubhŒ.”…”�”}”(hju;h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Mhjr;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjV;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jq;h´Mhja:ubj©)�”}”(hŒz``pgoff_t *start`` Pointer to number of the first set bit in **bitmap**. is modified as new bits are set by the function. ”h]”(j¯)�”}”(hŒ``pgoff_t *start``”h]”jS)�”}”(hjÌ;h]”hŒpgoff_t *start”…”�”}”(hjÎ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÊ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´MhjÆ;ubjÉ)�”}”(hhh]”jM)�”}”(hŒfPointer to number of the first set bit in **bitmap**. is modified as new bits are set by the function.”h]”(hŒ*Pointer to number of the first set bit in ”…”�”}”(hjå;h²hh³Nh´NubjŽ)�”}”(hŒ **bitmap**”h]”hŒbitmap”…”�”}”(hjí;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjå;ubhŒ2. is modified as new bits are set by the function.”…”�”}”(hjå;h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´Mhjâ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÆ;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³já;h´Mhja:ubj©)�”}”(hŒ�``pgoff_t *end`` Pointer to the number of the last set bit in **bitmap**. none set. The value is modified as new bits are set by the function. ”h]”(j¯)�”}”(hŒ``pgoff_t *end``”h]”jS)�”}”(hj<h]”hŒ pgoff_t *end”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´M!hj<ubjÉ)�”}”(hhh]”jM)�”}”(hŒ}Pointer to the number of the last set bit in **bitmap**. none set. The value is modified as new bits are set by the function.”h]”(hŒ-Pointer to the number of the last set bit in ”…”�”}”(hj1<h²hh³Nh´NubjŽ)�”}”(hŒ **bitmap**”h]”hŒbitmap”…”�”}”(hj9<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj1<ubhŒF. none set. The value is modified as new bits are set by the function.”…”�”}”(hj1<h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´M hj.<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j-<h´M!hja:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjE:ubjM)�”}”(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&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´M#hjE:ubjM)�”}”(hŒ»When this function returns there is no guarantee that a CPU has not already dirtied new ptes. However it will not clean any ptes not reported in the bitmap. The guarantees are as follows:”h]”hŒ»When this function returns there is no guarantee that a CPU has not already dirtied new ptes. However it will not clean any ptes not reported in the bitmap. The guarantees are as follows:”…”�”}”(hj|<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´M"hjE:ubjaW)�”}”(hhh]”(jÕ/)�”}”(hŒUAll ptes dirty when the function starts executing will end up recorded in the bitmap.”h]”jM)�”}”(hŒUAll ptes dirty when the function starts executing will end up recorded in the bitmap.”h]”hŒUAll ptes dirty when the function starts executing will end up recorded in the bitmap.”…”�”}”(hj’<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´M&hjŽ<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hj‹<ubjÕ/)�”}”(hŒYAll ptes dirtied after that will either remain dirty, be recorded in the bitmap or both. ”h]”jM)�”}”(hŒXAll ptes dirtied after that will either remain dirty, be recorded in the bitmap or both.”h]”hŒXAll ptes dirtied after that will either remain dirty, be recorded in the bitmap or both.”…”�”}”(hj«<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´M(hj§<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hj‹<ubeh}”(h]”h ]”h"]”h$]”h&]”jƒWjI uh1j`Wh³j <h´M&hjE:ubjM)�”}”(hX.If a caller needs to make sure all dirty ptes are picked up and none additional are added, it first needs to write-protect the address-space range and make sure new writers are blocked in page_mkwrite() or pfn_mkwrite(). And then after a TLB flush following the write-protection pick up all dirty bits.”h]”hX.If a caller needs to make sure all dirty ptes are picked up and none additional are added, it first needs to write-protect the address-space range and make sure new writers are blocked in page_mkwrite() or pfn_mkwrite(). And then after a TLB flush following the write-protection pick up all dirty bits.”…”�”}”(hjÆ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´M+hjE:ubjM)�”}”(hŒåThis function currently skips transhuge page-table entries, since it's intended for dirty-tracking on the PTE level. It will warn on encountering transhuge dirty entries, though, and can easily be extended to handle them as well.”h]”hŒçThis function currently skips transhuge page-table entries, since it’s intended for dirty-tracking on the PTE level. It will warn on encountering transhuge dirty entries, though, and can easily be extended to handle them as well.”…”�”}”(hjÕ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´M1hjE:ubjM)�”}”(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&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´M6hjE:ubjM)�”}”(hŒ*The number of dirty ptes actually cleaned.”h]”hŒ*The number of dirty ptes actually cleaned.”…”�”}”(hjü<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/mapping_dirty_helpers.c”h´M7hjE:ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubjK‰)�”}”(hŒ2#kernel-doc:: mm/memory-failure.c (build warnings)”h]”hŒ2#kernel-doc:: mm/memory-failure.c (build warnings)”…”�”}”hj=sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jJ‰hjÞÁh²hh³hÊh´K€ubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpcpu_addr_in_chunk (C function)”Œc.pcpu_addr_in_chunk”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ>bool pcpu_addr_in_chunk (struct pcpu_chunk *chunk, void *addr)”h]”hù)�”}”(hŒ=bool pcpu_addr_in_chunk(struct pcpu_chunk *chunk, void *addr)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hj9=h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj5=h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´KÐubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjG=h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj5=h²hh³jF=h´KÐubhÿ)�”}”(hŒpcpu_addr_in_chunk”h]”j)�”}”(hŒpcpu_addr_in_chunk”h]”hŒpcpu_addr_in_chunk”…”�”}”(hjY=h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjU=ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj5=h²hh³jF=h´KÐubj )�”}”(hŒ&(struct pcpu_chunk *chunk, void *addr)”h]”(j )�”}”(hŒstruct pcpu_chunk *chunk”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hju=h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjq=ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚=h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjq=ubh)�”}”(hhh]”j)�”}”(hŒ pcpu_chunk”h]”hŒ pcpu_chunk”…”�”}”(hj“=h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�=ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j•=Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj[=sbŒc.pcpu_addr_in_chunk”†”asbuh1hhjq=ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³=h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjq=ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÁ=h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjq=ubj)�”}”(hŒchunk”h]”hŒchunk”…”�”}”(hjÎ=h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjq=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjm=ubj )�”}”(hŒ void *addr”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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ã=ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjã=ubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjã=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjm=ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj5=h²hh³jF=h´KÐubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj1=h²hh³jF=h´KÐubah}”(h]”j,=ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jF=h´KÐhj.=h²hubj4)�”}”(hhh]”jM)�”}”(hŒ.check if the address is served from this chunk”h]”hŒ.check if the address is served from this chunk”…”�”}”(hj:>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´KÐhj7>h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj.=h²hh³jF=h´KÐubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjR>jHjR>jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ�**Parameters** ``struct pcpu_chunk *chunk`` chunk of interest ``void *addr`` percpu address **Return** True if the address is served from this chunk.”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´KÔhjV>ubj¤)�”}”(hhh]”(j©)�”}”(hŒ/``struct pcpu_chunk *chunk`` chunk of interest ”h]”(j¯)�”}”(hŒ``struct pcpu_chunk *chunk``”h]”jS)�”}”(hj{>h]”hŒstruct pcpu_chunk *chunk”…”�”}”(hj}>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjy>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´KÑhju>ubjÉ)�”}”(hhh]”jM)�”}”(hŒchunk of interest”h]”hŒchunk of interest”…”�”}”(hj”>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�>h´KÑhj‘>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhju>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�>h´KÑhjr>ubj©)�”}”(hŒ``void *addr`` percpu address ”h]”(j¯)�”}”(hŒ``void *addr``”h]”jS)�”}”(hj´>h]”hŒ void *addr”…”�”}”(hj¶>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj²>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´KÒhj®>ubjÉ)�”}”(hhh]”jM)�”}”(hŒpercpu address”h]”hŒpercpu address”…”�”}”(hjÍ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÉ>h´KÒhjÊ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj®>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÉ>h´KÒhjr>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjV>ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´KÔhjV>ubjM)�”}”(hŒ.True if the address is served from this chunk.”h]”hŒ.True if the address is served from this chunk.”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´KÔhjV>ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"pcpu_check_block_hint (C function)”Œc.pcpu_check_block_hint”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒPbool pcpu_check_block_hint (struct pcpu_block_md *block, int bits, size_t align)”h]”hù)�”}”(hŒObool pcpu_check_block_hint(struct pcpu_block_md *block, int bits, size_t align)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hj4?h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj0?h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M4ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjB?h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj0?h²hh³jA?h´M4ubhÿ)�”}”(hŒpcpu_check_block_hint”h]”j)�”}”(hŒpcpu_check_block_hint”h]”hŒpcpu_check_block_hint”…”�”}”(hjT?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjP?ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj0?h²hh³jA?h´M4ubj )�”}”(hŒ5(struct pcpu_block_md *block, int bits, size_t align)”h]”(j )�”}”(hŒstruct pcpu_block_md *block”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjp?h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjl?ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}?h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjl?ubh)�”}”(hhh]”j)�”}”(hŒ pcpu_block_md”h]”hŒ pcpu_block_md”…”�”}”(hjŽ?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‹?ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j�?Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljV?sbŒc.pcpu_check_block_hint”†”asbuh1hhjl?ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®?h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjl?ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¼?h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjl?ubj)�”}”(hŒblock”h]”hŒblock”…”�”}”(hjÉ?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjl?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjh?ubj )�”}”(hŒint bits”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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Þ?ubj)�”}”(hŒbits”h]”hŒbits”…”�”}”(hjþ?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÞ?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjh?ubj )�”}”(hŒ size_t align”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j@Œmodname”NŒ classname”Njpjs)�”}”jv]”jª?Œc.pcpu_check_block_hint”†”asbuh1hhj@ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8@h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj@ubj)�”}”(hŒalign”h]”hŒalign”…”�”}”(hjF@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjh?ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj0?h²hh³jA?h´M4ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj,?h²hh³jA?h´M4ubah}”(h]”j'?ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jA?h´M4hj)?h²hubj4)�”}”(hhh]”jM)�”}”(hŒcheck against the contig hint”h]”hŒcheck against the contig hint”…”�”}”(hjp@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M4hjm@h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj)?h²hh³jA?h´M4ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjˆ@jHjˆ@jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXV**Parameters** ``struct pcpu_block_md *block`` block of interest ``int bits`` size of allocation ``size_t align`` alignment of area (max PAGE_SIZE) **Description** Check to see if the allocation can fit in the block's contig hint. Note, a chunk uses the same hints as a block so this can also check against the chunk's contig hint.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj’@h]”hŒ Parameters”…”�”}”(hj”@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M8hjŒ@ubj¤)�”}”(hhh]”(j©)�”}”(hŒ2``struct pcpu_block_md *block`` block of interest ”h]”(j¯)�”}”(hŒ``struct pcpu_block_md *block``”h]”jS)�”}”(hj±@h]”hŒstruct pcpu_block_md *block”…”�”}”(hj³@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¯@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M5hj«@ubjÉ)�”}”(hhh]”jM)�”}”(hŒblock of interest”h]”hŒblock of interest”…”�”}”(hjÊ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÆ@h´M5hjÇ@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj«@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÆ@h´M5hj¨@ubj©)�”}”(hŒ ``int bits`` size of allocation ”h]”(j¯)�”}”(hŒ ``int bits``”h]”jS)�”}”(hjê@h]”hŒint bits”…”�”}”(hjì@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjè@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M6hjä@ubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of allocation”h]”hŒsize of allocation”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÿ@h´M6hjAubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjä@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÿ@h´M6hj¨@ubj©)�”}”(hŒ3``size_t align`` alignment of area (max PAGE_SIZE) ”h]”(j¯)�”}”(hŒ``size_t align``”h]”jS)�”}”(hj#Ah]”hŒ size_t align”…”�”}”(hj%Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj!Aubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M7hjAubjÉ)�”}”(hhh]”jM)�”}”(hŒ!alignment of area (max PAGE_SIZE)”h]”hŒ!alignment of area (max PAGE_SIZE)”…”�”}”(hjcontig_hint and performs aggregation across blocks to find the next hint. It modifies bit_off and bits in-place to be consumed in the loop.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj Ch]”hŒ Parameters”…”�”}”(hj Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjCubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MghjCubj¤)�”}”(hhh]”(j©)�”}”(hŒ/``struct pcpu_chunk *chunk`` chunk of interest ”h]”(j¯)�”}”(hŒ``struct pcpu_chunk *chunk``”h]”jS)�”}”(hj(Ch]”hŒstruct pcpu_chunk *chunk”…”�”}”(hj*Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj&Cubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mdhj"CubjÉ)�”}”(hhh]”jM)�”}”(hŒchunk of interest”h]”hŒchunk of interest”…”�”}”(hjACh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j=Ch´Mdhj>Cubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj"Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j=Ch´MdhjCubj©)�”}”(hŒ``int *bit_off`` chunk offset ”h]”(j¯)�”}”(hŒ``int *bit_off``”h]”jS)�”}”(hjaCh]”hŒ int *bit_off”…”�”}”(hjcCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj_Cubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mehj[CubjÉ)�”}”(hhh]”jM)�”}”(hŒ chunk offset”h]”hŒ chunk offset”…”�”}”(hjzCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jvCh´MehjwCubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj[Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jvCh´MehjCubj©)�”}”(hŒ ``int *bits`` size of free area ”h]”(j¯)�”}”(hŒ ``int *bits``”h]”jS)�”}”(hjšCh]”hŒ int *bits”…”�”}”(hjœCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj˜Cubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mfhj”CubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of free area”h]”hŒsize of free area”…”�”}”(hj³Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¯Ch´Mfhj°Cubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj”Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¯Ch´MfhjCubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjCubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MhhjCubjM)�”}”(hŒÐHelper function for pcpu_for_each_md_free_region. It checks block->contig_hint and performs aggregation across blocks to find the next hint. It modifies bit_off and bits in-place to be consumed in the loop.”h]”hŒÐHelper function for pcpu_for_each_md_free_region. It checks block->contig_hint and performs aggregation across blocks to find the next hint. It modifies bit_off and bits in-place to be consumed in the loop.”…”�”}”(hjëCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MghjCubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!pcpu_next_fit_region (C function)”Œc.pcpu_next_fit_region”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒhvoid pcpu_next_fit_region (struct pcpu_chunk *chunk, int alloc_bits, int align, int *bit_off, int *bits)”h]”hù)�”}”(hŒgvoid pcpu_next_fit_region(struct pcpu_chunk *chunk, int alloc_bits, int align, int *bit_off, int *bits)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjDh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M—ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)Dh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjDh²hh³j(Dh´M—ubhÿ)�”}”(hŒpcpu_next_fit_region”h]”j)�”}”(hŒpcpu_next_fit_region”h]”hŒpcpu_next_fit_region”…”�”}”(hj;Dh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7Dubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjDh²hh³j(Dh´M—ubj )�”}”(hŒN(struct pcpu_chunk *chunk, int alloc_bits, int align, int *bit_off, int *bits)”h]”(j )�”}”(hŒstruct pcpu_chunk *chunk”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjWDh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjSDubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdDh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjSDubh)�”}”(hhh]”j)�”}”(hŒ pcpu_chunk”h]”hŒ pcpu_chunk”…”�”}”(hjuDh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjrDubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jwDŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj=DsbŒc.pcpu_next_fit_region”†”asbuh1hhjSDubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•Dh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjSDubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj£Dh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjSDubj)�”}”(hŒchunk”h]”hŒchunk”…”�”}”(hj°Dh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjSDubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjODubj )�”}”(hŒint alloc_bits”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjÉDh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÅDubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×Dh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÅDubj)�”}”(hŒ alloc_bits”h]”hŒ alloc_bits”…”�”}”(hjåDh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÅDubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjODubj )�”}”(hŒ int align”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjþDh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjúDubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Eh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjúDubj)�”}”(hŒalign”h]”hŒalign”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjúDubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjODubj )�”}”(hŒ int *bit_off”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj3Eh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj/EubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAEh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj/EubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjOEh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj/Eubj)�”}”(hŒbit_off”h]”hŒbit_off”…”�”}”(hj\Eh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj/Eubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjODubj )�”}”(hŒ int *bits”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjuEh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjqEubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒEh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjqEubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj‘Eh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjqEubj)�”}”(hŒbits”h]”hŒbits”…”�”}”(hjžEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjqEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjODubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjDh²hh³j(Dh´M—ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjDh²hh³j(Dh´M—ubah}”(h]”j Dah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j(Dh´M—hjDh²hubj4)�”}”(hhh]”jM)�”}”(hŒ.finds fit areas for a given allocation request”h]”hŒ.finds fit areas for a given allocation request”…”�”}”(hjÈEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M—hjÅEh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjDh²hh³j(Dh´M—ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjàEjHjàEjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX!**Parameters** ``struct pcpu_chunk *chunk`` chunk of interest ``int alloc_bits`` size of allocation ``int align`` alignment of area (max PAGE_SIZE) ``int *bit_off`` chunk offset ``int *bits`` size of free area **Description** Finds the next free region that is viable for use with a given size and alignment. This only returns if there is a valid area to be used for this allocation. block->first_free is returned if the allocation request fits within the block to see if the request can be fulfilled prior to the contig hint.”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M›hjäEubj¤)�”}”(hhh]”(j©)�”}”(hŒ/``struct pcpu_chunk *chunk`` chunk of interest ”h]”(j¯)�”}”(hŒ``struct pcpu_chunk *chunk``”h]”jS)�”}”(hj Fh]”hŒstruct pcpu_chunk *chunk”…”�”}”(hj Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjFubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M˜hjFubjÉ)�”}”(hhh]”jM)�”}”(hŒchunk of interest”h]”hŒchunk of interest”…”�”}”(hj"Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jFh´M˜hjFubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjFubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jFh´M˜hjFubj©)�”}”(hŒ&``int alloc_bits`` size of allocation ”h]”(j¯)�”}”(hŒ``int alloc_bits``”h]”jS)�”}”(hjBFh]”hŒint alloc_bits”…”�”}”(hjDFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj@Fubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M™hjfirst_free is returned if the allocation request fits within the block to see if the request can be fulfilled prior to the contig hint.”h]”hX.Finds the next free region that is viable for use with a given size and alignment. This only returns if there is a valid area to be used for this allocation. block->first_free is returned if the allocation request fits within the block to see if the request can be fulfilled prior to the contig hint.”…”�”}”(hj>Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.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”]”(héŒpcpu_mem_zalloc (C function)”Œc.pcpu_mem_zalloc”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ/void * pcpu_mem_zalloc (size_t size, gfp_t gfp)”h]”hù)�”}”(hŒ-void *pcpu_mem_zalloc(size_t size, gfp_t gfp)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjmGh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjiGh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MìubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|Gh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjiGh²hh³j{Gh´MìubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjŠGh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjiGh²hh³j{Gh´Mìubhÿ)�”}”(hŒpcpu_mem_zalloc”h]”j)�”}”(hŒpcpu_mem_zalloc”h]”hŒpcpu_mem_zalloc”…”�”}”(hj›Gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj—Gubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjiGh²hh³j{Gh´Mìubj )�”}”(hŒ(size_t size, gfp_t gfp)”h]”(j )�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjºGh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj·Gubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¼GŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj�GsbŒc.pcpu_mem_zalloc”†”asbuh1hhj³GubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚGh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj³Gubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjèGh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj³Gubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¯Gubj )�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjHubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jHŒmodname”NŒ classname”Njpjs)�”}”jv]”jÖGŒc.pcpu_mem_zalloc”†”asbuh1hhjýGubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"Hh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjýGubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj0Hh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjýGubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¯Gubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjiGh²hh³j{Gh´Mìubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjeGh²hh³j{Gh´Mìubah}”(h]”j`Gah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j{Gh´MìhjbGh²hubj4)�”}”(hhh]”jM)�”}”(hŒallocate memory”h]”hŒallocate memory”…”�”}”(hjZHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MìhjWHh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjbGh²hh³j{Gh´Mìubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjrHjHjrHjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX“**Parameters** ``size_t size`` bytes to allocate ``gfp_t gfp`` allocation flags **Description** Allocate **size** bytes. If **size** is smaller than PAGE_SIZE, kzalloc() is used; otherwise, the equivalent of vzalloc() is used. This is to facilitate passing through whitelisted flags. The returned memory is always zeroed. **Return** Pointer to the allocated area on success, NULL on failure.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj|Hh]”hŒ Parameters”…”�”}”(hj~Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjzHubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MðhjvHubj¤)�”}”(hhh]”(j©)�”}”(hŒ"``size_t size`` bytes to allocate ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hj›Hh]”hŒ size_t size”…”�”}”(hj�Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj™Hubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Míhj•HubjÉ)�”}”(hhh]”jM)�”}”(hŒbytes to allocate”h]”hŒbytes to allocate”…”�”}”(hj´Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j°Hh´Míhj±Hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj•Hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j°Hh´Míhj’Hubj©)�”}”(hŒ``gfp_t gfp`` allocation flags ”h]”(j¯)�”}”(hŒ ``gfp_t gfp``”h]”jS)�”}”(hjÔHh]”hŒ gfp_t gfp”…”�”}”(hjÖHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÒHubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MîhjÎHubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation flags”h]”hŒallocation flags”…”�”}”(hjíHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jéHh´MîhjêHubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÎHubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jéHh´Mîhj’Hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjvHubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjIh]”hŒ Description”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj Iubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MðhjvHubjM)�”}”(hŒãAllocate **size** bytes. If **size** is smaller than PAGE_SIZE, kzalloc() is used; otherwise, the equivalent of vzalloc() is used. This is to facilitate passing through whitelisted flags. The returned memory is always zeroed.”h]”(hŒ Allocate ”…”�”}”(hj%Ih²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj-Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj%IubhŒ bytes. If ”…”�”}”(hj%Ih²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj?Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj%IubhŒ¾ is smaller than PAGE_SIZE, kzalloc() is used; otherwise, the equivalent of vzalloc() is used. This is to facilitate passing through whitelisted flags. The returned memory is always zeroed.”…”�”}”(hj%Ih²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MïhjvHubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjZIh]”hŒReturn”…”�”}”(hj\Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjXIubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MôhjvHubjM)�”}”(hŒ:Pointer to the allocated area on success, NULL on failure.”h]”hŒ:Pointer to the allocated area on success, NULL on failure.”…”�”}”(hjpIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MõhjvHubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpcpu_mem_free (C function)”Œc.pcpu_mem_free”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒvoid pcpu_mem_free (void *ptr)”h]”hù)�”}”(hŒvoid pcpu_mem_free(void *ptr)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjŸIh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj›Ih²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®Ih²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj›Ih²hh³j­Ih´Mubhÿ)�”}”(hŒ pcpu_mem_free”h]”j)�”}”(hŒ pcpu_mem_free”h]”hŒ pcpu_mem_free”…”�”}”(hjÀIh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¼Iubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj›Ih²hh³j­Ih´Mubj )�”}”(hŒ (void *ptr)”h]”j )�”}”(hŒ void *ptr”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÜIh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjØIubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêIh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjØIubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjøIh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjØIubj)�”}”(hŒptr”h]”hŒptr”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjØIubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÔIubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj›Ih²hh³j­Ih´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj—Ih²hh³j­Ih´Mubah}”(h]”j’Iah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j­Ih´Mhj”Ih²hubj4)�”}”(hhh]”jM)�”}”(hŒ free memory”h]”hŒ free memory”…”�”}”(hj/Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mhj,Jh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj”Ih²hh³j­Ih´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjGJjHjGJjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ‹**Parameters** ``void *ptr`` memory to free **Description** Free **ptr**. **ptr** should have been allocated using pcpu_mem_zalloc().”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjQJh]”hŒ Parameters”…”�”}”(hjSJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjOJubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MhjKJubj¤)�”}”(hhh]”j©)�”}”(hŒ``void *ptr`` memory to free ”h]”(j¯)�”}”(hŒ ``void *ptr``”h]”jS)�”}”(hjpJh]”hŒ void *ptr”…”�”}”(hjrJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjnJubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MhjjJubjÉ)�”}”(hhh]”jM)�”}”(hŒmemory to free”h]”hŒmemory to free”…”�”}”(hj‰Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j…Jh´Mhj†Jubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjjJubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j…Jh´MhjgJubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjKJubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MhjKJubjM)�”}”(hŒJFree **ptr**. **ptr** should have been allocated using pcpu_mem_zalloc().”h]”(hŒFree ”…”�”}”(hjÁJh²hh³Nh´NubjŽ)�”}”(hŒ**ptr**”h]”hŒptr”…”�”}”(hjÉJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÁJubhŒ. ”…”�”}”(hjÁJh²hh³Nh´NubjŽ)�”}”(hŒ**ptr**”h]”hŒptr”…”�”}”(hjÛJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÁJubhŒ4 should have been allocated using pcpu_mem_zalloc().”…”�”}”(hjÁJh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MhjKJubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ pcpu_chunk_relocate (C function)”Œc.pcpu_chunk_relocate”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ>void pcpu_chunk_relocate (struct pcpu_chunk *chunk, int oslot)”h]”hù)�”}”(hŒ=void pcpu_chunk_relocate(struct pcpu_chunk *chunk, int oslot)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjKh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#Kh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjKh²hh³j"Kh´Mubhÿ)�”}”(hŒpcpu_chunk_relocate”h]”j)�”}”(hŒpcpu_chunk_relocate”h]”hŒpcpu_chunk_relocate”…”�”}”(hj5Kh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj1Kubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjKh²hh³j"Kh´Mubj )�”}”(hŒ%(struct pcpu_chunk *chunk, int oslot)”h]”(j )�”}”(hŒstruct pcpu_chunk *chunk”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjQKh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjMKubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^Kh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjMKubh)�”}”(hhh]”j)�”}”(hŒ pcpu_chunk”h]”hŒ pcpu_chunk”…”�”}”(hjoKh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjlKubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jqKŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj7KsbŒc.pcpu_chunk_relocate”†”asbuh1hhjMKubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Kh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjMKubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj�Kh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjMKubj)�”}”(hŒchunk”h]”hŒchunk”…”�”}”(hjªKh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjMKubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjIKubj )�”}”(hŒ int oslot”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjÃKh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¿KubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑKh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¿Kubj)�”}”(hŒoslot”h]”hŒoslot”…”�”}”(hjßKh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¿Kubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjIKubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjKh²hh³j"Kh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj Kh²hh³j"Kh´Mubah}”(h]”jKah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j"Kh´Mhj Kh²hubj4)�”}”(hhh]”jM)�”}”(hŒ'put chunk in the appropriate chunk slot”h]”hŒ'put chunk in the appropriate chunk slot”…”�”}”(hj Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MhjLh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj Kh²hh³j"Kh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj!LjHj!LjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXt**Parameters** ``struct pcpu_chunk *chunk`` chunk of interest ``int oslot`` the previous slot it was on **Description** This function is called after an allocation or free changed **chunk**. New slot according to the changed state is determined and **chunk** is moved to the slot. Note that the reserved chunk is never put on chunk slots. **Context** pcpu_lock.”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M#hj%Lubj¤)�”}”(hhh]”(j©)�”}”(hŒ/``struct pcpu_chunk *chunk`` chunk of interest ”h]”(j¯)�”}”(hŒ``struct pcpu_chunk *chunk``”h]”jS)�”}”(hjJLh]”hŒstruct pcpu_chunk *chunk”…”�”}”(hjLLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjHLubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M hjDLubjÉ)�”}”(hhh]”jM)�”}”(hŒchunk of interest”h]”hŒchunk of interest”…”�”}”(hjcLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j_Lh´M hj`Lubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjDLubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j_Lh´M hjALubj©)�”}”(hŒ*``int oslot`` the previous slot it was on ”h]”(j¯)�”}”(hŒ ``int oslot``”h]”jS)�”}”(hjƒLh]”hŒ int oslot”…”�”}”(hj…Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�Lubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M!hj}LubjÉ)�”}”(hhh]”jM)�”}”(hŒthe previous slot it was on”h]”hŒthe previous slot it was on”…”�”}”(hjœLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j˜Lh´M!hj™Lubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj}Lubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j˜Lh´M!hjALubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj%LubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M#hj%LubjM)�”}”(hŒÛThis function is called after an allocation or free changed **chunk**. New slot according to the changed state is determined and **chunk** is moved to the slot. Note that the reserved chunk is never put on chunk slots.”h]”(hŒcontig_hint. chunk_md->contig_hint may be off by up to a page, but it will never be more than the available space. If the contig hint is contained in one block, it will be accurate.”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M¶hjWubj¤)�”}”(hhh]”(j©)�”}”(hŒ/``struct pcpu_chunk *chunk`` chunk of interest ”h]”(j¯)�”}”(hŒ``struct pcpu_chunk *chunk``”h]”jS)�”}”(hjAWh]”hŒstruct pcpu_chunk *chunk”…”�”}”(hjCWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj?Wubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M³hj;WubjÉ)�”}”(hhh]”jM)�”}”(hŒchunk of interest”h]”hŒchunk of interest”…”�”}”(hjZWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jVWh´M³hjWWubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj;Wubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jVWh´M³hj8Wubj©)�”}”(hŒ``int bit_off`` chunk offset ”h]”(j¯)�”}”(hŒ``int bit_off``”h]”jS)�”}”(hjzWh]”hŒ int bit_off”…”�”}”(hj|Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjxWubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M´hjtWubjÉ)�”}”(hhh]”jM)�”}”(hŒ chunk offset”h]”hŒ chunk offset”…”�”}”(hj“Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�Wh´M´hj�Wubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjtWubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�Wh´M´hj8Wubj©)�”}”(hŒ``int bits`` size of request ”h]”(j¯)�”}”(hŒ ``int bits``”h]”jS)�”}”(hj³Wh]”hŒint bits”…”�”}”(hjµWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj±Wubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mµhj­WubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of request”h]”hŒsize of request”…”�”}”(hjÌWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÈWh´MµhjÉWubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj­Wubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÈWh´Mµhj8Wubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjWubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M·hjWubjM)�”}”(hŒøUpdates metadata for the allocation path. This avoids a blind block refresh by making use of the block contig hints. If this fails, it scans forward and backward to determine the extent of the free area. This is capped at the boundary of blocks.”h]”hŒøUpdates metadata for the allocation path. This avoids a blind block refresh by making use of the block contig hints. If this fails, it scans forward and backward to determine the extent of the free area. This is capped at the boundary of blocks.”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M¶hjWubjM)�”}”(hXuA chunk update is triggered if a page becomes free, a block becomes free, or the free spans across blocks. This tradeoff is to minimize iterating over the block metadata to update chunk_md->contig_hint. chunk_md->contig_hint may be off by up to a page, but it will never be more than the available space. If the contig hint is contained in one block, it will be accurate.”h]”hXuA chunk update is triggered if a page becomes free, a block becomes free, or the free spans across blocks. This tradeoff is to minimize iterating over the block metadata to update chunk_md->contig_hint. chunk_md->contig_hint may be off by up to a page, but it will never be more than the available space. If the contig hint is contained in one block, it will be accurate.”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M»hjWubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpcpu_is_populated (C function)”Œc.pcpu_is_populated”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒWbool pcpu_is_populated (struct pcpu_chunk *chunk, int bit_off, int bits, int *next_off)”h]”hù)�”}”(hŒVbool pcpu_is_populated(struct pcpu_chunk *chunk, int bit_off, int bits, int *next_off)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjBXh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj>Xh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M%ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPXh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj>Xh²hh³jOXh´M%ubhÿ)�”}”(hŒpcpu_is_populated”h]”j)�”}”(hŒpcpu_is_populated”h]”hŒpcpu_is_populated”…”�”}”(hjbXh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj^Xubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj>Xh²hh³jOXh´M%ubj )�”}”(hŒ@(struct pcpu_chunk *chunk, int bit_off, int bits, int *next_off)”h]”(j )�”}”(hŒstruct pcpu_chunk *chunk”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj~Xh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjzXubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹Xh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjzXubh)�”}”(hhh]”j)�”}”(hŒ pcpu_chunk”h]”hŒ pcpu_chunk”…”�”}”(hjœXh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™Xubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jžXŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljdXsbŒc.pcpu_is_populated”†”asbuh1hhjzXubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼Xh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjzXubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÊXh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjzXubj)�”}”(hŒchunk”h]”hŒchunk”…”�”}”(hj×Xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjzXubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjvXubj )�”}”(hŒ int bit_off”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjðXh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjìXubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþXh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjìXubj)�”}”(hŒbit_off”h]”hŒbit_off”…”�”}”(hj Yh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjìXubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjvXubj )�”}”(hŒint bits”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj%Yh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj!YubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3Yh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj!Yubj)�”}”(hŒbits”h]”hŒbits”…”�”}”(hjAYh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj!Yubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjvXubj )�”}”(hŒ int *next_off”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjZYh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjVYubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhYh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjVYubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjvYh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjVYubj)�”}”(hŒnext_off”h]”hŒnext_off”…”�”}”(hjƒYh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjVYubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjvXubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj>Xh²hh³jOXh´M%ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj:Xh²hh³jOXh´M%ubah}”(h]”j5Xah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jOXh´M%hj7Xh²hubj4)�”}”(hhh]”jM)�”}”(hŒ%determines if the region is populated”h]”hŒ%determines if the region is populated”…”�”}”(hj­Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M%hjªYh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj7Xh²hh³jOXh´M%ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÅYjHjÅYjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX–**Parameters** ``struct pcpu_chunk *chunk`` chunk of interest ``int bit_off`` chunk offset ``int bits`` size of area ``int *next_off`` return value for the next offset to start searching **Description** For atomic allocations, check if the backing pages are populated. **Return** Bool if the backing pages are populated. next_index is to skip over unpopulated blocks in pcpu_find_block_fit.”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M)hjÉYubj¤)�”}”(hhh]”(j©)�”}”(hŒ/``struct pcpu_chunk *chunk`` chunk of interest ”h]”(j¯)�”}”(hŒ``struct pcpu_chunk *chunk``”h]”jS)�”}”(hjîYh]”hŒstruct pcpu_chunk *chunk”…”�”}”(hjðYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjìYubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M&hjèYubjÉ)�”}”(hhh]”jM)�”}”(hŒchunk of interest”h]”hŒchunk of interest”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jZh´M&hjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjèYubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jZh´M&hjåYubj©)�”}”(hŒ``int bit_off`` chunk offset ”h]”(j¯)�”}”(hŒ``int bit_off``”h]”jS)�”}”(hj'Zh]”hŒ int bit_off”…”�”}”(hj)Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj%Zubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M'hj!ZubjÉ)�”}”(hhh]”jM)�”}”(hŒ chunk offset”h]”hŒ chunk offset”…”�”}”(hj@Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jfirst_free. This is an attempt to fill the allocation prior to breaking the contig hint. The allocation and boundary maps are updated accordingly if it confirms a valid free area. **Return** Allocated addr offset in **chunk** on success. -1 if no matching area is found.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjØ_h]”hŒ Parameters”…”�”}”(hjÚ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÖ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M²hjÒ_ubj¤)�”}”(hhh]”(j©)�”}”(hŒ/``struct pcpu_chunk *chunk`` chunk of interest ”h]”(j¯)�”}”(hŒ``struct pcpu_chunk *chunk``”h]”jS)�”}”(hj÷_h]”hŒstruct pcpu_chunk *chunk”…”�”}”(hjù_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjõ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M¯hjñ_ubjÉ)�”}”(hhh]”jM)�”}”(hŒchunk of interest”h]”hŒchunk of interest”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j `h´M¯hj `ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjñ_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j `h´M¯hjî_ubj©)�”}”(hŒ7``int alloc_bits`` size of request in allocation units ”h]”(j¯)�”}”(hŒ``int alloc_bits``”h]”jS)�”}”(hj0`h]”hŒint alloc_bits”…”�”}”(hj2`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj.`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M°hj*`ubjÉ)�”}”(hhh]”jM)�”}”(hŒ#size of request in allocation units”h]”hŒ#size of request in allocation units”…”�”}”(hjI`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jE`h´M°hjF`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj*`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jE`h´M°hjî_ubj©)�”}”(hŒ3``size_t align`` alignment of area (max PAGE_SIZE) ”h]”(j¯)�”}”(hŒ``size_t align``”h]”jS)�”}”(hji`h]”hŒ size_t align”…”�”}”(hjk`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjg`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M±hjc`ubjÉ)�”}”(hhh]”jM)�”}”(hŒ!alignment of area (max PAGE_SIZE)”h]”hŒ!alignment of area (max PAGE_SIZE)”…”�”}”(hj‚`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j~`h´M±hj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjc`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j~`h´M±hjî_ubj©)�”}”(hŒ)``int start`` bit_off to start searching ”h]”(j¯)�”}”(hŒ ``int start``”h]”jS)�”}”(hj¢`h]”hŒ int start”…”�”}”(hj¤`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj `ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M²hjœ`ubjÉ)�”}”(hhh]”jM)�”}”(hŒbit_off to start searching”h]”hŒbit_off to start searching”…”�”}”(hj»`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j·`h´M²hj¸`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjœ`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j·`h´M²hjî_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÒ_ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÝ`h]”hŒ Description”…”�”}”(hjß`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÛ`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M´hjÒ_ubjM)�”}”(hX£This function takes in a **start** offset to begin searching to fit an allocation of **alloc_bits** with alignment **align**. It needs to scan the allocation map because if it fits within the block's contig hint, **start** will be block->first_free. This is an attempt to fill the allocation prior to breaking the contig hint. The allocation and boundary maps are updated accordingly if it confirms a valid free area.”h]”(hŒThis function takes in a ”…”�”}”(hjó`h²hh³Nh´NubjŽ)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hjû`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjó`ubhŒ3 offset to begin searching to fit an allocation of ”…”�”}”(hjó`h²hh³Nh´NubjŽ)�”}”(hŒ**alloc_bits**”h]”hŒ alloc_bits”…”�”}”(hj ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjó`ubhŒ with alignment ”…”�”}”(hjó`h²hh³Nh´NubjŽ)�”}”(hŒ **align**”h]”hŒalign”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjó`ubhŒ\. It needs to scan the allocation map because if it fits within the block’s contig hint, ”…”�”}”(hjó`h²hh³Nh´NubjŽ)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hj1ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjó`ubhŒÄ will be block->first_free. This is an attempt to fill the allocation prior to breaking the contig hint. The allocation and boundary maps are updated accordingly if it confirms a valid free area.”…”�”}”(hjó`h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M³hjÒ_ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjLah]”hŒReturn”…”�”}”(hjNah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjJaubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M»hjÒ_ubjM)�”}”(hŒOAllocated addr offset in **chunk** on success. -1 if no matching area is found.”h]”(hŒAllocated addr offset in ”…”�”}”(hjbah²hh³Nh´NubjŽ)�”}”(hŒ **chunk**”h]”hŒchunk”…”�”}”(hjjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjbaubhŒ- on success. -1 if no matching area is found.”…”�”}”(hjbah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.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”]”(héŒpcpu_free_area (C function)”Œc.pcpu_free_area”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ6int pcpu_free_area (struct pcpu_chunk *chunk, int off)”h]”hù)�”}”(hŒ5int pcpu_free_area(struct pcpu_chunk *chunk, int off)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj£ah²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjŸah²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MòubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²ah²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŸah²hh³j±ah´Mòubhÿ)�”}”(hŒpcpu_free_area”h]”j)�”}”(hŒpcpu_free_area”h]”hŒpcpu_free_area”…”�”}”(hjÄah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÀaubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjŸah²hh³j±ah´Mòubj )�”}”(hŒ#(struct pcpu_chunk *chunk, int off)”h]”(j )�”}”(hŒstruct pcpu_chunk *chunk”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjàah²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÜaubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíah²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÜaubh)�”}”(hhh]”j)�”}”(hŒ pcpu_chunk”h]”hŒ pcpu_chunk”…”�”}”(hjþah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjûaubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jbŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÆasbŒc.pcpu_free_area”†”asbuh1hhjÜaubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÜaubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj,bh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÜaubj)�”}”(hŒchunk”h]”hŒchunk”…”�”}”(hj9bh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÜaubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjØaubj )�”}”(hŒint off”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjRbh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjNbubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`bh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjNbubj)�”}”(hŒoff”h]”hŒoff”…”�”}”(hjnbh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjNbubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjØaubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjŸah²hh³j±ah´Mòubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj›ah²hh³j±ah´Mòubah}”(h]”j–aah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j±ah´Mòhj˜ah²hubj4)�”}”(hhh]”jM)�”}”(hŒfrees the corresponding offset”h]”hŒfrees the corresponding offset”…”�”}”(hj˜bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mòhj•bh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj˜ah²hh³j±ah´Mòubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj°bjHj°bjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``struct pcpu_chunk *chunk`` chunk of interest ``int off`` addr offset into chunk **Description** This function determines the size of an allocation to free using the boundary bitmap and clears the allocation map. **Return** Number of freed bytes.”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Möhj´bubj¤)�”}”(hhh]”(j©)�”}”(hŒ/``struct pcpu_chunk *chunk`` chunk of interest ”h]”(j¯)�”}”(hŒ``struct pcpu_chunk *chunk``”h]”jS)�”}”(hjÙbh]”hŒstruct pcpu_chunk *chunk”…”�”}”(hjÛbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj×bubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MóhjÓbubjÉ)�”}”(hhh]”jM)�”}”(hŒchunk of interest”h]”hŒchunk of interest”…”�”}”(hjòbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jîbh´Móhjïbubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÓbubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jîbh´MóhjÐbubj©)�”}”(hŒ#``int off`` addr offset into chunk ”h]”(j¯)�”}”(hŒ ``int off``”h]”jS)�”}”(hjch]”hŒint off”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjcubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Môhj cubjÉ)�”}”(hhh]”jM)�”}”(hŒaddr offset into chunk”h]”hŒaddr offset into chunk”…”�”}”(hj+ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j'ch´Môhj(cubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj cubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j'ch´MôhjÐbubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj´bubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjMch]”hŒ Description”…”�”}”(hjOch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjKcubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Möhj´bubjM)�”}”(hŒsThis function determines the size of an allocation to free using the boundary bitmap and clears the allocation map.”h]”hŒsThis function determines the size of an allocation to free using the boundary bitmap and clears the allocation map.”…”�”}”(hjcch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mõhj´bubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjtch]”hŒReturn”…”�”}”(hjvch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjrcubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Møhj´bubjM)�”}”(hŒNumber of freed bytes.”h]”hŒNumber of freed bytes.”…”�”}”(hjŠch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.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”]”(héŒ#pcpu_alloc_first_chunk (C function)”Œc.pcpu_alloc_first_chunk”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒQstruct pcpu_chunk * pcpu_alloc_first_chunk (unsigned long tmp_addr, int map_size)”h]”hù)�”}”(hŒOstruct pcpu_chunk *pcpu_alloc_first_chunk(unsigned long tmp_addr, int map_size)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¹ch²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjµch²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M;ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇch²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjµch²hh³jÆch´M;ubh)�”}”(hhh]”j)�”}”(hŒ pcpu_chunk”h]”hŒ pcpu_chunk”…”�”}”(hjØch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕcubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÚcŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒpcpu_alloc_first_chunk”sbŒc.pcpu_alloc_first_chunk”†”asbuh1hhjµch²hh³jÆch´M;ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùch²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjµch²hh³jÆch´M;ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjµch²hh³jÆch´M;ubhÿ)�”}”(hŒpcpu_alloc_first_chunk”h]”j)�”}”(hjöch]”hŒpcpu_alloc_first_chunk”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjdubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjµch²hh³jÆch´M;ubj )�”}”(hŒ&(unsigned long tmp_addr, int map_size)”h]”(j )�”}”(hŒunsigned long tmp_addr”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj3dh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj/dubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAdh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj/dubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjOdh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj/dubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]dh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj/dubj)�”}”(hŒtmp_addr”h]”hŒtmp_addr”…”�”}”(hjkdh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj/dubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj+dubj )�”}”(hŒ int map_size”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj„dh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj€dubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’dh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj€dubj)�”}”(hŒmap_size”h]”hŒmap_size”…”�”}”(hj dh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj€dubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj+dubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjµch²hh³jÆch´M;ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj±ch²hh³jÆch´M;ubah}”(h]”j¬cah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÆch´M;hj®ch²hubj4)�”}”(hhh]”jM)�”}”(hŒ)creates chunks that serve the first chunk”h]”hŒ)creates chunks that serve the first chunk”…”�”}”(hjÊdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M;hjÇdh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj®ch²hh³jÆch´M;ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjâdjHjâdjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXÿ**Parameters** ``unsigned long tmp_addr`` the start of the region served ``int map_size`` size of the region served **Description** This is responsible for creating the chunks that serve the first chunk. The base_addr is page aligned down of **tmp_addr** while the region end is page aligned up. Offsets are kept track of to determine the region served. All this is done to appease the bitmap allocator in avoiding partial blocks. **Return** Chunk serving the region at **tmp_addr** of **map_size**.”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M?hjædubj¤)�”}”(hhh]”(j©)�”}”(hŒ:``unsigned long tmp_addr`` the start of the region served ”h]”(j¯)�”}”(hŒ``unsigned long tmp_addr``”h]”jS)�”}”(hj eh]”hŒunsigned long tmp_addr”…”�”}”(hj eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj eubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M<hjeubjÉ)�”}”(hhh]”jM)�”}”(hŒthe start of the region served”h]”hŒthe start of the region served”…”�”}”(hj$eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j eh´M<hj!eubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j eh´M<hjeubj©)�”}”(hŒ+``int map_size`` size of the region served ”h]”(j¯)�”}”(hŒ``int map_size``”h]”jS)�”}”(hjDeh]”hŒ int map_size”…”�”}”(hjFeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjBeubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M=hj>eubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of the region served”h]”hŒsize of the region served”…”�”}”(hj]eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jYeh´M=hjZeubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj>eubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jYeh´M=hjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjædubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjeh]”hŒ Description”…”�”}”(hj�eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj}eubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M?hjædubjM)�”}”(hX,This is responsible for creating the chunks that serve the first chunk. The base_addr is page aligned down of **tmp_addr** while the region end is page aligned up. Offsets are kept track of to determine the region served. All this is done to appease the bitmap allocator in avoiding partial blocks.”h]”(hŒoThis is responsible for creating the chunks that serve the first chunk. The base_addr is page aligned down of ”…”�”}”(hj•eh²hh³Nh´NubjŽ)�”}”(hŒ **tmp_addr**”h]”hŒtmp_addr”…”�”}”(hj�eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj•eubhŒ± while the region end is page aligned up. Offsets are kept track of to determine the region served. All this is done to appease the bitmap allocator in avoiding partial blocks.”…”�”}”(hj•eh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M>hjædubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj¸eh]”hŒReturn”…”�”}”(hjºeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¶eubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MChjædubjM)�”}”(hŒ9Chunk serving the region at **tmp_addr** of **map_size**.”h]”(hŒChunk serving the region at ”…”�”}”(hjÎeh²hh³Nh´NubjŽ)�”}”(hŒ **tmp_addr**”h]”hŒtmp_addr”…”�”}”(hjÖeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÎeubhŒ of ”…”�”}”(hjÎeh²hh³Nh´NubjŽ)�”}”(hŒ **map_size**”h]”hŒmap_size”…”�”}”(hjèeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÎeubhŒ.”…”�”}”(hjÎeh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MDhjædubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!pcpu_chunk_populated (C function)”Œc.pcpu_chunk_populated”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒRvoid pcpu_chunk_populated (struct pcpu_chunk *chunk, int page_start, int page_end)”h]”hù)�”}”(hŒQvoid pcpu_chunk_populated(struct pcpu_chunk *chunk, int page_start, int page_end)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj!fh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjfh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MàubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0fh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjfh²hh³j/fh´Màubhÿ)�”}”(hŒpcpu_chunk_populated”h]”j)�”}”(hŒpcpu_chunk_populated”h]”hŒpcpu_chunk_populated”…”�”}”(hjBfh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>fubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjfh²hh³j/fh´Màubj )�”}”(hŒ8(struct pcpu_chunk *chunk, int page_start, int page_end)”h]”(j )�”}”(hŒstruct pcpu_chunk *chunk”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj^fh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjZfubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkfh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjZfubh)�”}”(hhh]”j)�”}”(hŒ pcpu_chunk”h]”hŒ pcpu_chunk”…”�”}”(hj|fh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjyfubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j~fŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljDfsbŒc.pcpu_chunk_populated”†”asbuh1hhjZfubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœfh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjZfubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjªfh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjZfubj)�”}”(hŒchunk”h]”hŒchunk”…”�”}”(hj·fh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjZfubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjVfubj )�”}”(hŒint page_start”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjÐfh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÌfubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞfh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÌfubj)�”}”(hŒ page_start”h]”hŒ page_start”…”�”}”(hjìfh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÌfubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjVfubj )�”}”(hŒ int page_end”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjgubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjgubj)�”}”(hŒpage_end”h]”hŒpage_end”…”�”}”(hj!gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjgubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjVfubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjfh²hh³j/fh´Màubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjfh²hh³j/fh´Màubah}”(h]”jfah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j/fh´Màhjfh²hubj4)�”}”(hhh]”jM)�”}”(hŒpost-population bookkeeping”h]”hŒpost-population bookkeeping”…”�”}”(hjKgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MàhjHgh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjfh²hh³j/fh´Màubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjcgjHjcgjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXQ**Parameters** ``struct pcpu_chunk *chunk`` pcpu_chunk which got populated ``int page_start`` the start page ``int page_end`` the end page **Description** Pages in [**page_start**,**page_end**) have been populated to **chunk**. Update the bookkeeping information accordingly. Must be called after each successful population.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjmgh]”hŒ Parameters”…”�”}”(hjogh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjkgubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mähjggubj¤)�”}”(hhh]”(j©)�”}”(hŒ<``struct pcpu_chunk *chunk`` pcpu_chunk which got populated ”h]”(j¯)�”}”(hŒ``struct pcpu_chunk *chunk``”h]”jS)�”}”(hjŒgh]”hŒstruct pcpu_chunk *chunk”…”�”}”(hjŽgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjŠgubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Máhj†gubjÉ)�”}”(hhh]”jM)�”}”(hŒpcpu_chunk which got populated”h]”hŒpcpu_chunk which got populated”…”�”}”(hj¥gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¡gh´Máhj¢gubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj†gubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¡gh´Máhjƒgubj©)�”}”(hŒ"``int page_start`` the start page ”h]”(j¯)�”}”(hŒ``int page_start``”h]”jS)�”}”(hjÅgh]”hŒint page_start”…”�”}”(hjÇgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÃgubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mâhj¿gubjÉ)�”}”(hhh]”jM)�”}”(hŒthe start page”h]”hŒthe start page”…”�”}”(hjÞgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÚgh´MâhjÛgubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¿gubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÚgh´Mâhjƒgubj©)�”}”(hŒ``int page_end`` the end page ”h]”(j¯)�”}”(hŒ``int page_end``”h]”jS)�”}”(hjþgh]”hŒ int page_end”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjügubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MãhjøgubjÉ)�”}”(hhh]”jM)�”}”(hŒ the end page”h]”hŒ the end page”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jhh´Mãhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjøgubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jhh´Mãhjƒgubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjggubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj9hh]”hŒ Description”…”�”}”(hj;hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj7hubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MåhjggubjM)�”}”(hŒ«Pages in [**page_start**,**page_end**) have been populated to **chunk**. Update the bookkeeping information accordingly. Must be called after each successful population.”h]”(hŒ Pages in [”…”�”}”(hjOhh²hh³Nh´NubjŽ)�”}”(hŒ**page_start**”h]”hŒ page_start”…”�”}”(hjWhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjOhubhŒ&,**page_end**) have been populated to ”…”�”}”(hjOhh²hh³Nh´NubjŽ)�”}”(hŒ **chunk**”h]”hŒchunk”…”�”}”(hjihh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjOhubhŒd. Update the bookkeeping information accordingly. Must be called after each successful population.”…”�”}”(hjOhh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mähjggubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ#pcpu_chunk_depopulated (C function)”Œc.pcpu_chunk_depopulated”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒTvoid pcpu_chunk_depopulated (struct pcpu_chunk *chunk, int page_start, int page_end)”h]”hù)�”}”(hŒSvoid pcpu_chunk_depopulated(struct pcpu_chunk *chunk, int page_start, int page_end)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¢hh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjžhh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MøubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±hh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjžhh²hh³j°hh´Møubhÿ)�”}”(hŒpcpu_chunk_depopulated”h]”j)�”}”(hŒpcpu_chunk_depopulated”h]”hŒpcpu_chunk_depopulated”…”�”}”(hjÃhh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¿hubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjžhh²hh³j°hh´Møubj )�”}”(hŒ8(struct pcpu_chunk *chunk, int page_start, int page_end)”h]”(j )�”}”(hŒstruct pcpu_chunk *chunk”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjßhh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÛhubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìhh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÛhubh)�”}”(hhh]”j)�”}”(hŒ pcpu_chunk”h]”hŒ pcpu_chunk”…”�”}”(hjýhh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjúhubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÿhŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÅhsbŒc.pcpu_chunk_depopulated”†”asbuh1hhjÛhubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÛhubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj+ih²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÛhubj)�”}”(hŒchunk”h]”hŒchunk”…”�”}”(hj8ih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÛhubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj×hubj )�”}”(hŒint page_start”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjQih²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjMiubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_ih²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjMiubj)�”}”(hŒ page_start”h]”hŒ page_start”…”�”}”(hjmih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjMiubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj×hubj )�”}”(hŒ int page_end”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj†ih²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj‚iubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”ih²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj‚iubj)�”}”(hŒpage_end”h]”hŒpage_end”…”�”}”(hj¢ih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‚iubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj×hubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjžhh²hh³j°hh´Møubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjšhh²hh³j°hh´Møubah}”(h]”j•hah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j°hh´Møhj—hh²hubj4)�”}”(hhh]”jM)�”}”(hŒpost-depopulation bookkeeping”h]”hŒpost-depopulation bookkeeping”…”�”}”(hjÌih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MøhjÉih²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj—hh²hh³j°hh´Møubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjäijHjäijI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXX**Parameters** ``struct pcpu_chunk *chunk`` pcpu_chunk which got depopulated ``int page_start`` the start page ``int page_end`` the end page **Description** Pages in [**page_start**,**page_end**) have been depopulated from **chunk**. Update the bookkeeping information accordingly. Must be called after each successful depopulation.”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mühjèiubj¤)�”}”(hhh]”(j©)�”}”(hŒ>``struct pcpu_chunk *chunk`` pcpu_chunk which got depopulated ”h]”(j¯)�”}”(hŒ``struct pcpu_chunk *chunk``”h]”jS)�”}”(hj jh]”hŒstruct pcpu_chunk *chunk”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj jubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MùhjjubjÉ)�”}”(hhh]”jM)�”}”(hŒ pcpu_chunk which got depopulated”h]”hŒ pcpu_chunk which got depopulated”…”�”}”(hj&jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j"jh´Mùhj#jubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j"jh´Mùhjjubj©)�”}”(hŒ"``int page_start`` the start page ”h]”(j¯)�”}”(hŒ``int page_start``”h]”jS)�”}”(hjFjh]”hŒint page_start”…”�”}”(hjHjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjDjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Múhj@jubjÉ)�”}”(hhh]”jM)�”}”(hŒthe start page”h]”hŒthe start page”…”�”}”(hj_jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j[jh´Múhj\jubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj@jubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j[jh´Múhjjubj©)�”}”(hŒ``int page_end`` the end page ”h]”(j¯)�”}”(hŒ``int page_end``”h]”jS)�”}”(hjjh]”hŒ int page_end”…”�”}”(hj�jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj}jubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MûhjyjubjÉ)�”}”(hhh]”jM)�”}”(hŒ the end page”h]”hŒ the end page”…”�”}”(hj˜jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j”jh´Mûhj•jubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjyjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j”jh´Mûhjjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjèiubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MýhjèiubjM)�”}”(hŒ°Pages in [**page_start**,**page_end**) have been depopulated from **chunk**. Update the bookkeeping information accordingly. Must be called after each successful depopulation.”h]”(hŒ Pages in [”…”�”}”(hjÐjh²hh³Nh´NubjŽ)�”}”(hŒ**page_start**”h]”hŒ page_start”…”�”}”(hjØjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÐjubhŒ*,**page_end**) have been depopulated from ”…”�”}”(hjÐjh²hh³Nh´NubjŽ)�”}”(hŒ **chunk**”h]”hŒchunk”…”�”}”(hjêjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÐjubhŒe. Update the bookkeeping information accordingly. Must be called after each successful depopulation.”…”�”}”(hjÐjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.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”]”(héŒ#pcpu_chunk_addr_search (C function)”Œc.pcpu_chunk_addr_search”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ7struct pcpu_chunk * pcpu_chunk_addr_search (void *addr)”h]”hù)�”}”(hŒ5struct pcpu_chunk *pcpu_chunk_addr_search(void *addr)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj#kh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjkh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M1ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1kh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjkh²hh³j0kh´M1ubh)�”}”(hhh]”j)�”}”(hŒ pcpu_chunk”h]”hŒ pcpu_chunk”…”�”}”(hjBkh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj?kubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jDkŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒpcpu_chunk_addr_search”sbŒc.pcpu_chunk_addr_search”†”asbuh1hhjkh²hh³j0kh´M1ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjckh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjkh²hh³j0kh´M1ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjqkh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjkh²hh³j0kh´M1ubhÿ)�”}”(hŒpcpu_chunk_addr_search”h]”j)�”}”(hj`kh]”hŒpcpu_chunk_addr_search”…”�”}”(hj‚kh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj~kubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjkh²hh³j0kh´M1ubj )�”}”(hŒ (void *addr)”h]”j )�”}”(hŒ void *addr”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj�kh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj™kubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«kh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj™kubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¹kh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj™kubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjÆkh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™kubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj•kubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjkh²hh³j0kh´M1ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjkh²hh³j0kh´M1ubah}”(h]”jkah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j0kh´M1hjkh²hubj4)�”}”(hhh]”jM)�”}”(hŒ,determine chunk containing specified address”h]”hŒ,determine chunk containing specified address”…”�”}”(hjðkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M1hjíkh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjkh²hh³j0kh´M1ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjljHjljI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX!**Parameters** ``void *addr`` address for which the chunk needs to be determined. **Description** This is an internal function that handles all but static allocations. Static percpu address values should never be passed into the allocator. **Return** The address of the found chunk.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjlh]”hŒ Parameters”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M5hj lubj¤)�”}”(hhh]”j©)�”}”(hŒC``void *addr`` address for which the chunk needs to be determined. ”h]”(j¯)�”}”(hŒ``void *addr``”h]”jS)�”}”(hj1lh]”hŒ void *addr”…”�”}”(hj3lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj/lubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M2hj+lubjÉ)�”}”(hhh]”jM)�”}”(hŒ3address for which the chunk needs to be determined.”h]”hŒ3address for which the chunk needs to be determined.”…”�”}”(hjJlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jFlh´M2hjGlubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj+lubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jFlh´M2hj(lubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj lubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjllh]”hŒ Description”…”�”}”(hjnlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M4hj lubjM)�”}”(hŒ�This is an internal function that handles all but static allocations. Static percpu address values should never be passed into the allocator.”h]”hŒ�This is an internal function that handles all but static allocations. Static percpu address values should never be passed into the allocator.”…”�”}”(hj‚lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M3hj lubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj“lh]”hŒReturn”…”�”}”(hj•lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‘lubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M6hj lubjM)�”}”(hŒThe address of the found chunk.”h]”hŒThe address of the found chunk.”…”�”}”(hj©lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M7hj lubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpcpu_alloc (C function)”Œ c.pcpu_alloc”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒPvoid __percpu * pcpu_alloc (size_t size, size_t align, bool reserved, gfp_t gfp)”h]”hù)�”}”(hŒNvoid __percpu *pcpu_alloc(size_t size, size_t align, bool reserved, gfp_t gfp)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjØlh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÔlh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MºubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçlh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÔlh²hh³jælh´MºubhŒ__percpu”…”�”}”(hjÔlh²hh³Nh´NubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùlh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÔlh²hh³jælh´MºubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÔlh²hh³jælh´Mºubhÿ)�”}”(hŒ pcpu_alloc”h]”j)�”}”(hŒ pcpu_alloc”h]”hŒ pcpu_alloc”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjmubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÔlh²hh³jælh´Mºubj )�”}”(hŒ5(size_t size, size_t align, bool reserved, gfp_t gfp)”h]”(j )�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj7mh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4mubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j9mŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljmsbŒ c.pcpu_alloc”†”asbuh1hhj0mubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWmh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj0mubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjemh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj0mubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj,mubj )�”}”(hŒ size_t align”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj�mh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj~mubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jƒmŒmodname”NŒ classname”Njpjs)�”}”jv]”jSmŒ c.pcpu_alloc”†”asbuh1hhjzmubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸmh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjzmubj)�”}”(hŒalign”h]”hŒalign”…”�”}”(hj­mh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjzmubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj,mubj )�”}”(hŒ bool reserved”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjÆmh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÂmubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓmh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÂmubj)�”}”(hŒreserved”h]”hŒreserved”…”�”}”(hjámh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÂmubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj,mubj )�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjýmh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjúmubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÿmŒmodname”NŒ classname”Njpjs)�”}”jv]”jSmŒ c.pcpu_alloc”†”asbuh1hhjömubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjömubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj)nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjömubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj,mubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÔlh²hh³jælh´Mºubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÐlh²hh³jælh´Mºubah}”(h]”jËlah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jælh´MºhjÍlh²hubj4)�”}”(hhh]”jM)�”}”(hŒthe percpu allocator”h]”hŒthe percpu allocator”…”�”}”(hjSnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MºhjPnh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÍlh²hh³jælh´Mºubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjknjHjknjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX"**Parameters** ``size_t size`` size of area to allocate in bytes ``size_t align`` alignment of area (max PAGE_SIZE) ``bool reserved`` allocate from the reserved chunk if available ``gfp_t gfp`` allocation flags **Description** Allocate percpu area of **size** bytes aligned at **align**. If **gfp** doesn't allow blocking, the allocation is atomic. If **gfp** has __GFP_NOWARN then no warning will be triggered on invalid or failed allocation requests. **Return** Percpu pointer to the allocated area on success, NULL on failure.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjunh]”hŒ Parameters”…”�”}”(hjwnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjsnubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M¾hjonubj¤)�”}”(hhh]”(j©)�”}”(hŒ2``size_t size`` size of area to allocate in bytes ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hj”nh]”hŒ size_t size”…”�”}”(hj–nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj’nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M»hjŽnubjÉ)�”}”(hhh]”jM)�”}”(hŒ!size of area to allocate in bytes”h]”hŒ!size of area to allocate in bytes”…”�”}”(hj­nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j©nh´M»hjªnubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjŽnubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j©nh´M»hj‹nubj©)�”}”(hŒ3``size_t align`` alignment of area (max PAGE_SIZE) ”h]”(j¯)�”}”(hŒ``size_t align``”h]”jS)�”}”(hjÍnh]”hŒ size_t align”…”�”}”(hjÏnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjËnubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M¼hjÇnubjÉ)�”}”(hhh]”jM)�”}”(hŒ!alignment of area (max PAGE_SIZE)”h]”hŒ!alignment of area (max PAGE_SIZE)”…”�”}”(hjænh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jânh´M¼hjãnubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÇnubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jânh´M¼hj‹nubj©)�”}”(hŒ@``bool reserved`` allocate from the reserved chunk if available ”h]”(j¯)�”}”(hŒ``bool reserved``”h]”jS)�”}”(hjoh]”hŒ bool reserved”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjoubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M½hjoubjÉ)�”}”(hhh]”jM)�”}”(hŒ-allocate from the reserved chunk if available”h]”hŒ-allocate from the reserved chunk if available”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³joh´M½hjoubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjoubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³joh´M½hj‹nubj©)�”}”(hŒ``gfp_t gfp`` allocation flags ”h]”(j¯)�”}”(hŒ ``gfp_t gfp``”h]”jS)�”}”(hj?oh]”hŒ gfp_t gfp”…”�”}”(hjAoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj=oubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M¾hj9oubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation flags”h]”hŒallocation flags”…”�”}”(hjXoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jToh´M¾hjUoubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj9oubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jToh´M¾hj‹nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjonubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjzoh]”hŒ Description”…”�”}”(hj|oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjxoubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MÀhjonubjM)�”}”(hŒâAllocate percpu area of **size** bytes aligned at **align**. If **gfp** doesn't allow blocking, the allocation is atomic. If **gfp** has __GFP_NOWARN then no warning will be triggered on invalid or failed allocation requests.”h]”(hŒAllocate percpu area of ”…”�”}”(hj�oh²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj˜oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�oubhŒ bytes aligned at ”…”�”}”(hj�oh²hh³Nh´NubjŽ)�”}”(hŒ **align**”h]”hŒalign”…”�”}”(hjªoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�oubhŒ. If ”…”�”}”(hj�oh²hh³Nh´NubjŽ)�”}”(hŒ**gfp**”h]”hŒgfp”…”�”}”(hj¼oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�oubhŒ8 doesn’t allow blocking, the allocation is atomic. If ”…”�”}”(hj�oh²hh³Nh´NubjŽ)�”}”(hŒ**gfp**”h]”hŒgfp”…”�”}”(hjÎoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�oubhŒ] has __GFP_NOWARN then no warning will be triggered on invalid or failed allocation requests.”…”�”}”(hj�oh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M¿hjonubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MÃhjonubjM)�”}”(hŒAPercpu pointer to the allocated area on success, NULL on failure.”h]”hŒAPercpu pointer to the allocated area on success, NULL on failure.”…”�”}”(hjÿoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MÄhjonubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpcpu_balance_free (C function)”Œc.pcpu_balance_free”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ(void pcpu_balance_free (bool empty_only)”h]”hù)�”}”(hŒ'void pcpu_balance_free(bool empty_only)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj.ph²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj*ph²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=ph²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj*ph²hh³jxubjÉ)�”}”(hhh]”jM)�”}”(hŒaddress to test”h]”hŒaddress to test”…”�”}”(hj]xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jYxh´M hjZxubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj>xubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jYxh´M hj;xubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjxubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjxh]”hŒ Description”…”�”}”(hj�xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj}xubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M hjxubjM)�”}”(hŒšTest whether **addr** belongs to in-kernel static percpu area. Module static percpu areas are not considered. For those, use is_module_percpu_address().”h]”(hŒ Test whether ”…”�”}”(hj•xh²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hj�xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj•xubhŒ… belongs to in-kernel static percpu area. Module static percpu areas are not considered. For those, use is_module_percpu_address().”…”�”}”(hj•xh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M hjxubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M hjxubjM)�”}”(hŒO``true`` if **addr** is from in-kernel static percpu area, ``false`` otherwise.”h]”(jS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjÒxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÎxubhŒ if ”…”�”}”(hjÎxh²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hjäxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÎxubhŒ' is from in-kernel static percpu area, ”…”�”}”(hjÎxh²hh³Nh´NubjS)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjöxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÎxubhŒ otherwise.”…”�”}”(hjÎxh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M hjxubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ per_cpu_ptr_to_phys (C function)”Œc.per_cpu_ptr_to_phys”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ,phys_addr_t per_cpu_ptr_to_phys (void *addr)”h]”hù)�”}”(hŒ+phys_addr_t per_cpu_ptr_to_phys(void *addr)”h]”(h)�”}”(hhh]”j)�”}”(hŒ phys_addr_t”h]”hŒ phys_addr_t”…”�”}”(hj2yh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj/yubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j4yŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒper_cpu_ptr_to_phys”sbŒc.per_cpu_ptr_to_phys”†”asbuh1hhj+yh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M$ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTyh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj+yh²hh³jSyh´M$ ubhÿ)�”}”(hŒper_cpu_ptr_to_phys”h]”j)�”}”(hjPyh]”hŒper_cpu_ptr_to_phys”…”�”}”(hjfyh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjbyubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj+yh²hh³jSyh´M$ ubj )�”}”(hŒ (void *addr)”h]”j )�”}”(hŒ void *addr”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj�yh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj}yubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�yh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj}yubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj�yh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj}yubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjªyh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj}yubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjyyubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj+yh²hh³jSyh´M$ ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj'yh²hh³jSyh´M$ ubah}”(h]”j"yah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jSyh´M$ hj$yh²hubj4)�”}”(hhh]”jM)�”}”(hŒ5convert translated percpu address to physical address”h]”hŒ5convert translated percpu address to physical address”…”�”}”(hjÔyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M$ hjÑyh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj$yh²hh³jSyh´M$ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjìyjHjìyjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX’**Parameters** ``void *addr`` the address to be converted to physical address **Description** Given **addr** which is dereferenceable address obtained via one of percpu access macros, this function translates it into its physical address. The caller is responsible for ensuring **addr** stays valid until this function finishes. percpu allocator has special setup for the first chunk, which currently supports either embedding in linear address space or vmalloc mapping, and, from the second one, the backing allocator (currently either vm or km) provides translation. The addr can be translated simply without checking if it falls into the first chunk. But the current code reflects better how percpu allocator actually works, and the verification can discover both bugs in percpu allocator itself and per_cpu_ptr_to_phys() callers. So we keep current code. **Return** The physical address for **addr**.”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M( hjðyubj¤)�”}”(hhh]”j©)�”}”(hŒ?``void *addr`` the address to be converted to physical address ”h]”(j¯)�”}”(hŒ``void *addr``”h]”jS)�”}”(hjzh]”hŒ void *addr”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjzubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M% hjzubjÉ)�”}”(hhh]”jM)�”}”(hŒ/the address to be converted to physical address”h]”hŒ/the address to be converted to physical address”…”�”}”(hj.zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j*zh´M% hj+zubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjzubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j*zh´M% hj zubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjðyubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjPzh]”hŒ Description”…”�”}”(hjRzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjNzubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M' hjðyubjM)�”}”(hŒëGiven **addr** which is dereferenceable address obtained via one of percpu access macros, this function translates it into its physical address. The caller is responsible for ensuring **addr** stays valid until this function finishes.”h]”(hŒGiven ”…”�”}”(hjfzh²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hjnzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjfzubhŒ« which is dereferenceable address obtained via one of percpu access macros, this function translates it into its physical address. The caller is responsible for ensuring ”…”�”}”(hjfzh²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hj€zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjfzubhŒ* stays valid until this function finishes.”…”�”}”(hjfzh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M& hjðyubjM)�”}”(hŒïpercpu allocator has special setup for the first chunk, which currently supports either embedding in linear address space or vmalloc mapping, and, from the second one, the backing allocator (currently either vm or km) provides translation.”h]”hŒïpercpu allocator has special setup for the first chunk, which currently supports either embedding in linear address space or vmalloc mapping, and, from the second one, the backing allocator (currently either vm or km) provides translation.”…”�”}”(hj™zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M+ hjðyubjM)�”}”(hX!The addr can be translated simply without checking if it falls into the first chunk. But the current code reflects better how percpu allocator actually works, and the verification can discover both bugs in percpu allocator itself and per_cpu_ptr_to_phys() callers. So we keep current code.”h]”hX!The addr can be translated simply without checking if it falls into the first chunk. But the current code reflects better how percpu allocator actually works, and the verification can discover both bugs in percpu allocator itself and per_cpu_ptr_to_phys() callers. So we keep current code.”…”�”}”(hj¨zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M0 hjðyubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj¹zh]”hŒReturn”…”�”}”(hj»zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj·zubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M6 hjðyubjM)�”}”(hŒ"The physical address for **addr**.”h]”(hŒThe physical address for ”…”�”}”(hjÏzh²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hj×zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÏzubhŒ.”…”�”}”(hjÏzh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M7 hjðyubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"pcpu_alloc_alloc_info (C function)”Œc.pcpu_alloc_alloc_info”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒLstruct pcpu_alloc_info * pcpu_alloc_alloc_info (int nr_groups, int nr_units)”h]”hù)�”}”(hŒJstruct pcpu_alloc_info *pcpu_alloc_alloc_info(int nr_groups, int nr_units)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj {h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mg ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj {h²hh³j{h´Mg ubh)�”}”(hhh]”j)�”}”(hŒpcpu_alloc_info”h]”hŒpcpu_alloc_info”…”�”}”(hj/{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj,{ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j1{Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒpcpu_alloc_alloc_info”sbŒc.pcpu_alloc_alloc_info”†”asbuh1hhj {h²hh³j{h´Mg ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjP{h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj {h²hh³j{h´Mg ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj^{h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj {h²hh³j{h´Mg ubhÿ)�”}”(hŒpcpu_alloc_alloc_info”h]”j)�”}”(hjM{h]”hŒpcpu_alloc_alloc_info”…”�”}”(hjo{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjk{ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj {h²hh³j{h´Mg ubj )�”}”(hŒ(int nr_groups, int nr_units)”h]”(j )�”}”(hŒ int nr_groups”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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†{ubj)�”}”(hŒ nr_groups”h]”hŒ nr_groups”…”�”}”(hj¦{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj†{ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‚{ubj )�”}”(hŒ int nr_units”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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»{ubj)�”}”(hŒnr_units”h]”hŒnr_units”…”�”}”(hjÛ{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj»{ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‚{ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj {h²hh³j{h´Mg ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj{h²hh³j{h´Mg ubah}”(h]”j{ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j{h´Mg hj{h²hubj4)�”}”(hhh]”jM)�”}”(hŒallocate percpu allocation info”h]”hŒallocate percpu allocation info”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mg hj|h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj{h²hh³j{h´Mg ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj|jHj|jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXð**Parameters** ``int nr_groups`` the number of groups ``int nr_units`` the number of units **Description** Allocate ai which is large enough for **nr_groups** groups containing **nr_units** units. The returned ai's groups[0].cpu_map points to the cpu_map array which is long enough for **nr_units** and filled with NR_CPUS. It's the caller's responsibility to initialize cpu_map pointer of other groups. **Return** Pointer to the allocated pcpu_alloc_info on success, NULL on failure.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj'|h]”hŒ Parameters”…”�”}”(hj)|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj%|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mk hj!|ubj¤)�”}”(hhh]”(j©)�”}”(hŒ'``int nr_groups`` the number of groups ”h]”(j¯)�”}”(hŒ``int nr_groups``”h]”jS)�”}”(hjF|h]”hŒ int nr_groups”…”�”}”(hjH|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjD|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mh hj@|ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe number of groups”h]”hŒthe number of groups”…”�”}”(hj_|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j[|h´Mh hj\|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj@|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j[|h´Mh hj=|ubj©)�”}”(hŒ%``int nr_units`` the number of units ”h]”(j¯)�”}”(hŒ``int nr_units``”h]”jS)�”}”(hj|h]”hŒ int nr_units”…”�”}”(hj�|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj}|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mi hjy|ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe number of units”h]”hŒthe number of units”…”�”}”(hj˜|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j”|h´Mi hj•|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjy|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j”|h´Mi hj=|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj!|ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjº|h]”hŒ Description”…”�”}”(hj¼|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¸|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mk hj!|ubjM)�”}”(hX*Allocate ai which is large enough for **nr_groups** groups containing **nr_units** units. The returned ai's groups[0].cpu_map points to the cpu_map array which is long enough for **nr_units** and filled with NR_CPUS. It's the caller's responsibility to initialize cpu_map pointer of other groups.”h]”(hŒ&Allocate ai which is large enough for ”…”�”}”(hjÐ|h²hh³Nh´NubjŽ)�”}”(hŒ **nr_groups**”h]”hŒ nr_groups”…”�”}”(hjØ|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÐ|ubhŒ groups containing ”…”�”}”(hjÐ|h²hh³Nh´NubjŽ)�”}”(hŒ **nr_units**”h]”hŒnr_units”…”�”}”(hjê|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÐ|ubhŒd units. The returned ai’s groups[0].cpu_map points to the cpu_map array which is long enough for ”…”�”}”(hjÐ|h²hh³Nh´NubjŽ)�”}”(hŒ **nr_units**”h]”hŒnr_units”…”�”}”(hjü|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÐ|ubhŒn and filled with NR_CPUS. It’s the caller’s responsibility to initialize cpu_map pointer of other groups.”…”�”}”(hjÐ|h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mj hj!|ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mp hj!|ubjM)�”}”(hŒEPointer to the allocated pcpu_alloc_info on success, NULL on failure.”h]”hŒEPointer to the allocated pcpu_alloc_info on success, NULL on failure.”…”�”}”(hj-}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mq hj!|ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!pcpu_free_alloc_info (C function)”Œc.pcpu_free_alloc_info”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ6void pcpu_free_alloc_info (struct pcpu_alloc_info *ai)”h]”hù)�”}”(hŒ5void pcpu_free_alloc_info(struct pcpu_alloc_info *ai)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj\}h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjX}h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M“ ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjk}h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjX}h²hh³jj}h´M“ ubhÿ)�”}”(hŒpcpu_free_alloc_info”h]”j)�”}”(hŒpcpu_free_alloc_info”h]”hŒpcpu_free_alloc_info”…”�”}”(hj}}h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjy}ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjX}h²hh³jj}h´M“ ubj )�”}”(hŒ(struct pcpu_alloc_info *ai)”h]”j )�”}”(hŒstruct pcpu_alloc_info *ai”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj™}h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj•}ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦}h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj•}ubh)�”}”(hhh]”j)�”}”(hŒpcpu_alloc_info”h]”hŒpcpu_alloc_info”…”�”}”(hj·}h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj´}ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¹}Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj}sbŒc.pcpu_free_alloc_info”†”asbuh1hhj•}ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×}h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj•}ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjå}h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj•}ubj)�”}”(hŒai”h]”hŒai”…”�”}”(hjò}h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj•}ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‘}ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjX}h²hh³jj}h´M“ ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjT}h²hh³jj}h´M“ ubah}”(h]”jO}ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jj}h´M“ hjQ}h²hubj4)�”}”(hhh]”jM)�”}”(hŒfree percpu allocation info”h]”hŒfree percpu allocation info”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M“ hj~h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjQ}h²hh³jj}h´M“ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj4~jHj4~jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ–**Parameters** ``struct pcpu_alloc_info *ai`` pcpu_alloc_info to free **Description** Free **ai** which was allocated by pcpu_alloc_alloc_info().”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj>~h]”hŒ Parameters”…”�”}”(hj@~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj<~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M— hj8~ubj¤)�”}”(hhh]”j©)�”}”(hŒ7``struct pcpu_alloc_info *ai`` pcpu_alloc_info to free ”h]”(j¯)�”}”(hŒ``struct pcpu_alloc_info *ai``”h]”jS)�”}”(hj]~h]”hŒstruct pcpu_alloc_info *ai”…”�”}”(hj_~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj[~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M” hjW~ubjÉ)�”}”(hhh]”jM)�”}”(hŒpcpu_alloc_info to free”h]”hŒpcpu_alloc_info to free”…”�”}”(hjv~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jr~h´M” hjs~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjW~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jr~h´M” hjT~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj8~ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj˜~h]”hŒ Description”…”�”}”(hjš~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj–~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M– hj8~ubjM)�”}”(hŒ;Free **ai** which was allocated by pcpu_alloc_alloc_info().”h]”(hŒFree ”…”�”}”(hj®~h²hh³Nh´NubjŽ)�”}”(hŒ**ai**”h]”hŒai”…”�”}”(hj¶~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj®~ubhŒ0 which was allocated by pcpu_alloc_alloc_info().”…”�”}”(hj®~h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M• hj8~ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!pcpu_dump_alloc_info (C function)”Œc.pcpu_dump_alloc_info”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒMvoid pcpu_dump_alloc_info (const char *lvl, const struct pcpu_alloc_info *ai)”h]”hù)�”}”(hŒLvoid pcpu_dump_alloc_info(const char *lvl, const struct pcpu_alloc_info *ai)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjï~h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjë~h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mž ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþ~h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjë~h²hh³jý~h´Mž ubhÿ)�”}”(hŒpcpu_dump_alloc_info”h]”j)�”}”(hŒpcpu_dump_alloc_info”h]”hŒpcpu_dump_alloc_info”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjë~h²hh³jý~h´Mž ubj )�”}”(hŒ3(const char *lvl, const struct pcpu_alloc_info *ai)”h]”(j )�”}”(hŒconst char *lvl”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj(ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj(ubjµ)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj(ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj(ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj(ubj)�”}”(hŒlvl”h]”hŒlvl”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj(ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj$ubj )�”}”(hŒ const struct pcpu_alloc_info *ai”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj…ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj…ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj…ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj…ubh)�”}”(hhh]”j)�”}”(hŒpcpu_alloc_info”h]”hŒpcpu_alloc_info”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¿ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÄŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljsbŒc.pcpu_dump_alloc_info”†”asbuh1hhj…ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj…ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj…ubj)�”}”(hŒai”h]”hŒai”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj…ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj$ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjë~h²hh³jý~h´Mž ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjç~h²hh³jý~h´Mž ubah}”(h]”jâ~ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jý~h´Mž hjä~h²hubj4)�”}”(hhh]”jM)�”}”(hŒ+print out information about pcpu_alloc_info”h]”hŒ+print out information about pcpu_alloc_info”…”�”}”(hj'€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mž hj$€h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjä~h²hh³jý~h´Mž ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj?€jHj?€jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ»**Parameters** ``const char *lvl`` loglevel ``const struct pcpu_alloc_info *ai`` allocation info to dump **Description** Print out information about **ai** using loglevel **lvl**.”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M¢ hjC€ubj¤)�”}”(hhh]”(j©)�”}”(hŒ``const char *lvl`` loglevel ”h]”(j¯)�”}”(hŒ``const char *lvl``”h]”jS)�”}”(hjh€h]”hŒconst char *lvl”…”�”}”(hjj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjf€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MŸ hjb€ubjÉ)�”}”(hhh]”jM)�”}”(hŒloglevel”h]”hŒloglevel”…”�”}”(hj�€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j}€h´MŸ hj~€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjb€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j}€h´MŸ hj_€ubj©)�”}”(hŒ=``const struct pcpu_alloc_info *ai`` allocation info to dump ”h]”(j¯)�”}”(hŒ$``const struct pcpu_alloc_info *ai``”h]”jS)�”}”(hj¡€h]”hŒ const struct pcpu_alloc_info *ai”…”�”}”(hj£€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjŸ€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M  hj›€ubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation info to dump”h]”hŒallocation info to dump”…”�”}”(hjº€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¶€h´M  hj·€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj›€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¶€h´M  hj_€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjC€ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÜ€h]”hŒ Description”…”�”}”(hjÞ€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÚ€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M¢ hjC€ubjM)�”}”(hŒ:Print out information about **ai** using loglevel **lvl**.”h]”(hŒPrint out information about ”…”�”}”(hjò€h²hh³Nh´NubjŽ)�”}”(hŒ**ai**”h]”hŒai”…”�”}”(hjú€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjò€ubhŒ using loglevel ”…”�”}”(hjò€h²hh³Nh´NubjŽ)�”}”(hŒ**lvl**”h]”hŒlvl”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjò€ubhŒ.”…”�”}”(hjò€h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M¡ hjC€ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ#pcpu_setup_first_chunk (C function)”Œc.pcpu_setup_first_chunk”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒOvoid pcpu_setup_first_chunk (const struct pcpu_alloc_info *ai, void *base_addr)”h]”hù)�”}”(hŒNvoid pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, void *base_addr)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjE�h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjA�h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M× ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjT�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjA�h²hh³jS�h´M× ubhÿ)�”}”(hŒpcpu_setup_first_chunk”h]”j)�”}”(hŒpcpu_setup_first_chunk”h]”hŒpcpu_setup_first_chunk”…”�”}”(hjf�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjb�ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjA�h²hh³jS�h´M× ubj )�”}”(hŒ3(const struct pcpu_alloc_info *ai, void *base_addr)”h]”(j )�”}”(hŒ const struct pcpu_alloc_info *ai”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj‚�h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj~�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj~�ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj~�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj~�ubh)�”}”(hhh]”j)�”}”(hŒpcpu_alloc_info”h]”hŒpcpu_alloc_info”…”�”}”(hj»�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¸�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j½�Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljh�sbŒc.pcpu_setup_first_chunk”†”asbuh1hhj~�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛ�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj~�ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjé�h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj~�ubj)�”}”(hŒai”h]”hŒai”…”�”}”(hjö�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj~�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjz�ubj )�”}”(hŒvoid *base_addr”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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 ‚ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj+‚h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj ‚ubj)�”}”(hŒ base_addr”h]”hŒ base_addr”…”�”}”(hj8‚h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ‚ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjz�ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjA�h²hh³jS�h´M× ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj=�h²hh³jS�h´M× ubah}”(h]”j8�ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jS�h´M× hj:�h²hubj4)�”}”(hhh]”jM)�”}”(hŒ!initialize the first percpu chunk”h]”hŒ!initialize the first percpu chunk”…”�”}”(hjb‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M× hj_‚h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj:�h²hh³jS�h´M× ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjz‚jHjz‚jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXz **Parameters** ``const struct pcpu_alloc_info *ai`` pcpu_alloc_info describing how to percpu area is shaped ``void *base_addr`` mapped address **Description** Initialize the first percpu chunk which contains the kernel static percpu area. This function is to be called from arch percpu area setup path. **ai** contains all information necessary to initialize the first chunk and prime the dynamic percpu allocator. **ai->static_size** is the size of static percpu area. **ai->reserved_size**, if non-zero, specifies the amount of bytes to reserve after the static area in the first chunk. This reserves the first chunk such that it's available only through reserved percpu allocation. This is primarily used to serve module percpu static areas on architectures where the addressing model has limited offset range for symbol relocations to guarantee module percpu symbols fall inside the relocatable range. **ai->dyn_size** determines the number of bytes available for dynamic allocation in the first chunk. The area between **ai->static_size** + **ai->reserved_size** + **ai->dyn_size** and **ai->unit_size** is unused. **ai->unit_size** specifies unit size and must be aligned to PAGE_SIZE and equal to or larger than **ai->static_size** + **ai->reserved_size** + **ai->dyn_size**. **ai->atom_size** is the allocation atom size and used as alignment for vm areas. **ai->alloc_size** is the allocation size and always multiple of **ai->atom_size**. This is larger than **ai->atom_size** if **ai->unit_size** is larger than **ai->atom_size**. **ai->nr_groups** and **ai->groups** describe virtual memory layout of percpu areas. Units which should be colocated are put into the same group. Dynamic VM areas will be allocated according to these groupings. If **ai->nr_groups** is zero, a single group containing all units is assumed. The caller should have mapped the first chunk at **base_addr** and copied static data to each unit. The first chunk will always contain a static and a dynamic region. However, the static region is not managed by any chunk. If the first chunk also contains a reserved region, it is served by two chunks - one for the reserved region and one for the dynamic region. They share the same vm, but use offset regions in the area allocation map. The chunk serving the dynamic region is circulated in the chunk slots and available for dynamic allocation like any other chunk.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj„‚h]”hŒ Parameters”…”�”}”(hj†‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‚‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MÛ hj~‚ubj¤)�”}”(hhh]”(j©)�”}”(hŒ]``const struct pcpu_alloc_info *ai`` pcpu_alloc_info describing how to percpu area is shaped ”h]”(j¯)�”}”(hŒ$``const struct pcpu_alloc_info *ai``”h]”jS)�”}”(hj£‚h]”hŒ const struct pcpu_alloc_info *ai”…”�”}”(hj¥‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¡‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MØ hj�‚ubjÉ)�”}”(hhh]”jM)�”}”(hŒ7pcpu_alloc_info describing how to percpu area is shaped”h]”hŒ7pcpu_alloc_info describing how to percpu area is shaped”…”�”}”(hj¼‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¸‚h´MØ hj¹‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¸‚h´MØ hjš‚ubj©)�”}”(hŒ#``void *base_addr`` mapped address ”h]”(j¯)�”}”(hŒ``void *base_addr``”h]”jS)�”}”(hjÜ‚h]”hŒvoid *base_addr”…”�”}”(hjÞ‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÚ‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MÙ hjÖ‚ubjÉ)�”}”(hhh]”jM)�”}”(hŒmapped address”h]”hŒmapped address”…”�”}”(hjõ‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jñ‚h´MÙ hjò‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÖ‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jñ‚h´MÙ hjš‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj~‚ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjƒh]”hŒ Description”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MÛ hj~‚ubjM)�”}”(hŒ�Initialize the first percpu chunk which contains the kernel static percpu area. This function is to be called from arch percpu area setup path.”h]”hŒ�Initialize the first percpu chunk which contains the kernel static percpu area. This function is to be called from arch percpu area setup path.”…”�”}”(hj-ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MÚ hj~‚ubjM)�”}”(hŒo**ai** contains all information necessary to initialize the first chunk and prime the dynamic percpu allocator.”h]”(jŽ)�”}”(hŒ**ai**”h]”hŒai”…”�”}”(hj@ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj<ƒubhŒi contains all information necessary to initialize the first chunk and prime the dynamic percpu allocator.”…”�”}”(hj<ƒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MÞ hj~‚ubjM)�”}”(hŒ6**ai->static_size** is the size of static percpu area.”h]”(jŽ)�”}”(hŒ**ai->static_size**”h]”hŒai->static_size”…”�”}”(hj]ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjYƒubhŒ# is the size of static percpu area.”…”�”}”(hjYƒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Má hj~‚ubjM)�”}”(hXµ**ai->reserved_size**, if non-zero, specifies the amount of bytes to reserve after the static area in the first chunk. This reserves the first chunk such that it's available only through reserved percpu allocation. This is primarily used to serve module percpu static areas on architectures where the addressing model has limited offset range for symbol relocations to guarantee module percpu symbols fall inside the relocatable range.”h]”(jŽ)�”}”(hŒ**ai->reserved_size**”h]”hŒai->reserved_size”…”�”}”(hjzƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjvƒubhX¢, if non-zero, specifies the amount of bytes to reserve after the static area in the first chunk. This reserves the first chunk such that it’s available only through reserved percpu allocation. This is primarily used to serve module percpu static areas on architectures where the addressing model has limited offset range for symbol relocations to guarantee module percpu symbols fall inside the relocatable range.”…”�”}”(hjvƒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mã hj~‚ubjM)�”}”(hŒÖ**ai->dyn_size** determines the number of bytes available for dynamic allocation in the first chunk. The area between **ai->static_size** + **ai->reserved_size** + **ai->dyn_size** and **ai->unit_size** is unused.”h]”(jŽ)�”}”(hŒ**ai->dyn_size**”h]”hŒ ai->dyn_size”…”�”}”(hj—ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj“ƒubhŒg determines the number of bytes available for dynamic allocation in the first chunk. The area between ”…”�”}”(hj“ƒh²hh³Nh´NubjŽ)�”}”(hŒ**ai->static_size**”h]”hŒai->static_size”…”�”}”(hj©ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj“ƒubhŒ + ”…”�”}”(hj“ƒh²hh³Nh´NubjŽ)�”}”(hŒ**ai->reserved_size**”h]”hŒai->reserved_size”…”�”}”(hj»ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj“ƒubhŒ + ”…”�”}”(hj“ƒh²hh³Nh´NubjŽ)�”}”(hŒ**ai->dyn_size**”h]”hŒ ai->dyn_size”…”�”}”(hj̓h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj“ƒubhŒ and ”…”�”}”(hj“ƒh²hh³Nh´NubjŽ)�”}”(hŒ**ai->unit_size**”h]”hŒ ai->unit_size”…”�”}”(hj߃h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj“ƒubhŒ is unused.”…”�”}”(hj“ƒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Më hj~‚ubjM)�”}”(hŒ¢**ai->unit_size** specifies unit size and must be aligned to PAGE_SIZE and equal to or larger than **ai->static_size** + **ai->reserved_size** + **ai->dyn_size**.”h]”(jŽ)�”}”(hŒ**ai->unit_size**”h]”hŒ ai->unit_size”…”�”}”(hjüƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjøƒubhŒR specifies unit size and must be aligned to PAGE_SIZE and equal to or larger than ”…”�”}”(hjøƒh²hh³Nh´NubjŽ)�”}”(hŒ**ai->static_size**”h]”hŒai->static_size”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjøƒubhŒ + ”…”�”}”(hjøƒh²hh³Nh´NubjŽ)�”}”(hŒ**ai->reserved_size**”h]”hŒai->reserved_size”…”�”}”(hj „h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjøƒubhŒ + ”…”�”}”(hjøƒh²hh³Nh´NubjŽ)�”}”(hŒ**ai->dyn_size**”h]”hŒ ai->dyn_size”…”�”}”(hj2„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjøƒubhŒ.”…”�”}”(hjøƒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mï hj~‚ubjM)�”}”(hŒQ**ai->atom_size** is the allocation atom size and used as alignment for vm areas.”h]”(jŽ)�”}”(hŒ**ai->atom_size**”h]”hŒ ai->atom_size”…”�”}”(hjO„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjK„ubhŒ@ is the allocation atom size and used as alignment for vm areas.”…”�”}”(hjK„h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mó hj~‚ubjM)�”}”(hŒ±**ai->alloc_size** is the allocation size and always multiple of **ai->atom_size**. This is larger than **ai->atom_size** if **ai->unit_size** is larger than **ai->atom_size**.”h]”(jŽ)�”}”(hŒ**ai->alloc_size**”h]”hŒai->alloc_size”…”�”}”(hjl„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjh„ubhŒ/ is the allocation size and always multiple of ”…”�”}”(hjh„h²hh³Nh´NubjŽ)�”}”(hŒ**ai->atom_size**”h]”hŒ ai->atom_size”…”�”}”(hj~„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjh„ubhŒ. This is larger than ”…”�”}”(hjh„h²hh³Nh´NubjŽ)�”}”(hŒ**ai->atom_size**”h]”hŒ ai->atom_size”…”�”}”(hj�„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjh„ubhŒ if ”…”�”}”(hjh„h²hh³Nh´NubjŽ)�”}”(hŒ**ai->unit_size**”h]”hŒ ai->unit_size”…”�”}”(hj¢„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjh„ubhŒ is larger than ”…”�”}”(hjh„h²hh³Nh´NubjŽ)�”}”(hŒ**ai->atom_size**”h]”hŒ ai->atom_size”…”�”}”(hj´„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjh„ubhŒ.”…”�”}”(hjh„h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mö hj~‚ubjM)�”}”(hX#**ai->nr_groups** and **ai->groups** describe virtual memory layout of percpu areas. Units which should be colocated are put into the same group. Dynamic VM areas will be allocated according to these groupings. If **ai->nr_groups** is zero, a single group containing all units is assumed.”h]”(jŽ)�”}”(hŒ**ai->nr_groups**”h]”hŒ ai->nr_groups”…”�”}”(hjÑ„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÍ„ubhŒ and ”…”�”}”(hjÍ„h²hh³Nh´NubjŽ)�”}”(hŒ**ai->groups**”h]”hŒ ai->groups”…”�”}”(hjã„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÍ„ubhŒµ describe virtual memory layout of percpu areas. Units which should be colocated are put into the same group. Dynamic VM areas will be allocated according to these groupings. If ”…”�”}”(hjÍ„h²hh³Nh´NubjŽ)�”}”(hŒ**ai->nr_groups**”h]”hŒ ai->nr_groups”…”�”}”(hjõ„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÍ„ubhŒ9 is zero, a single group containing all units is assumed.”…”�”}”(hjÍ„h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mú hj~‚ubjM)�”}”(hŒcThe caller should have mapped the first chunk at **base_addr** and copied static data to each unit.”h]”(hŒ1The caller should have mapped the first chunk at ”…”�”}”(hj…h²hh³Nh´NubjŽ)�”}”(hŒ **base_addr**”h]”hŒ base_addr”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj…ubhŒ% and copied static data to each unit.”…”�”}”(hj…h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M hj~‚ubjM)�”}”(hXÕThe first chunk will always contain a static and a dynamic region. However, the static region is not managed by any chunk. If the first chunk also contains a reserved region, it is served by two chunks - one for the reserved region and one for the dynamic region. They share the same vm, but use offset regions in the area allocation map. The chunk serving the dynamic region is circulated in the chunk slots and available for dynamic allocation like any other chunk.”h]”hXÕThe first chunk will always contain a static and a dynamic region. However, the static region is not managed by any chunk. If the first chunk also contains a reserved region, it is served by two chunks - one for the reserved region and one for the dynamic region. They share the same vm, but use offset regions in the area allocation map. The chunk serving the dynamic region is circulated in the chunk slots and available for dynamic allocation like any other chunk.”…”�”}”(hj/…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.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”]”(héŒ"pcpu_build_alloc_info (C function)”Œc.pcpu_build_alloc_info”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ“struct pcpu_alloc_info * pcpu_build_alloc_info (size_t reserved_size, size_t dyn_size, size_t atom_size, pcpu_fc_cpu_distance_fn_t cpu_distance_fn)”h]”hù)�”}”(hŒ‘struct pcpu_alloc_info *pcpu_build_alloc_info(size_t reserved_size, size_t dyn_size, size_t atom_size, pcpu_fc_cpu_distance_fn_t cpu_distance_fn)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj^…h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjZ…h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mé ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl…h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjZ…h²hh³jk…h´Mé ubh)�”}”(hhh]”j)�”}”(hŒpcpu_alloc_info”h]”hŒpcpu_alloc_info”…”�”}”(hj}…h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjz…ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j…Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒpcpu_build_alloc_info”sbŒc.pcpu_build_alloc_info”†”asbuh1hhjZ…h²hh³jk…h´Mé ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjž…h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjZ…h²hh³jk…h´Mé ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¬…h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjZ…h²hh³jk…h´Mé ubhÿ)�”}”(hŒpcpu_build_alloc_info”h]”j)�”}”(hj›…h]”hŒpcpu_build_alloc_info”…”�”}”(hj½…h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¹…ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjZ…h²hh³jk…h´Mé ubj )�”}”(hŒd(size_t reserved_size, size_t dyn_size, size_t atom_size, pcpu_fc_cpu_distance_fn_t cpu_distance_fn)”h]”(j )�”}”(hŒsize_t reserved_size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÛ…h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjØ…ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÝ…Œmodname”NŒ classname”Njpjs)�”}”jv]”j™…Œc.pcpu_build_alloc_info”†”asbuh1hhjÔ…ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjù…h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÔ…ubj)�”}”(hŒ reserved_size”h]”hŒ reserved_size”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÔ…ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÐ…ubj )�”}”(hŒsize_t dyn_size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj#†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj †ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j%†Œmodname”NŒ classname”Njpjs)�”}”jv]”j™…Œc.pcpu_build_alloc_info”†”asbuh1hhj†ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA†h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj†ubj)�”}”(hŒdyn_size”h]”hŒdyn_size”…”�”}”(hjO†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj†ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÐ…ubj )�”}”(hŒsize_t atom_size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjk†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjh†ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jm†Œmodname”NŒ classname”Njpjs)�”}”jv]”j™…Œc.pcpu_build_alloc_info”†”asbuh1hhjd†ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰†h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjd†ubj)�”}”(hŒ atom_size”h]”hŒ atom_size”…”�”}”(hj—†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjd†ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÐ…ubj )�”}”(hŒ)pcpu_fc_cpu_distance_fn_t cpu_distance_fn”h]”(h)�”}”(hhh]”j)�”}”(hŒpcpu_fc_cpu_distance_fn_t”h]”hŒpcpu_fc_cpu_distance_fn_t”…”�”}”(hj³†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj°†ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jµ†Œmodname”NŒ classname”Njpjs)�”}”jv]”j™…Œc.pcpu_build_alloc_info”†”asbuh1hhj¬†ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjцh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¬†ubj)�”}”(hŒcpu_distance_fn”h]”hŒcpu_distance_fn”…”�”}”(hj߆h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¬†ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÐ…ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjZ…h²hh³jk…h´Mé ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjV…h²hh³jk…h´Mé ubah}”(h]”jQ…ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jk…h´Mé hjS…h²hubj4)�”}”(hhh]”jM)�”}”(hŒ3build alloc_info considering distances between CPUs”h]”hŒ3build alloc_info considering distances between CPUs”…”�”}”(hj ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mé hj‡h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjS…h²hh³jk…h´Mé ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj!‡jHj!‡jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXŠ**Parameters** ``size_t reserved_size`` the size of reserved percpu area in bytes ``size_t dyn_size`` minimum free size for dynamic allocation in bytes ``size_t atom_size`` allocation atom size ``pcpu_fc_cpu_distance_fn_t cpu_distance_fn`` callback to determine distance between cpus, optional **Description** This function determines grouping of units, their mappings to cpus and other parameters considering needed percpu size, allocation atom size and distances between CPUs. Groups are always multiples of atom size and CPUs which are of LOCAL_DISTANCE both ways are grouped together and share space for units in the same group. The returned configuration is guaranteed to have CPUs on different nodes on different groups and >=75% usage of allocated virtual address space. **Return** On success, pointer to the new allocation_info is returned. On failure, ERR_PTR value is returned.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj+‡h]”hŒ Parameters”…”�”}”(hj-‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj)‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mí hj%‡ubj¤)�”}”(hhh]”(j©)�”}”(hŒC``size_t reserved_size`` the size of reserved percpu area in bytes ”h]”(j¯)�”}”(hŒ``size_t reserved_size``”h]”jS)�”}”(hjJ‡h]”hŒsize_t reserved_size”…”�”}”(hjL‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjH‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mê hjD‡ubjÉ)�”}”(hhh]”jM)�”}”(hŒ)the size of reserved percpu area in bytes”h]”hŒ)the size of reserved percpu area in bytes”…”�”}”(hjc‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j_‡h´Mê hj`‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjD‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j_‡h´Mê hjA‡ubj©)�”}”(hŒF``size_t dyn_size`` minimum free size for dynamic allocation in bytes ”h]”(j¯)�”}”(hŒ``size_t dyn_size``”h]”jS)�”}”(hjƒ‡h]”hŒsize_t dyn_size”…”�”}”(hj…‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Më hj}‡ubjÉ)�”}”(hhh]”jM)�”}”(hŒ1minimum free size for dynamic allocation in bytes”h]”hŒ1minimum free size for dynamic allocation in bytes”…”�”}”(hjœ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j˜‡h´Më hj™‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj}‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j˜‡h´Më hjA‡ubj©)�”}”(hŒ*``size_t atom_size`` allocation atom size ”h]”(j¯)�”}”(hŒ``size_t atom_size``”h]”jS)�”}”(hj¼‡h]”hŒsize_t atom_size”…”�”}”(hj¾‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjº‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mì hj¶‡ubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation atom size”h]”hŒallocation atom size”…”�”}”(hjÕ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jчh´Mì hjÒ‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¶‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jчh´Mì hjA‡ubj©)�”}”(hŒd``pcpu_fc_cpu_distance_fn_t cpu_distance_fn`` callback to determine distance between cpus, optional ”h]”(j¯)�”}”(hŒ-``pcpu_fc_cpu_distance_fn_t cpu_distance_fn``”h]”jS)�”}”(hjõ‡h]”hŒ)pcpu_fc_cpu_distance_fn_t cpu_distance_fn”…”�”}”(hj÷‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjó‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mí hjï‡ubjÉ)�”}”(hhh]”jM)�”}”(hŒ5callback to determine distance between cpus, optional”h]”hŒ5callback to determine distance between cpus, optional”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j ˆh´Mí hj ˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjï‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j ˆh´Mí hjA‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj%‡ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mï hj%‡ubjM)�”}”(hŒ¨This function determines grouping of units, their mappings to cpus and other parameters considering needed percpu size, allocation atom size and distances between CPUs.”h]”hŒ¨This function determines grouping of units, their mappings to cpus and other parameters considering needed percpu size, allocation atom size and distances between CPUs.”…”�”}”(hjFˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mî hj%‡ubjM)�”}”(hX+Groups are always multiples of atom size and CPUs which are of LOCAL_DISTANCE both ways are grouped together and share space for units in the same group. The returned configuration is guaranteed to have CPUs on different nodes on different groups and >=75% usage of allocated virtual address space.”h]”hX+Groups are always multiples of atom size and CPUs which are of LOCAL_DISTANCE both ways are grouped together and share space for units in the same group. The returned configuration is guaranteed to have CPUs on different nodes on different groups and >=75% usage of allocated virtual address space.”…”�”}”(hjUˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mò hj%‡ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mø hj%‡ubjM)�”}”(hŒcOn success, pointer to the new allocation_info is returned. On failure, ERR_PTR value is returned.”h]”hŒcOn success, pointer to the new allocation_info is returned. On failure, ERR_PTR value is returned.”…”�”}”(hj|ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.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”]”(héŒ#pcpu_embed_first_chunk (C function)”Œc.pcpu_embed_first_chunk”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ¦int pcpu_embed_first_chunk (size_t reserved_size, size_t dyn_size, size_t atom_size, pcpu_fc_cpu_distance_fn_t cpu_distance_fn, pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn)”h]”hù)�”}”(hŒ¥int pcpu_embed_first_chunk(size_t reserved_size, size_t dyn_size, size_t atom_size, pcpu_fc_cpu_distance_fn_t cpu_distance_fn, pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj«ˆh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj§ˆh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M² ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºˆh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj§ˆh²hh³j¹ˆh´M² ubhÿ)�”}”(hŒpcpu_embed_first_chunk”h]”j)�”}”(hŒpcpu_embed_first_chunk”h]”hŒpcpu_embed_first_chunk”…”�”}”(hj̈h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjȈubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj§ˆh²hh³j¹ˆh´M² ubj )�”}”(hŒ‹(size_t reserved_size, size_t dyn_size, size_t atom_size, pcpu_fc_cpu_distance_fn_t cpu_distance_fn, pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn)”h]”(j )�”}”(hŒsize_t reserved_size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjëˆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjèˆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j툌modname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljΈsbŒc.pcpu_embed_first_chunk”†”asbuh1hhjäˆubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ‰h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjäˆubj)�”}”(hŒ reserved_size”h]”hŒ reserved_size”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjäˆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjàˆubj )�”}”(hŒsize_t dyn_size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj5‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2‰ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j7‰Œmodname”NŒ classname”Njpjs)�”}”jv]”j‰Œc.pcpu_embed_first_chunk”†”asbuh1hhj.‰ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjS‰h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj.‰ubj)�”}”(hŒdyn_size”h]”hŒdyn_size”…”�”}”(hja‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj.‰ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjàˆubj )�”}”(hŒsize_t atom_size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj}‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjz‰ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j‰Œmodname”NŒ classname”Njpjs)�”}”jv]”j‰Œc.pcpu_embed_first_chunk”†”asbuh1hhjv‰ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›‰h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjv‰ubj)�”}”(hŒ atom_size”h]”hŒ atom_size”…”�”}”(hj©‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjv‰ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjàˆubj )�”}”(hŒ)pcpu_fc_cpu_distance_fn_t cpu_distance_fn”h]”(h)�”}”(hhh]”j)�”}”(hŒpcpu_fc_cpu_distance_fn_t”h]”hŒpcpu_fc_cpu_distance_fn_t”…”�”}”(hjʼnh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‰ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jljŒmodname”NŒ classname”Njpjs)�”}”jv]”j‰Œc.pcpu_embed_first_chunk”†”asbuh1hhj¾‰ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjã‰h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¾‰ubj)�”}”(hŒcpu_distance_fn”h]”hŒcpu_distance_fn”…”�”}”(hjñ‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾‰ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjàˆubj )�”}”(hŒ%pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn”h]”(h)�”}”(hhh]”j)�”}”(hŒpcpu_fc_cpu_to_node_fn_t”h]”hŒpcpu_fc_cpu_to_node_fn_t”…”�”}”(hj Šh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Šubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jŠŒmodname”NŒ classname”Njpjs)�”}”jv]”j‰Œc.pcpu_embed_first_chunk”†”asbuh1hhjŠubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+Šh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŠubj)�”}”(hŒ cpu_to_nd_fn”h]”hŒ cpu_to_nd_fn”…”�”}”(hj9Šh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŠubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjàˆubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj§ˆh²hh³j¹ˆh´M² ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj£ˆh²hh³j¹ˆh´M² ubah}”(h]”jžˆah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¹ˆh´M² hj ˆh²hubj4)�”}”(hhh]”jM)�”}”(hŒ)embed the first percpu chunk into bootmem”h]”hŒ)embed the first percpu chunk into bootmem”…”�”}”(hjcŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M² hj`Šh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj ˆh²hh³j¹ˆh´M² ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj{ŠjHj{ŠjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXa**Parameters** ``size_t reserved_size`` the size of reserved percpu area in bytes ``size_t dyn_size`` minimum free size for dynamic allocation in bytes ``size_t atom_size`` allocation atom size ``pcpu_fc_cpu_distance_fn_t cpu_distance_fn`` callback to determine distance between cpus, optional ``pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn`` callback to convert cpu to it's node, optional **Description** This is a helper to ease setting up embedded first percpu chunk and can be called where pcpu_setup_first_chunk() is expected. If this function is used to setup the first chunk, it is allocated by calling pcpu_fc_alloc and used as-is without being mapped into vmalloc area. Allocations are always whole multiples of **atom_size** aligned to **atom_size**. This enables the first chunk to piggy back on the linear physical mapping which often uses larger page size. Please note that this can result in very sparse cpu->unit mapping on NUMA machines thus requiring large vmalloc address space. Don't use this allocator if vmalloc space is not orders of magnitude larger than distances between node memory addresses (ie. 32bit NUMA machines). **dyn_size** specifies the minimum dynamic area size. If the needed size is smaller than the minimum or specified unit size, the leftover is returned using pcpu_fc_free. **Return** 0 on success, -errno on failure.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj…Šh]”hŒ Parameters”…”�”}”(hj‡Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjƒŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M¶ hjŠubj¤)�”}”(hhh]”(j©)�”}”(hŒC``size_t reserved_size`` the size of reserved percpu area in bytes ”h]”(j¯)�”}”(hŒ``size_t reserved_size``”h]”jS)�”}”(hj¤Šh]”hŒsize_t reserved_size”…”�”}”(hj¦Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¢Šubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M³ hjžŠubjÉ)�”}”(hhh]”jM)�”}”(hŒ)the size of reserved percpu area in bytes”h]”hŒ)the size of reserved percpu area in bytes”…”�”}”(hj½Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¹Šh´M³ hjºŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjžŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¹Šh´M³ hj›Šubj©)�”}”(hŒF``size_t dyn_size`` minimum free size for dynamic allocation in bytes ”h]”(j¯)�”}”(hŒ``size_t dyn_size``”h]”jS)�”}”(hjÝŠh]”hŒsize_t dyn_size”…”�”}”(hjߊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÛŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M´ hj׊ubjÉ)�”}”(hhh]”jM)�”}”(hŒ1minimum free size for dynamic allocation in bytes”h]”hŒ1minimum free size for dynamic allocation in bytes”…”�”}”(hjöŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jòŠh´M´ hjóŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj׊ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jòŠh´M´ hj›Šubj©)�”}”(hŒ*``size_t atom_size`` allocation atom size ”h]”(j¯)�”}”(hŒ``size_t atom_size``”h]”jS)�”}”(hj‹h]”hŒsize_t atom_size”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mµ hj‹ubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation atom size”h]”hŒallocation atom size”…”�”}”(hj/‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j+‹h´Mµ hj,‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j+‹h´Mµ hj›Šubj©)�”}”(hŒd``pcpu_fc_cpu_distance_fn_t cpu_distance_fn`` callback to determine distance between cpus, optional ”h]”(j¯)�”}”(hŒ-``pcpu_fc_cpu_distance_fn_t cpu_distance_fn``”h]”jS)�”}”(hjO‹h]”hŒ)pcpu_fc_cpu_distance_fn_t cpu_distance_fn”…”�”}”(hjQ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjM‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M¶ hjI‹ubjÉ)�”}”(hhh]”jM)�”}”(hŒ5callback to determine distance between cpus, optional”h]”hŒ5callback to determine distance between cpus, optional”…”�”}”(hjh‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jd‹h´M¶ hje‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjI‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jd‹h´M¶ hj›Šubj©)�”}”(hŒY``pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn`` callback to convert cpu to it's node, optional ”h]”(j¯)�”}”(hŒ)``pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn``”h]”jS)�”}”(hjˆ‹h]”hŒ%pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn”…”�”}”(hjŠ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj†‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M· hj‚‹ubjÉ)�”}”(hhh]”jM)�”}”(hŒ.callback to convert cpu to it's node, optional”h]”hŒ0callback to convert cpu to it’s node, optional”…”�”}”(hj¡‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�‹h´M· hjž‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‚‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�‹h´M· hj›Šubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjŠubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjËh]”hŒ Description”…”�”}”(hjÅ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÁ‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M¹ hjŠubjM)�”}”(hŒ}This is a helper to ease setting up embedded first percpu chunk and can be called where pcpu_setup_first_chunk() is expected.”h]”hŒ}This is a helper to ease setting up embedded first percpu chunk and can be called where pcpu_setup_first_chunk() is expected.”…”�”}”(hjÙ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M¸ hjŠubjM)�”}”(hŒåIf this function is used to setup the first chunk, it is allocated by calling pcpu_fc_alloc and used as-is without being mapped into vmalloc area. Allocations are always whole multiples of **atom_size** aligned to **atom_size**.”h]”(hŒ¾If this function is used to setup the first chunk, it is allocated by calling pcpu_fc_alloc and used as-is without being mapped into vmalloc area. Allocations are always whole multiples of ”…”�”}”(hjè‹h²hh³Nh´NubjŽ)�”}”(hŒ **atom_size**”h]”hŒ atom_size”…”�”}”(hjð‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjè‹ubhŒ aligned to ”…”�”}”(hjè‹h²hh³Nh´NubjŽ)�”}”(hŒ **atom_size**”h]”hŒ atom_size”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjè‹ubhŒ.”…”�”}”(hjè‹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M» hjŠubjM)�”}”(hX�This enables the first chunk to piggy back on the linear physical mapping which often uses larger page size. Please note that this can result in very sparse cpu->unit mapping on NUMA machines thus requiring large vmalloc address space. Don't use this allocator if vmalloc space is not orders of magnitude larger than distances between node memory addresses (ie. 32bit NUMA machines).”h]”hXƒThis enables the first chunk to piggy back on the linear physical mapping which often uses larger page size. Please note that this can result in very sparse cpu->unit mapping on NUMA machines thus requiring large vmalloc address space. Don’t use this allocator if vmalloc space is not orders of magnitude larger than distances between node memory addresses (ie. 32bit NUMA machines).”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MÀ hjŠubjM)�”}”(hŒ5**dyn_size** specifies the minimum dynamic area size.”h]”(jŽ)�”}”(hŒ **dyn_size**”h]”hŒdyn_size”…”�”}”(hj.Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj*ŒubhŒ) specifies the minimum dynamic area size.”…”�”}”(hj*Œh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MÇ hjŠubjM)�”}”(hŒsIf the needed size is smaller than the minimum or specified unit size, the leftover is returned using pcpu_fc_free.”h]”hŒsIf the needed size is smaller than the minimum or specified unit size, the leftover is returned using pcpu_fc_free.”…”�”}”(hjGŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MÉ hjŠubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjXŒh]”hŒReturn”…”�”}”(hjZŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjVŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´MÌ hjŠubjM)�”}”(hŒ 0 on success, -errno on failure.”h]”hŒ 0 on success, -errno on failure.”…”�”}”(hjnŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.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”]”(héŒ"pcpu_page_first_chunk (C function)”Œc.pcpu_page_first_chunk”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒWint pcpu_page_first_chunk (size_t reserved_size, pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn)”h]”hù)�”}”(hŒVint pcpu_page_first_chunk(size_t reserved_size, pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj�Œh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj™Œh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mu ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬Œh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj™Œh²hh³j«Œh´Mu ubhÿ)�”}”(hŒpcpu_page_first_chunk”h]”j)�”}”(hŒpcpu_page_first_chunk”h]”hŒpcpu_page_first_chunk”…”�”}”(hj¾Œh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjºŒubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj™Œh²hh³j«Œh´Mu ubj )�”}”(hŒ=(size_t reserved_size, pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn)”h]”(j )�”}”(hŒsize_t reserved_size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÝŒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÚŒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jߌŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÀŒsbŒc.pcpu_page_first_chunk”†”asbuh1hhjÖŒubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýŒh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÖŒubj)�”}”(hŒ reserved_size”h]”hŒ reserved_size”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÖŒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÒŒubj )�”}”(hŒ%pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn”h]”(h)�”}”(hhh]”j)�”}”(hŒpcpu_fc_cpu_to_node_fn_t”h]”hŒpcpu_fc_cpu_to_node_fn_t”…”�”}”(hj'�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj$�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j)�Œmodname”NŒ classname”Njpjs)�”}”jv]”jùŒŒc.pcpu_page_first_chunk”†”asbuh1hhj �ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjE�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj �ubj)�”}”(hŒ cpu_to_nd_fn”h]”hŒ cpu_to_nd_fn”…”�”}”(hjS�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj �ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÒŒubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj™Œh²hh³j«Œh´Mu ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj•Œh²hh³j«Œh´Mu ubah}”(h]”j�Œah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j«Œh´Mu hj’Œh²hubj4)�”}”(hhh]”jM)�”}”(hŒ)map the first chunk using PAGE_SIZE pages”h]”hŒ)map the first chunk using PAGE_SIZE pages”…”�”}”(hj}�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mu hjz�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj’Œh²hh³j«Œh´Mu ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj•�jHj•�jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXÒ**Parameters** ``size_t reserved_size`` the size of reserved percpu area in bytes ``pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn`` callback to convert cpu to it's node, optional **Description** This is a helper to ease setting up page-remapped first percpu chunk and can be called where pcpu_setup_first_chunk() is expected. This is the basic allocator. Static percpu area is allocated page-by-page into vmalloc area. **Return** 0 on success, -errno on failure.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjŸ�h]”hŒ Parameters”…”�”}”(hj¡�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj��ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´My hj™�ubj¤)�”}”(hhh]”(j©)�”}”(hŒC``size_t reserved_size`` the size of reserved percpu area in bytes ”h]”(j¯)�”}”(hŒ``size_t reserved_size``”h]”jS)�”}”(hj¾�h]”hŒsize_t reserved_size”…”�”}”(hjÀ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¼�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mv hj¸�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ)the size of reserved percpu area in bytes”h]”hŒ)the size of reserved percpu area in bytes”…”�”}”(hj×�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÓ�h´Mv hjÔ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¸�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÓ�h´Mv hjµ�ubj©)�”}”(hŒY``pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn`` callback to convert cpu to it's node, optional ”h]”(j¯)�”}”(hŒ)``pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn``”h]”jS)�”}”(hj÷�h]”hŒ%pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn”…”�”}”(hjù�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjõ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mw hjñ�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ.callback to convert cpu to it's node, optional”h]”hŒ0callback to convert cpu to it’s node, optional”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j Žh´Mw hj Žubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjñ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j Žh´Mw hjµ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj™�ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´My hj™�ubjM)�”}”(hŒ‚This is a helper to ease setting up page-remapped first percpu chunk and can be called where pcpu_setup_first_chunk() is expected.”h]”hŒ‚This is a helper to ease setting up page-remapped first percpu chunk and can be called where pcpu_setup_first_chunk() is expected.”…”�”}”(hjHŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´Mx hj™�ubjM)�”}”(hŒ]This is the basic allocator. Static percpu area is allocated page-by-page into vmalloc area.”h]”hŒ]This is the basic allocator. Static percpu area is allocated page-by-page into vmalloc area.”…”�”}”(hjWŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M{ hj™�ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjhŽh]”hŒReturn”…”�”}”(hjjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjfŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.c”h´M~ hj™�ubjM)�”}”(hŒ 0 on success, -errno on failure.”h]”hŒ 0 on success, -errno on failure.”…”�”}”(hj~Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/percpu.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”]”(héŒ#copy_from_user_nofault (C function)”Œc.copy_from_user_nofault”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒLlong copy_from_user_nofault (void *dst, const void __user *src, size_t size)”h]”hù)�”}”(hŒKlong copy_from_user_nofault(void *dst, const void __user *src, size_t size)”h]”(jµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj­Žh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj©Žh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´KpubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼Žh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj©Žh²hh³j»Žh´Kpubhÿ)�”}”(hŒcopy_from_user_nofault”h]”j)�”}”(hŒcopy_from_user_nofault”h]”hŒcopy_from_user_nofault”…”�”}”(hjÎŽh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÊŽubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj©Žh²hh³j»Žh´Kpubj )�”}”(hŒ0(void *dst, const void __user *src, size_t size)”h]”(j )�”}”(hŒ void *dst”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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æŽubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjæŽubj)�”}”(hŒdst”h]”hŒdst”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjæŽubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjâŽubj )�”}”(hŒconst void __user *src”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj,�h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj(�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj(�ubjµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjG�h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj(�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjU�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj(�ubhŒ__user”…”�”}”(hj(�h²hh³Nh´NubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjg�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj(�ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hju�h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj(�ubj)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hj‚�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj(�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjâŽubj )�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjž�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj›�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j �Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÐŽsbŒc.copy_from_user_nofault”†”asbuh1hhj—�ubjÇ)�”}”(hŒ ”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 ]”jah"]”h$]”h&]”uh1jhj—�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjâŽubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj©Žh²hh³j»Žh´Kpubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¥Žh²hh³j»Žh´Kpubah}”(h]”j Žah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j»Žh´Kphj¢Žh²hubj4)�”}”(hhh]”jM)�”}”(hŒ1safely attempt to read from a user-space location”h]”hŒ1safely attempt to read from a user-space location”…”�”}”(hjö�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´Kphjó�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¢Žh²hh³j»Žh´Kpubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj�jHj�jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXV**Parameters** ``void *dst`` pointer to the buffer that shall take the data ``const void __user *src`` address to read from. This must be a user address. ``size_t size`` size of the data chunk **Description** Safely read from user address **src** to the buffer at **dst**. If a kernel fault happens, handle that and return -EFAULT.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj�h]”hŒ Parameters”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´Kthj�ubj¤)�”}”(hhh]”(j©)�”}”(hŒ=``void *dst`` pointer to the buffer that shall take the data ”h]”(j¯)�”}”(hŒ ``void *dst``”h]”jS)�”}”(hj7�h]”hŒ void *dst”…”�”}”(hj9�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj5�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´Kqhj1�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ.pointer to the buffer that shall take the data”h]”hŒ.pointer to the buffer that shall take the data”…”�”}”(hjP�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jL�h´KqhjM�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj1�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jL�h´Kqhj.�ubj©)�”}”(hŒN``const void __user *src`` address to read from. This must be a user address. ”h]”(j¯)�”}”(hŒ``const void __user *src``”h]”jS)�”}”(hjp�h]”hŒconst void __user *src”…”�”}”(hjr�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjn�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´Krhjj�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ2address to read from. This must be a user address.”h]”hŒ2address to read from. This must be a user address.”…”�”}”(hj‰�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j…�h´Krhj†�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j…�h´Krhj.�ubj©)�”}”(hŒ'``size_t size`` size of the data chunk ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hj©�h]”hŒ size_t size”…”�”}”(hj«�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj§�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´Kshj£�ubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of the data chunk”h]”hŒsize of the data chunk”…”�”}”(hjÂ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¾�h´Kshj¿�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj£�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¾�h´Kshj.�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj�ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjä�h]”hŒ Description”…”�”}”(hjæ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjâ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´Kuhj�ubjM)�”}”(hŒzSafely read from user address **src** to the buffer at **dst**. If a kernel fault happens, handle that and return -EFAULT.”h]”(hŒSafely read from user address ”…”�”}”(hjú�h²hh³Nh´NubjŽ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjú�ubhŒ to the buffer at ”…”�”}”(hjú�h²hh³Nh´NubjŽ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjú�ubhŒ<. If a kernel fault happens, handle that and return -EFAULT.”…”�”}”(hjú�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´Kthj�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!copy_to_user_nofault (C function)”Œc.copy_to_user_nofault”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒJlong copy_to_user_nofault (void __user *dst, const void *src, size_t size)”h]”hù)�”}”(hŒIlong copy_to_user_nofault(void __user *dst, const void *src, size_t size)”h]”(jµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjM‘h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjI‘h²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´K�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\‘h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjI‘h²hh³j[‘h´K�ubhÿ)�”}”(hŒcopy_to_user_nofault”h]”j)�”}”(hŒcopy_to_user_nofault”h]”hŒcopy_to_user_nofault”…”�”}”(hjn‘h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjj‘ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjI‘h²hh³j[‘h´K�ubj )�”}”(hŒ0(void __user *dst, const void *src, size_t size)”h]”(j )�”}”(hŒvoid __user *dst”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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Œ__user”…”�”}”(hj†‘h²hh³Nh´NubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª‘h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj†‘ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¸‘h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj†‘ubj)�”}”(hŒdst”h]”hŒdst”…”�”}”(hjÅ‘h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj†‘ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‚‘ubj )�”}”(hŒconst void *src”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjÞ‘h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÚ‘ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjë‘h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÚ‘ubjµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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Ú‘ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÚ‘ubj)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hj"’h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÚ‘ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‚‘ubj )�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj>’h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj;’ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j@’Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljp‘sbŒc.copy_to_user_nofault”†”asbuh1hhj7’ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^’h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj7’ubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjl’h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‚‘ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjI‘h²hh³j[‘h´K�ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjE‘h²hh³j[‘h´K�ubah}”(h]”j@‘ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j[‘h´K�hjB‘h²hubj4)�”}”(hhh]”jM)�”}”(hŒ0safely attempt to write to a user-space location”h]”hŒ0safely attempt to write to a user-space location”…”�”}”(hj–’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´K�hj“’h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjB‘h²hh³j[‘h´K�ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj®’jHj®’jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX/**Parameters** ``void __user *dst`` address to write to ``const void *src`` pointer to the data that shall be written ``size_t size`` size of the data chunk **Description** Safely write to address **dst** from the buffer at **src**. If a kernel fault happens, handle that and return -EFAULT.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¸’h]”hŒ Parameters”…”�”}”(hjº’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¶’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´K‘hj²’ubj¤)�”}”(hhh]”(j©)�”}”(hŒ)``void __user *dst`` address to write to ”h]”(j¯)�”}”(hŒ``void __user *dst``”h]”jS)�”}”(hj×’h]”hŒvoid __user *dst”…”�”}”(hjÙ’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÕ’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´KŽhjÑ’ubjÉ)�”}”(hhh]”jM)�”}”(hŒaddress to write to”h]”hŒaddress to write to”…”�”}”(hjð’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jì’h´KŽhjí’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÑ’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jì’h´KŽhjÎ’ubj©)�”}”(hŒ>``const void *src`` pointer to the data that shall be written ”h]”(j¯)�”}”(hŒ``const void *src``”h]”jS)�”}”(hj“h]”hŒconst void *src”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´K�hj “ubjÉ)�”}”(hhh]”jM)�”}”(hŒ)pointer to the data that shall be written”h]”hŒ)pointer to the data that shall be written”…”�”}”(hj)“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j%“h´K�hj&“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj “ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j%“h´K�hjÎ’ubj©)�”}”(hŒ'``size_t size`` size of the data chunk ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hjI“h]”hŒ size_t size”…”�”}”(hjK“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjG“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´K�hjC“ubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of the data chunk”h]”hŒsize of the data chunk”…”�”}”(hjb“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j^“h´K�hj_“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjC“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j^“h´K�hjÎ’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj²’ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj„“h]”hŒ Description”…”�”}”(hj†“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‚“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´K’hj²’ubjM)�”}”(hŒwSafely write to address **dst** from the buffer at **src**. If a kernel fault happens, handle that and return -EFAULT.”h]”(hŒSafely write to address ”…”�”}”(hjš“h²hh³Nh´NubjŽ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hj¢“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjš“ubhŒ from the buffer at ”…”�”}”(hjš“h²hh³Nh´NubjŽ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hj´“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjš“ubhŒ=. If a kernel fault happens, handle that and return -EFAULT.”…”�”}”(hjš“h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.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”]”(héŒ&strncpy_from_user_nofault (C function)”Œc.strncpy_from_user_nofault”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒVlong strncpy_from_user_nofault (char *dst, const void __user *unsafe_addr, long count)”h]”hù)�”}”(hŒUlong strncpy_from_user_nofault(char *dst, const void __user *unsafe_addr, long count)”h]”(jµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjí“h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjé“h²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´K¦ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjü“h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjé“h²hh³jû“h´K¦ubhÿ)�”}”(hŒstrncpy_from_user_nofault”h]”j)�”}”(hŒstrncpy_from_user_nofault”h]”hŒstrncpy_from_user_nofault”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ”ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjé“h²hh³jû“h´K¦ubj )�”}”(hŒ7(char *dst, const void __user *unsafe_addr, long count)”h]”(j )�”}”(hŒ char *dst”h]”(jµ)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj*”h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj&”ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8”h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj&”ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjF”h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj&”ubj)�”}”(hŒdst”h]”hŒdst”…”�”}”(hjS”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj&”ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj"”ubj )�”}”(hŒconst void __user *unsafe_addr”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjl”h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjh”ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjy”h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjh”ubjµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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”ubhŒ__user”…”�”}”(hjh”h²hh³Nh´NubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§”h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjh”ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjµ”h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjh”ubj)�”}”(hŒ unsafe_addr”h]”hŒ unsafe_addr”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjh”ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj"”ubj )�”}”(hŒ long count”h]”(jµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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×”ubj)�”}”(hŒcount”h]”hŒcount”…”�”}”(hj÷”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj×”ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj"”ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjé“h²hh³jû“h´K¦ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjå“h²hh³jû“h´K¦ubah}”(h]”jà“ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jû“h´K¦hjâ“h²hubj4)�”}”(hhh]”jaW)�”}”(hhh]”jÕ/)�”}”(hŒ6Copy a NUL terminated string from unsafe user address.”h]”jM)�”}”(hj&•h]”hŒ6Copy a NUL terminated string from unsafe user address.”…”�”}”(hj(•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´K¦hj$•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hj!•h²hh³j5•h´Nubah}”(h]”h ]”h"]”h$]”h&]”jƒWj„Wuh1j`Wh³j5•h´K¦hj•h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjâ“h²hh³jû“h´K¦ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjK•jHjK•jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXŸ**Parameters** ``char *dst`` Destination address, in kernel space. This buffer must be at least **count** bytes long. ``const void __user *unsafe_addr`` Unsafe user address. ``long count`` Maximum number of bytes to copy, including the trailing NUL. **Description** Copies a NUL-terminated string from unsafe user address to kernel buffer. On success, returns the length of the string INCLUDING the trailing NUL. If access fails, returns -EFAULT (some data may have been copied and the trailing NUL added). If **count** is smaller than the length of the string, copies **count**-1 bytes, sets the last byte of **dst** buffer to NUL and returns **count**.”h]”(jM)�”}”(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&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´KªhjO•ubj¤)�”}”(hhh]”(j©)�”}”(hŒh``char *dst`` Destination address, in kernel space. This buffer must be at least **count** bytes long. ”h]”(j¯)�”}”(hŒ ``char *dst``”h]”jS)�”}”(hjt•h]”hŒ char *dst”…”�”}”(hjv•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjr•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´K©hjn•ubjÉ)�”}”(hhh]”jM)�”}”(hŒYDestination address, in kernel space. This buffer must be at least **count** bytes long.”h]”(hŒDDestination address, in kernel space. This buffer must be at least ”…”�”}”(hj�•h²hh³Nh´NubjŽ)�”}”(hŒ **count**”h]”hŒcount”…”�”}”(hj••h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�•ubhŒ bytes long.”…”�”}”(hj�•h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´K¨hjŠ•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjn•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‰•h´K©hjk•ubj©)�”}”(hŒ8``const void __user *unsafe_addr`` Unsafe user address. ”h]”(j¯)�”}”(hŒ"``const void __user *unsafe_addr``”h]”jS)�”}”(hjÀ•h]”hŒconst void __user *unsafe_addr”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¾•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´Kªhjº•ubjÉ)�”}”(hhh]”jM)�”}”(hŒUnsafe user address.”h]”hŒUnsafe user address.”…”�”}”(hjÙ•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÕ•h´KªhjÖ•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjº•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÕ•h´Kªhjk•ubj©)�”}”(hŒL``long count`` Maximum number of bytes to copy, including the trailing NUL. ”h]”(j¯)�”}”(hŒ``long count``”h]”jS)�”}”(hjù•h]”hŒ long count”…”�”}”(hjû•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj÷•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´K«hjó•ubjÉ)�”}”(hhh]”jM)�”}”(hŒ count". On exception (or invalid count), returns 0. Unlike strnlen_user, this can be used from IRQ handler etc. because it disables pagefaults.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj˜h]”hŒ Parameters”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´KÒhj˜ubj¤)�”}”(hhh]”(j©)�”}”(hŒ:``const void __user *unsafe_addr`` The string to measure. ”h]”(j¯)�”}”(hŒ"``const void __user *unsafe_addr``”h]”jS)�”}”(hj3˜h]”hŒconst void __user *unsafe_addr”…”�”}”(hj5˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj1˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´KÏhj-˜ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe string to measure.”h]”hŒThe string to measure.”…”�”}”(hjL˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jH˜h´KÏhjI˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj-˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jH˜h´KÏhj*˜ubj©)�”}”(hŒ-``long count`` Maximum count (including NUL) ”h]”(j¯)�”}”(hŒ``long count``”h]”jS)�”}”(hjl˜h]”hŒ long count”…”�”}”(hjn˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´KÐhjf˜ubjÉ)�”}”(hhh]”jM)�”}”(hŒMaximum count (including NUL)”h]”hŒMaximum count (including NUL)”…”�”}”(hj…˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�˜h´KÐhj‚˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjf˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�˜h´KÐhj*˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj˜ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj§˜h]”hŒ Description”…”�”}”(hj©˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¥˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´KÒhj˜ubjM)�”}”(hŒHGet the size of a NUL-terminated string in user space without pagefault.”h]”hŒHGet the size of a NUL-terminated string in user space without pagefault.”…”�”}”(hj½˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´KÑhj˜ubjM)�”}”(hŒ=Returns the size of the string INCLUDING the terminating NUL.”h]”hŒ=Returns the size of the string INCLUDING the terminating NUL.”…”�”}”(hj̘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´KÓhj˜ubjM)�”}”(hŒ¤If the string is too long, returns a number larger than **count**. User has to check the return value against "> count". On exception (or invalid count), returns 0.”h]”(hŒ8If the string is too long, returns a number larger than ”…”�”}”(hjÛ˜h²hh³Nh´NubjŽ)�”}”(hŒ **count**”h]”hŒcount”…”�”}”(hjã˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÛ˜ubhŒg. User has to check the return value against “> countâ€�. On exception (or invalid count), returns 0.”…”�”}”(hjÛ˜h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.c”h´KÕhj˜ubjM)�”}”(hŒ[Unlike strnlen_user, this can be used from IRQ handler etc. because it disables pagefaults.”h]”hŒ[Unlike strnlen_user, this can be used from IRQ handler etc. because it disables pagefaults.”…”�”}”(hjü˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:130: ./mm/maccess.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”]”(héŒ&writeback_throttling_sane (C function)”Œc.writeback_throttling_sane”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ8bool writeback_throttling_sane (struct scan_control *sc)”h]”hù)�”}”(hŒ7bool writeback_throttling_sane(struct scan_control *sc)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hj+™h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj'™h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´KäubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9™h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj'™h²hh³j8™h´Käubhÿ)�”}”(hŒwriteback_throttling_sane”h]”j)�”}”(hŒwriteback_throttling_sane”h]”hŒwriteback_throttling_sane”…”�”}”(hjK™h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjG™ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj'™h²hh³j8™h´Käubj )�”}”(hŒ(struct scan_control *sc)”h]”j )�”}”(hŒstruct scan_control *sc”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjg™h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjc™ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjt™h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjc™ubh)�”}”(hhh]”j)�”}”(hŒ scan_control”h]”hŒ scan_control”…”�”}”(hj…™h²h•h³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‚™ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j‡™Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljM™sbŒc.writeback_throttling_sane”†”asbuh1hhjc™ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥™h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjc™ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj³™h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjc™ubj)�”}”(hŒsc”h]”hŒsc”…”�”}”(hjÀ™h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjc™ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj_™ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj'™h²hh³j8™h´Käubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj#™h²hh³j8™h´Käubah}”(h]”j™ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j8™h´Kähj ™h²hubj4)�”}”(hhh]”jM)�”}”(hŒ2is the usual dirty throttling mechanism available?”h]”hŒ2is the usual dirty throttling mechanism available?”…”�”}”(hjê™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´Kähjç™h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj ™h²hh³j8™h´Käubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjšjHjšjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``struct scan_control *sc`` scan_control in question **Description** The normal page dirty throttling mechanism in balance_dirty_pages() is completely broken with the legacy memcg and direct stalling in shrink_folio_list() is used for throttling instead, which lacks all the niceties such as fairness, adaptive pausing, bandwidth proportional allocation and configurability. This function tests whether the vmscan currently in progress can assume that the normal dirty throttling mechanism is operational.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj šh]”hŒ Parameters”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj šubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´Kèhjšubj¤)�”}”(hhh]”j©)�”}”(hŒ5``struct scan_control *sc`` scan_control in question ”h]”(j¯)�”}”(hŒ``struct scan_control *sc``”h]”jS)�”}”(hj+šh]”hŒstruct scan_control *sc”…”�”}”(hj-šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj)šubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´Kåhj%šubjÉ)�”}”(hhh]”jM)�”}”(hŒscan_control in question”h]”hŒscan_control in question”…”�”}”(hjDšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j@šh´KåhjAšubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj%šubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j@šh´Kåhj"šubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjšubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´KçhjšubjM)�”}”(hX1The normal page dirty throttling mechanism in balance_dirty_pages() is completely broken with the legacy memcg and direct stalling in shrink_folio_list() is used for throttling instead, which lacks all the niceties such as fairness, adaptive pausing, bandwidth proportional allocation and configurability.”h]”hX1The normal page dirty throttling mechanism in balance_dirty_pages() is completely broken with the legacy memcg and direct stalling in shrink_folio_list() is used for throttling instead, which lacks all the niceties such as fairness, adaptive pausing, bandwidth proportional allocation and configurability.”…”�”}”(hj|šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´KæhjšubjM)�”}”(hŒ‚This function tests whether the vmscan currently in progress can assume that the normal dirty throttling mechanism is operational.”h]”hŒ‚This function tests whether the vmscan currently in progress can assume that the normal dirty throttling mechanism is operational.”…”�”}”(hj‹šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.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”]”(héŒlruvec_lru_size (C function)”Œc.lruvec_lru_size”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒVunsigned long lruvec_lru_size (struct lruvec *lruvec, enum lru_list lru, int zone_idx)”h]”hù)�”}”(hŒUunsigned long lruvec_lru_size(struct lruvec *lruvec, enum lru_list lru, int zone_idx)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjºšh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¶šh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´M…ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉšh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¶šh²hh³jÈšh´M…ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjךh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¶šh²hh³jÈšh´M…ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåšh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¶šh²hh³jÈšh´M…ubhÿ)�”}”(hŒlruvec_lru_size”h]”j)�”}”(hŒlruvec_lru_size”h]”hŒlruvec_lru_size”…”�”}”(hj÷šh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjóšubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¶šh²hh³jÈšh´M…ubj )�”}”(hŒ8(struct lruvec *lruvec, enum lru_list lru, int zone_idx)”h]”(j )�”}”(hŒstruct lruvec *lruvec”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj›ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ›h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj›ubh)�”}”(hhh]”j)�”}”(hŒlruvec”h]”hŒlruvec”…”�”}”(hj1›h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj.›ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j3›Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljùšsbŒc.lruvec_lru_size”†”asbuh1hhj›ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQ›h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj›ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj_›h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj›ubj)�”}”(hŒlruvec”h]”hŒlruvec”…”�”}”(hjl›h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj›ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj ›ubj )�”}”(hŒenum lru_list lru”h]”(j5)�”}”(hj‘ôh]”hŒenum”…”�”}”(hj…›h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj�›ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’›h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�›ubh)�”}”(hhh]”j)�”}”(hŒlru_list”h]”hŒlru_list”…”�”}”(hj£›h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ›ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¥›Œmodname”NŒ classname”Njpjs)�”}”jv]”jM›Œc.lruvec_lru_size”†”asbuh1hhj�›ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁ›h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj�›ubj)�”}”(hŒlru”h]”hŒlru”…”�”}”(hjÏ›h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�›ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj ›ubj )�”}”(hŒ int zone_idx”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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ä›ubj)�”}”(hŒzone_idx”h]”hŒzone_idx”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjä›ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj ›ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¶šh²hh³jÈšh´M…ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj²šh²hh³jÈšh´M…ubah}”(h]”j­šah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÈšh´M…hj¯šh²hubj4)�”}”(hhh]”jM)�”}”(hŒ2Returns the number of pages on the given LRU list.”h]”hŒ2Returns the number of pages on the given LRU list.”…”�”}”(hj.œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´M…hj+œh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¯šh²hh³jÈšh´M…ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjFœjHjFœjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ®**Parameters** ``struct lruvec *lruvec`` lru vector ``enum lru_list lru`` lru to use ``int zone_idx`` zones to consider (use MAX_NR_ZONES - 1 for the whole LRU list)”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´M‰hjJœubj¤)�”}”(hhh]”(j©)�”}”(hŒ%``struct lruvec *lruvec`` lru vector ”h]”(j¯)�”}”(hŒ``struct lruvec *lruvec``”h]”jS)�”}”(hjoœh]”hŒstruct lruvec *lruvec”…”�”}”(hjqœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjmœubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´M†hjiœubjÉ)�”}”(hhh]”jM)�”}”(hŒ lru vector”h]”hŒ lru vector”…”�”}”(hjˆœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j„œh´M†hj…œubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjiœubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j„œh´M†hjfœubj©)�”}”(hŒ!``enum lru_list lru`` lru to use ”h]”(j¯)�”}”(hŒ``enum lru_list lru``”h]”jS)�”}”(hj¨œh]”hŒenum lru_list lru”…”�”}”(hjªœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¦œubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´M‡hj¢œubjÉ)�”}”(hhh]”jM)�”}”(hŒ lru to use”h]”hŒ lru to use”…”�”}”(hjÁœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j½œh´M‡hj¾œubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¢œubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j½œh´M‡hjfœubj©)�”}”(hŒP``int zone_idx`` zones to consider (use MAX_NR_ZONES - 1 for the whole LRU list)”h]”(j¯)�”}”(hŒ``int zone_idx``”h]”jS)�”}”(hjáœh]”hŒ int zone_idx”…”�”}”(hjãœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjßœubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´M‰hjÛœubjÉ)�”}”(hhh]”jM)�”}”(hŒ?zones to consider (use MAX_NR_ZONES - 1 for the whole LRU list)”h]”hŒ?zones to consider (use MAX_NR_ZONES - 1 for the whole LRU list)”…”�”}”(hjúœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´Mˆhj÷œubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÛœubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jöœh´M‰hjfœubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjJœubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒremove_mapping (C function)”Œc.remove_mapping”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒHlong remove_mapping (struct address_space *mapping, struct folio *folio)”h]”hù)�”}”(hŒGlong remove_mapping(struct address_space *mapping, struct folio *folio)”h]”(jµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj;�h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj7�h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJ�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj7�h²hh³jI�h´Mubhÿ)�”}”(hŒremove_mapping”h]”j)�”}”(hŒremove_mapping”h]”hŒremove_mapping”…”�”}”(hj\�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjX�ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj7�h²hh³jI�h´Mubj )�”}”(hŒ4(struct address_space *mapping, struct folio *folio)”h]”(j )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjx�h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjt�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjt�ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj–�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj“�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j˜�Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj^�sbŒc.remove_mapping”†”asbuh1hhjt�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjt�ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÄ�h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjt�ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjÑ�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjt�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjp�ubj )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjê�h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjæ�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷�h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjæ�ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjžubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j žŒmodname”NŒ classname”Njpjs)�”}”jv]”j²�Œc.remove_mapping”†”asbuh1hhjæ�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&žh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjæ�ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj4žh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjæ�ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjAžh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjæ�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjp�ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj7�h²hh³jI�h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj3�h²hh³jI�h´Mubah}”(h]”j.�ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jI�h´Mhj0�h²hubj4)�”}”(hhh]”jM)�”}”(hŒ+Attempt to remove a folio from its mapping.”h]”hŒ+Attempt to remove a folio from its mapping.”…”�”}”(hjkžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´Mhjhžh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj0�h²hh³jI�h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjƒžjHjƒžjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXž**Parameters** ``struct address_space *mapping`` The address space. ``struct folio *folio`` The folio to remove. **Description** If the folio is dirty, under writeback or if someone else has a ref on it, removal will fail. **Return** The number of pages removed from the mapping. 0 if the folio could not be removed. **Context** The caller should have a single refcount on the folio and hold its lock.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj�žh]”hŒ Parameters”…”�”}”(hj�žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‹žubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´Mhj‡žubj¤)�”}”(hhh]”(j©)�”}”(hŒ5``struct address_space *mapping`` The address space. ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj¬žh]”hŒstruct address_space *mapping”…”�”}”(hj®žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjªžubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´Mhj¦žubjÉ)�”}”(hhh]”jM)�”}”(hŒThe address space.”h]”hŒThe address space.”…”�”}”(hjÅžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÁžh´Mhjžubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¦žubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÁžh´Mhj£žubj©)�”}”(hŒ-``struct folio *folio`` The folio to remove. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjåžh]”hŒstruct folio *folio”…”�”}”(hjçžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjãžubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´MhjßžubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to remove.”h]”hŒThe folio to remove.”…”�”}”(hjþžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³júžh´Mhjûžubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjßžubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³júžh´Mhj£žubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj‡žubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj Ÿh]”hŒ Description”…”�”}”(hj"Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´Mhj‡žubjM)�”}”(hŒ]If the folio is dirty, under writeback or if someone else has a ref on it, removal will fail.”h]”hŒ]If the folio is dirty, under writeback or if someone else has a ref on it, removal will fail.”…”�”}”(hj6Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´Mhj‡žubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´Mhj‡žubjM)�”}”(hŒSThe number of pages removed from the mapping. 0 if the folio could not be removed.”h]”hŒSThe number of pages removed from the mapping. 0 if the folio could not be removed.”…”�”}”(hj]Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´Mhj‡žubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjnŸh]”hŒContext”…”�”}”(hjpŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjlŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´Mhj‡žubjM)�”}”(hŒHThe caller should have a single refcount on the folio and hold its lock.”h]”hŒHThe caller should have a single refcount on the folio and hold its lock.”…”�”}”(hj„Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´Mhj‡žubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_putback_lru (C function)”Œc.folio_putback_lru”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ,void folio_putback_lru (struct folio *folio)”h]”hù)�”}”(hŒ+void folio_putback_lru(struct folio *folio)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj³Ÿh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¯Ÿh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´M-ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¯Ÿh²hh³jÁŸh´M-ubhÿ)�”}”(hŒfolio_putback_lru”h]”j)�”}”(hŒfolio_putback_lru”h]”hŒfolio_putback_lru”…”�”}”(hjÔŸh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjПubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¯Ÿh²hh³jÁŸh´M-ubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjðŸh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjìŸubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýŸh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjìŸubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj  ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljÖŸsbŒc.folio_putback_lru”†”asbuh1hhjìŸubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj. h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjìŸubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj< h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjìŸubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjI h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjìŸubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjèŸubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¯Ÿh²hh³jÁŸh´M-ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj«Ÿh²hh³jÁŸh´M-ubah}”(h]”j¦Ÿah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÁŸh´M-hj¨Ÿh²hubj4)�”}”(hhh]”jM)�”}”(hŒ8Put previously isolated folio onto appropriate LRU list.”h]”hŒ8Put previously isolated folio onto appropriate LRU list.”…”�”}”(hjs h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´M-hjp h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¨Ÿh²hh³jÁŸh´M-ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj‹ jHj‹ jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``struct folio *folio`` Folio to be returned to an LRU list. **Description** Add previously isolated **folio** to appropriate LRU list. The folio may still be unevictable for other reasons. **Context** lru_lock must not be held, interrupts must be enabled.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj• h]”hŒ Parameters”…”�”}”(hj— h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj“ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´M1hj� ubj¤)�”}”(hhh]”j©)�”}”(hŒ=``struct folio *folio`` Folio to be returned to an LRU list. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj´ h]”hŒstruct folio *folio”…”�”}”(hj¶ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj² ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´M.hj® ubjÉ)�”}”(hhh]”jM)�”}”(hŒ$Folio to be returned to an LRU list.”h]”hŒ$Folio to be returned to an LRU list.”…”�”}”(hjÍ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÉ h´M.hjÊ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj® ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÉ h´M.hj« ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj� ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjï h]”hŒ Description”…”�”}”(hjñ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjí ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´M0hj� ubjM)�”}”(hŒpAdd previously isolated **folio** to appropriate LRU list. The folio may still be unevictable for other reasons.”h]”(hŒAdd previously isolated ”…”�”}”(hj¡h²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj ¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¡ubhŒO to appropriate LRU list. The folio may still be unevictable for other reasons.”…”�”}”(hj¡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´M/hj� ubjM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´M2hj� ubjM)�”}”(hŒ6lru_lock must not be held, interrupts must be enabled.”h]”hŒ6lru_lock must not be held, interrupts must be enabled.”…”�”}”(hj>¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´M3hj� ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_isolate_lru (C function)”Œc.folio_isolate_lru”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ,bool folio_isolate_lru (struct folio *folio)”h]”hù)�”}”(hŒ+bool folio_isolate_lru(struct folio *folio)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjm¡h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hji¡h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´MîubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{¡h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhji¡h²hh³jz¡h´Mîubhÿ)�”}”(hŒfolio_isolate_lru”h]”j)�”}”(hŒfolio_isolate_lru”h]”hŒfolio_isolate_lru”…”�”}”(hj�¡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‰¡ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhji¡h²hh³jz¡h´Mîubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj©¡h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¥¡ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶¡h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¥¡ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÇ¡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÄ¡ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÉ¡Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj�¡sbŒc.folio_isolate_lru”†”asbuh1hhj¥¡ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç¡h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¥¡ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjõ¡h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¥¡ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¥¡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¡¡ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hji¡h²hh³jz¡h´Mîubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hje¡h²hh³jz¡h´Mîubah}”(h]”j`¡ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jz¡h´Mîhjb¡h²hubj4)�”}”(hhh]”jM)�”}”(hŒ)Try to isolate a folio from its LRU list.”h]”hŒ)Try to isolate a folio from its LRU list.”…”�”}”(hj,¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´Mîhj)¢h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjb¡h²hh³jz¡h´Mîubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjD¢jHjD¢jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXR**Parameters** ``struct folio *folio`` Folio to isolate from its LRU list. **Description** Isolate a **folio** from an LRU list and adjust the vmstat statistic corresponding to whatever LRU list the folio was on. The folio will have its LRU flag cleared. If it was found on the active list, it will have the Active flag set. If it was found on the unevictable list, it will have the Unevictable flag set. These flags may need to be cleared by the caller before letting the page go. (1) Must be called with an elevated refcount on the folio. This is a fundamental difference from isolate_lru_folios() (which is called without a stable reference). (2) The lru_lock must not be held. (3) Interrupts must be enabled. **Context** **Return** true if the folio was removed from an LRU list. false if the folio was not on an LRU list.”h]”(jM)�”}”(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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´MòhjH¢ubj¤)�”}”(hhh]”j©)�”}”(hŒ<``struct folio *folio`` Folio to isolate from its LRU list. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjm¢h]”hŒstruct folio *folio”…”�”}”(hjo¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjk¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´Mïhjg¢ubjÉ)�”}”(hhh]”jM)�”}”(hŒ#Folio to isolate from its LRU list.”h]”hŒ#Folio to isolate from its LRU list.”…”�”}”(hj†¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‚¢h´Mïhjƒ¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjg¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‚¢h´Mïhjd¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjH¢ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj¨¢h]”hŒ Description”…”�”}”(hjª¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¦¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´MñhjH¢ubjM)�”}”(hŒyIsolate a **folio** from an LRU list and adjust the vmstat statistic corresponding to whatever LRU list the folio was on.”h]”(hŒ Isolate a ”…”�”}”(hj¾¢h²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjÆ¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¾¢ubhŒf from an LRU list and adjust the vmstat statistic corresponding to whatever LRU list the folio was on.”…”�”}”(hj¾¢h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´MðhjH¢ubjM)�”}”(hXThe folio will have its LRU flag cleared. If it was found on the active list, it will have the Active flag set. If it was found on the unevictable list, it will have the Unevictable flag set. These flags may need to be cleared by the caller before letting the page go.”h]”hXThe folio will have its LRU flag cleared. If it was found on the active list, it will have the Active flag set. If it was found on the unevictable list, it will have the Unevictable flag set. These flags may need to be cleared by the caller before letting the page go.”…”�”}”(hjߢh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´MóhjH¢ubjÐ/)�”}”(hhh]”(jÕ/)�”}”(hŒŸMust be called with an elevated refcount on the folio. This is a fundamental difference from isolate_lru_folios() (which is called without a stable reference).”h]”jM)�”}”(hŒŸMust be called with an elevated refcount on the folio. This is a fundamental difference from isolate_lru_folios() (which is called without a stable reference).”h]”hŒŸMust be called with an elevated refcount on the folio. This is a fundamental difference from isolate_lru_folios() (which is called without a stable reference).”…”�”}”(hjõ¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´Mùhjñ¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjî¢ubjÕ/)�”}”(hŒThe lru_lock must not be held.”h]”jM)�”}”(hj £h]”hŒThe lru_lock must not be held.”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´Mühj £ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjî¢ubjÕ/)�”}”(hŒInterrupts must be enabled. ”h]”jM)�”}”(hŒInterrupts must be enabled.”h]”hŒInterrupts must be enabled.”…”�”}”(hj&£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´Mýhj"£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjî¢ubeh}”(h]”h ]”h"]”h$]”h&]”j>0j?0j@0j™!jA0jÂ!uh1jÏ/hjH¢ubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjC£h]”hŒContext”…”�”}”(hjE£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjA£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´MÿhjH¢ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj[£h]”hŒReturn”…”�”}”(hj]£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjY£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´MûhjH¢ubjM)�”}”(hŒZtrue if the folio was removed from an LRU list. false if the folio was not on an LRU list.”h]”hŒZtrue if the folio was removed from an LRU list. false if the folio was not on an LRU list.”…”�”}”(hjq£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´MhjH¢ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ*check_move_unevictable_folios (C function)”Œc.check_move_unevictable_folios”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ?void check_move_unevictable_folios (struct folio_batch *fbatch)”h]”hù)�”}”(hŒ>void check_move_unevictable_folios(struct folio_batch *fbatch)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj £h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjœ£h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´M�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯£h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjœ£h²hh³j®£h´M�ubhÿ)�”}”(hŒcheck_move_unevictable_folios”h]”j)�”}”(hŒcheck_move_unevictable_folios”h]”hŒcheck_move_unevictable_folios”…”�”}”(hjÁ£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj½£ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjœ£h²hh³j®£h´M�ubj )�”}”(hŒ(struct folio_batch *fbatch)”h]”j )�”}”(hŒstruct folio_batch *fbatch”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÝ£h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÙ£ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjê£h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÙ£ubh)�”}”(hhh]”j)�”}”(hŒ folio_batch”h]”hŒ folio_batch”…”�”}”(hjû£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjø£ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jý£Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljãsbŒc.check_move_unevictable_folios”†”asbuh1hhjÙ£ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÙ£ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj)¤h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÙ£ubj)�”}”(hŒfbatch”h]”hŒfbatch”…”�”}”(hj6¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙ£ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÕ£ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjœ£h²hh³j®£h´M�ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj˜£h²hh³j®£h´M�ubah}”(h]”j“£ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j®£h´M�hj•£h²hubj4)�”}”(hhh]”jM)�”}”(hŒ2Move evictable folios to appropriate zone lru list”h]”hŒ2Move evictable folios to appropriate zone lru list”…”�”}”(hj`¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´M�hj]¤h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj•£h²hh³j®£h´M�ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjx¤jHjx¤jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``struct folio_batch *fbatch`` Batch of lru folios to check. **Description** Checks folios for evictability, if an evictable folio is in the unevictable lru list, moves it to the appropriate evictable lru list. This function should be only used for lru folios.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj‚¤h]”hŒ Parameters”…”�”}”(hj„¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj€¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´M…hj|¤ubj¤)�”}”(hhh]”j©)�”}”(hŒ=``struct folio_batch *fbatch`` Batch of lru folios to check. ”h]”(j¯)�”}”(hŒ``struct folio_batch *fbatch``”h]”jS)�”}”(hj¡¤h]”hŒstruct folio_batch *fbatch”…”�”}”(hj£¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjŸ¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´Mƒhj›¤ubjÉ)�”}”(hhh]”jM)�”}”(hŒBatch of lru folios to check.”h]”hŒBatch of lru folios to check.”…”�”}”(hjº¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¶¤h´Mƒhj·¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj›¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¶¤h´Mƒhj˜¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj|¤ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjܤh]”hŒ Description”…”�”}”(hjÞ¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÚ¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.c”h´M…hj|¤ubjM)�”}”(hŒ·Checks folios for evictability, if an evictable folio is in the unevictable lru list, moves it to the appropriate evictable lru list. This function should be only used for lru folios.”h]”hŒ·Checks folios for evictability, if an evictable folio is in the unevictable lru list, moves it to the appropriate evictable lru list. This function should be only used for lru folios.”…”�”}”(hjò¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/vmscan.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”]”(héŒ__remove_pages (C function)”Œc.__remove_pages”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒvvoid __remove_pages (unsigned long pfn, unsigned long nr_pages, struct vmem_altmap *altmap, struct dev_pagemap *pgmap)”h]”hù)�”}”(hŒuvoid __remove_pages(unsigned long pfn, unsigned long nr_pages, struct vmem_altmap *altmap, struct dev_pagemap *pgmap)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj!¥h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¥h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´MBubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0¥h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¥h²hh³j/¥h´MBubhÿ)�”}”(hŒ__remove_pages”h]”j)�”}”(hŒ__remove_pages”h]”hŒ__remove_pages”…”�”}”(hjB¥h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>¥ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¥h²hh³j/¥h´MBubj )�”}”(hŒb(unsigned long pfn, unsigned long nr_pages, struct vmem_altmap *altmap, struct dev_pagemap *pgmap)”h]”(j )�”}”(hŒunsigned long pfn”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj^¥h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjZ¥ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl¥h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjZ¥ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjz¥h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjZ¥ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ¥h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjZ¥ubj)�”}”(hŒpfn”h]”hŒpfn”…”�”}”(hj–¥h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjZ¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjV¥ubj )�”}”(hŒunsigned long nr_pages”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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«¥ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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«¥ubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hjç¥h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj«¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjV¥ubj )�”}”(hŒstruct vmem_altmap *altmap”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjü¥ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ¦h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjü¥ubh)�”}”(hhh]”j)�”}”(hŒ vmem_altmap”h]”hŒ vmem_altmap”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j ¦Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljD¥sbŒc.__remove_pages”†”asbuh1hhjü¥ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>¦h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjü¥ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjL¦h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjü¥ubj)�”}”(hŒaltmap”h]”hŒaltmap”…”�”}”(hjY¦h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjü¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjV¥ubj )�”}”(hŒstruct dev_pagemap *pgmap”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjr¦h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjn¦ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjn¦ubh)�”}”(hhh]”j)�”}”(hŒ dev_pagemap”h]”hŒ dev_pagemap”…”�”}”(hj�¦h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�¦ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j’¦Œmodname”NŒ classname”Njpjs)�”}”jv]”j:¦Œc.__remove_pages”†”asbuh1hhjn¦ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®¦h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjn¦ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¼¦h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjn¦ubj)�”}”(hŒpgmap”h]”hŒpgmap”…”�”}”(hjɦh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjn¦ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjV¥ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¥h²hh³j/¥h´MBubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¥h²hh³j/¥h´MBubah}”(h]”j¥ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j/¥h´MBhj¥h²hubj4)�”}”(hhh]”jM)�”}”(hŒremove sections of pages”h]”hŒremove sections of pages”…”�”}”(hjó¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´MBhjð¦h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¥h²hh³j/¥h´MBubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj §jHj §jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXj**Parameters** ``unsigned long pfn`` starting pageframe (must be aligned to start of a section) ``unsigned long nr_pages`` number of pages to remove (must be multiple of section size) ``struct vmem_altmap *altmap`` alternative device page map or ``NULL`` if default memmap is used ``struct dev_pagemap *pgmap`` device page map or ``NULL`` if not ZONE_DEVICE **Description** Generic helper function to remove section mappings and sysfs entries for the section of the memory we are removing. Caller needs to make sure that pages are marked reserved and zones are adjust properly by calling offline_pages().”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj§h]”hŒ Parameters”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´MFhj§ubj¤)�”}”(hhh]”(j©)�”}”(hŒQ``unsigned long pfn`` starting pageframe (must be aligned to start of a section) ”h]”(j¯)�”}”(hŒ``unsigned long pfn``”h]”jS)�”}”(hj4§h]”hŒunsigned long pfn”…”�”}”(hj6§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj2§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´MChj.§ubjÉ)�”}”(hhh]”jM)�”}”(hŒ:starting pageframe (must be aligned to start of a section)”h]”hŒ:starting pageframe (must be aligned to start of a section)”…”�”}”(hjM§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jI§h´MChjJ§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj.§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jI§h´MChj+§ubj©)�”}”(hŒX``unsigned long nr_pages`` number of pages to remove (must be multiple of section size) ”h]”(j¯)�”}”(hŒ``unsigned long nr_pages``”h]”jS)�”}”(hjm§h]”hŒunsigned long nr_pages”…”�”}”(hjo§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjk§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´MDhjg§ubjÉ)�”}”(hhh]”jM)�”}”(hŒ¨h]”hŒ Description”…”�”}”(hj@¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj<¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´MHhj§ubjM)�”}”(hŒæGeneric helper function to remove section mappings and sysfs entries for the section of the memory we are removing. Caller needs to make sure that pages are marked reserved and zones are adjust properly by calling offline_pages().”h]”hŒæGeneric helper function to remove section mappings and sysfs entries for the section of the memory we are removing. Caller needs to make sure that pages are marked reserved and zones are adjust properly by calling offline_pages().”…”�”}”(hjT¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´MGhj§ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ(__add_memory_driver_managed (C function)”Œc.__add_memory_driver_managed”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ�int __add_memory_driver_managed (int nid, u64 start, u64 size, const char *resource_name, mhp_t mhp_flags, enum mmop online_type)”h]”hù)�”}”(hŒ€int __add_memory_driver_managed(int nid, u64 start, u64 size, const char *resource_name, mhp_t mhp_flags, enum mmop online_type)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjƒ¨h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¨h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´MlubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’¨h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¨h²hh³j‘¨h´Mlubhÿ)�”}”(hŒ__add_memory_driver_managed”h]”j)�”}”(hŒ__add_memory_driver_managed”h]”hŒ__add_memory_driver_managed”…”�”}”(hj¤¨h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ¨ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¨h²hh³j‘¨h´Mlubj )�”}”(hŒa(int nid, u64 start, u64 size, const char *resource_name, mhp_t mhp_flags, enum mmop online_type)”h]”(j )�”}”(hŒint nid”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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¼¨ubj)�”}”(hŒnid”h]”hŒnid”…”�”}”(hjܨh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¼¨ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¸¨ubj )�”}”(hŒ u64 start”h]”(h)�”}”(hhh]”j)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjø¨h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjõ¨ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jú¨Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj¦¨sbŒc.__add_memory_driver_managed”†”asbuh1hhjñ¨ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjñ¨ubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj&©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñ¨ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¸¨ubj )�”}”(hŒu64 size”h]”(h)�”}”(hhh]”j)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjB©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj?©ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jD©Œmodname”NŒ classname”Njpjs)�”}”jv]”j©Œc.__add_memory_driver_managed”†”asbuh1hhj;©ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`©h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj;©ubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjn©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj;©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¸¨ubj )�”}”(hŒconst char *resource_name”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj‡©h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjƒ©ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”©h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjƒ©ubjµ)�”}”(hŒchar”h]”hŒchar”…”�”}”(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ƒ©ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¾©h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjƒ©ubj)�”}”(hŒ resource_name”h]”hŒ resource_name”…”�”}”(hjË©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjƒ©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¸¨ubj )�”}”(hŒmhp_t mhp_flags”h]”(h)�”}”(hhh]”j)�”}”(hŒmhp_t”h]”hŒmhp_t”…”�”}”(hjç©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjä©ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j驌modname”NŒ classname”Njpjs)�”}”jv]”j©Œc.__add_memory_driver_managed”†”asbuh1hhjà©ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjà©ubj)�”}”(hŒ mhp_flags”h]”hŒ mhp_flags”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjà©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¸¨ubj )�”}”(hŒenum mmop online_type”h]”(j5)�”}”(hj‘ôh]”hŒenum”…”�”}”(hj,ªh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj(ªubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9ªh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj(ªubh)�”}”(hhh]”j)�”}”(hŒmmop”h]”hŒmmop”…”�”}”(hjJªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjGªubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jLªŒmodname”NŒ classname”Njpjs)�”}”jv]”j©Œc.__add_memory_driver_managed”†”asbuh1hhj(ªubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhªh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj(ªubj)�”}”(hŒ online_type”h]”hŒ online_type”…”�”}”(hjvªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj(ªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¸¨ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¨h²hh³j‘¨h´Mlubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj{¨h²hh³j‘¨h´Mlubah}”(h]”jv¨ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j‘¨h´Mlhjx¨h²hubj4)�”}”(hhh]”jM)�”}”(hŒ3add driver-managed memory with explicit online_type”h]”hŒ3add driver-managed memory with explicit online_type”…”�”}”(hj ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´Mlhj�ªh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjx¨h²hh³j‘¨h´Mlubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¸ªjHj¸ªjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX—**Parameters** ``int nid`` NUMA node ID where the memory will be added ``u64 start`` Start physical address of the memory range ``u64 size`` Size of the memory range in bytes ``const char *resource_name`` Resource name in format "System RAM ($DRIVER)" ``mhp_t mhp_flags`` Memory hotplug flags ``enum mmop online_type`` Auto-Online behavior (offline, online, kernel, movable) **Description** Add special, driver-managed memory to the system as system RAM. Such memory is not exposed via the raw firmware-provided memmap as system RAM, instead, it is detected and added by a driver - during cold boot, after a reboot, and after kexec. Reasons why this memory should not be used for the initial memmap of a kexec kernel or for placing kexec images: - The booting kernel is in charge of determining how this memory will be used (e.g., use persistent memory as system RAM) - Coordination with a hypervisor is required before this memory can be used (e.g., inaccessible parts). For this memory, no entries in /sys/firmware/memmap ("raw firmware-provided memory map") are created. Also, the created memory resource is flagged with IORESOURCE_SYSRAM_DRIVER_MANAGED, so in-kernel users can special-case this memory as well (esp., not place kexec images onto it). The resource_name (visible via /proc/iomem) has to have the format "System RAM ($DRIVER)". **Return** 0 on success, negative error code on failure.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjªh]”hŒ Parameters”…”�”}”(hjĪh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÀªubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´Mphj¼ªubj¤)�”}”(hhh]”(j©)�”}”(hŒ8``int nid`` NUMA node ID where the memory will be added ”h]”(j¯)�”}”(hŒ ``int nid``”h]”jS)�”}”(hjáªh]”hŒint nid”…”�”}”(hjãªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjߪubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´MmhjÛªubjÉ)�”}”(hhh]”jM)�”}”(hŒ+NUMA node ID where the memory will be added”h]”hŒ+NUMA node ID where the memory will be added”…”�”}”(hjúªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jöªh´Mmhj÷ªubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÛªubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jöªh´Mmhjتubj©)�”}”(hŒ9``u64 start`` Start physical address of the memory range ”h]”(j¯)�”}”(hŒ ``u64 start``”h]”jS)�”}”(hj«h]”hŒ u64 start”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´Mnhj«ubjÉ)�”}”(hhh]”jM)�”}”(hŒ*Start physical address of the memory range”h]”hŒ*Start physical address of the memory range”…”�”}”(hj3«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j/«h´Mnhj0«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j/«h´Mnhjتubj©)�”}”(hŒ/``u64 size`` Size of the memory range in bytes ”h]”(j¯)�”}”(hŒ ``u64 size``”h]”jS)�”}”(hjS«h]”hŒu64 size”…”�”}”(hjU«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjQ«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´MohjM«ubjÉ)�”}”(hhh]”jM)�”}”(hŒ!Size of the memory range in bytes”h]”hŒ!Size of the memory range in bytes”…”�”}”(hjl«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jh«h´Mohji«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjM«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jh«h´Mohjتubj©)�”}”(hŒM``const char *resource_name`` Resource name in format "System RAM ($DRIVER)" ”h]”(j¯)�”}”(hŒ``const char *resource_name``”h]”jS)�”}”(hjŒ«h]”hŒconst char *resource_name”…”�”}”(hjŽ«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjŠ«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´Mphj†«ubjÉ)�”}”(hhh]”jM)�”}”(hŒ.Resource name in format "System RAM ($DRIVER)"”h]”hŒ2Resource name in format “System RAM ($DRIVER)â€�”…”�”}”(hj¥«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¡«h´Mphj¢«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj†«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¡«h´Mphjتubj©)�”}”(hŒ)``mhp_t mhp_flags`` Memory hotplug flags ”h]”(j¯)�”}”(hŒ``mhp_t mhp_flags``”h]”jS)�”}”(hjÅ«h]”hŒmhp_t mhp_flags”…”�”}”(hjÇ«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjëubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´Mqhj¿«ubjÉ)�”}”(hhh]”jM)�”}”(hŒMemory hotplug flags”h]”hŒMemory hotplug flags”…”�”}”(hjÞ«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÚ«h´MqhjÛ«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¿«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÚ«h´Mqhjتubj©)�”}”(hŒR``enum mmop online_type`` Auto-Online behavior (offline, online, kernel, movable) ”h]”(j¯)�”}”(hŒ``enum mmop online_type``”h]”jS)�”}”(hjþ«h]”hŒenum mmop online_type”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjü«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´Mrhjø«ubjÉ)�”}”(hhh]”jM)�”}”(hŒ7Auto-Online behavior (offline, online, kernel, movable)”h]”hŒ7Auto-Online behavior (offline, online, kernel, movable)”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¬h´Mrhj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjø«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¬h´Mrhjتubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¼ªubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj9¬h]”hŒ Description”…”�”}”(hj;¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj7¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´Mthj¼ªubjM)�”}”(hŒñAdd special, driver-managed memory to the system as system RAM. Such memory is not exposed via the raw firmware-provided memmap as system RAM, instead, it is detected and added by a driver - during cold boot, after a reboot, and after kexec.”h]”hŒñAdd special, driver-managed memory to the system as system RAM. Such memory is not exposed via the raw firmware-provided memmap as system RAM, instead, it is detected and added by a driver - during cold boot, after a reboot, and after kexec.”…”�”}”(hjO¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´Mshj¼ªubjM)�”}”(hŒpReasons why this memory should not be used for the initial memmap of a kexec kernel or for placing kexec images:”h]”hŒpReasons why this memory should not be used for the initial memmap of a kexec kernel or for placing kexec images:”…”�”}”(hj^¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´Mxhj¼ªubjaW)�”}”(hhh]”(jÕ/)�”}”(hŒwThe booting kernel is in charge of determining how this memory will be used (e.g., use persistent memory as system RAM)”h]”jM)�”}”(hŒwThe booting kernel is in charge of determining how this memory will be used (e.g., use persistent memory as system RAM)”h]”hŒwThe booting kernel is in charge of determining how this memory will be used (e.g., use persistent memory as system RAM)”…”�”}”(hjt¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M{hjp¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjm¬ubjÕ/)�”}”(hŒfCoordination with a hypervisor is required before this memory can be used (e.g., inaccessible parts). ”h]”jM)�”}”(hŒeCoordination with a hypervisor is required before this memory can be used (e.g., inaccessible parts).”h]”hŒeCoordination with a hypervisor is required before this memory can be used (e.g., inaccessible parts).”…”�”}”(hj�¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M}hj‰¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjm¬ubeh}”(h]”h ]”h"]”h$]”h&]”jƒWj„Wuh1j`Wh³j‚¬h´M{hj¼ªubjM)�”}”(hXFor this memory, no entries in /sys/firmware/memmap ("raw firmware-provided memory map") are created. Also, the created memory resource is flagged with IORESOURCE_SYSRAM_DRIVER_MANAGED, so in-kernel users can special-case this memory as well (esp., not place kexec images onto it).”h]”hXFor this memory, no entries in /sys/firmware/memmap (“raw firmware-provided memory mapâ€�) are created. Also, the created memory resource is flagged with IORESOURCE_SYSRAM_DRIVER_MANAGED, so in-kernel users can special-case this memory as well (esp., not place kexec images onto it).”…”�”}”(hj¨¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M€hj¼ªubjM)�”}”(hŒZThe resource_name (visible via /proc/iomem) has to have the format "System RAM ($DRIVER)".”h]”hŒ^The resource_name (visible via /proc/iomem) has to have the format “System RAM ($DRIVER)â€�.”…”�”}”(hj·¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M…hj¼ªubjM)�”}”(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&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´Mˆhj¼ªubjM)�”}”(hŒ-0 on success, negative error code on failure.”h]”hŒ-0 on success, negative error code on failure.”…”�”}”(hjÞ¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.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”]”(héŒ&add_memory_driver_managed (C function)”Œc.add_memory_driver_managed”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒhint add_memory_driver_managed (int nid, u64 start, u64 size, const char *resource_name, mhp_t mhp_flags)”h]”hù)�”}”(hŒgint add_memory_driver_managed(int nid, u64 start, u64 size, const char *resource_name, mhp_t mhp_flags)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj ­h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj ­h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M­ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj ­h²hh³j­h´M­ubhÿ)�”}”(hŒadd_memory_driver_managed”h]”j)�”}”(hŒadd_memory_driver_managed”h]”hŒadd_memory_driver_managed”…”�”}”(hj.­h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj*­ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj ­h²hh³j­h´M­ubj )�”}”(hŒJ(int nid, u64 start, u64 size, const char *resource_name, mhp_t mhp_flags)”h]”(j )�”}”(hŒint nid”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjJ­h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjF­ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjX­h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjF­ubj)�”}”(hŒnid”h]”hŒnid”…”�”}”(hjf­h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjF­ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjB­ubj )�”}”(hŒ u64 start”h]”(h)�”}”(hhh]”j)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj‚­h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj­ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j„­Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj0­sbŒc.add_memory_driver_managed”†”asbuh1hhj{­ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢­h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj{­ubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj°­h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj{­ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjB­ubj )�”}”(hŒu64 size”h]”(h)�”}”(hhh]”j)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjÌ­h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÉ­ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jl•1Œ reftarget”jέŒmodname”NŒ classname”Njpjs)�”}”jv]”jž­Œc.add_memory_driver_managed”†”asbuh1hhjÅ­ubjÇ)�”}”(hŒ ”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 ]”jah"]”h$]”h&]”uh1jhjÅ­ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjB­ubj )�”}”(hŒconst char *resource_name”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj ®ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj ®ubjµ)�”}”(hŒchar”h]”hŒchar”…”�”}”(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 ®ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjH®h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj ®ubj)�”}”(hŒ resource_name”h]”hŒ resource_name”…”�”}”(hjU®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ®ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjB­ubj )�”}”(hŒmhp_t mhp_flags”h]”(h)�”}”(hhh]”j)�”}”(hŒmhp_t”h]”hŒmhp_t”…”�”}”(hjq®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjn®ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”js®Œmodname”NŒ classname”Njpjs)�”}”jv]”jž­Œc.add_memory_driver_managed”†”asbuh1hhjj®ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�®h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjj®ubj)�”}”(hŒ mhp_flags”h]”hŒ mhp_flags”…”�”}”(hj�®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjj®ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjB­ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj ­h²hh³j­h´M­ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj­h²hh³j­h´M­ubah}”(h]”j­ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j­h´M­hj­h²hubj4)�”}”(hhh]”jM)�”}”(hŒadd driver-managed memory”h]”hŒadd driver-managed memory”…”�”}”(hjÇ®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M­hjÄ®h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj­h²hh³j­h´M­ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjß®jHjß®jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``int nid`` NUMA node ID where the memory will be added ``u64 start`` Start physical address of the memory range ``u64 size`` Size of the memory range in bytes ``const char *resource_name`` Resource name in format "System RAM ($DRIVER)" ``mhp_t mhp_flags`` Memory hotplug flags **Description** Add driver-managed memory with the system default online type set by build config or kernel boot parameter. See __add_memory_driver_managed for more details. **Return** 0 on success, negative error code on failure.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjé®h]”hŒ Parameters”…”�”}”(hjë®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjç®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M±hjã®ubj¤)�”}”(hhh]”(j©)�”}”(hŒ8``int nid`` NUMA node ID where the memory will be added ”h]”(j¯)�”}”(hŒ ``int nid``”h]”jS)�”}”(hj¯h]”hŒint nid”…”�”}”(hj ¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M®hj¯ubjÉ)�”}”(hhh]”jM)�”}”(hŒ+NUMA node ID where the memory will be added”h]”hŒ+NUMA node ID where the memory will be added”…”�”}”(hj!¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¯h´M®hj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¯h´M®hjÿ®ubj©)�”}”(hŒ9``u64 start`` Start physical address of the memory range ”h]”(j¯)�”}”(hŒ ``u64 start``”h]”jS)�”}”(hjA¯h]”hŒ u64 start”…”�”}”(hjC¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj?¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M¯hj;¯ubjÉ)�”}”(hhh]”jM)�”}”(hŒ*Start physical address of the memory range”h]”hŒ*Start physical address of the memory range”…”�”}”(hjZ¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jV¯h´M¯hjW¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj;¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jV¯h´M¯hjÿ®ubj©)�”}”(hŒ/``u64 size`` Size of the memory range in bytes ”h]”(j¯)�”}”(hŒ ``u64 size``”h]”jS)�”}”(hjz¯h]”hŒu64 size”…”�”}”(hj|¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjx¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M°hjt¯ubjÉ)�”}”(hhh]”jM)�”}”(hŒ!Size of the memory range in bytes”h]”hŒ!Size of the memory range in bytes”…”�”}”(hj“¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�¯h´M°hj�¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjt¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�¯h´M°hjÿ®ubj©)�”}”(hŒM``const char *resource_name`` Resource name in format "System RAM ($DRIVER)" ”h]”(j¯)�”}”(hŒ``const char *resource_name``”h]”jS)�”}”(hj³¯h]”hŒconst char *resource_name”…”�”}”(hjµ¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj±¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M±hj­¯ubjÉ)�”}”(hhh]”jM)�”}”(hŒ.Resource name in format "System RAM ($DRIVER)"”h]”hŒ2Resource name in format “System RAM ($DRIVER)â€�”…”�”}”(hj̯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jȯh´M±hjɯubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj­¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jȯh´M±hjÿ®ubj©)�”}”(hŒ)``mhp_t mhp_flags`` Memory hotplug flags ”h]”(j¯)�”}”(hŒ``mhp_t mhp_flags``”h]”jS)�”}”(hjì¯h]”hŒmhp_t mhp_flags”…”�”}”(hjî¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjê¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M²hjæ¯ubjÉ)�”}”(hhh]”jM)�”}”(hŒMemory hotplug flags”h]”hŒMemory hotplug flags”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j°h´M²hj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjæ¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j°h´M²hjÿ®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjã®ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj'°h]”hŒ Description”…”�”}”(hj)°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj%°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M´hjã®ubjM)�”}”(hŒkAdd driver-managed memory with the system default online type set by build config or kernel boot parameter.”h]”hŒkAdd driver-managed memory with the system default online type set by build config or kernel boot parameter.”…”�”}”(hj=°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M³hjã®ubjM)�”}”(hŒ1See __add_memory_driver_managed for more details.”h]”hŒ1See __add_memory_driver_managed for more details.”…”�”}”(hjL°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M¶hjã®ubjM)�”}”(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&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M¸hjã®ubjM)�”}”(hŒ-0 on success, negative error code on failure.”h]”hŒ-0 on success, negative error code on failure.”…”�”}”(hjs°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.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”]”(héŒtry_offline_node (C function)”Œc.try_offline_node”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒvoid try_offline_node (int nid)”h]”hù)�”}”(hŒvoid try_offline_node(int nid)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¢°h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjž°h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M¶ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±°h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjž°h²hh³j°°h´M¶ubhÿ)�”}”(hŒtry_offline_node”h]”j)�”}”(hŒtry_offline_node”h]”hŒtry_offline_node”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¿°ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjž°h²hh³j°°h´M¶ubj )�”}”(hŒ (int nid)”h]”j )�”}”(hŒint nid”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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Û°ubj)�”}”(hŒnid”h]”hŒnid”…”�”}”(hjû°h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÛ°ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj×°ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjž°h²hh³j°°h´M¶ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjš°h²hh³j°°h´M¶ubah}”(h]”j•°ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j°°h´M¶hj—°h²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hj—°h²hh³j°°h´M¶ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj.±jHj.±jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒþ**Parameters** ``int nid`` the node ID **Description** Offline a node if all memory sections and cpus of the node are removed. **NOTE** The caller must call lock_device_hotplug() to serialize hotplug and online/offline operations before this call.”h]”(jM)�”}”(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&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´Mºhj2±ubj¤)�”}”(hhh]”j©)�”}”(hŒ``int nid`` the node ID ”h]”(j¯)�”}”(hŒ ``int nid``”h]”jS)�”}”(hjW±h]”hŒint nid”…”�”}”(hjY±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjU±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M·hjQ±ubjÉ)�”}”(hhh]”jM)�”}”(hŒ the node ID”h]”hŒ the node ID”…”�”}”(hjp±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jl±h´M·hjm±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjQ±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jl±h´M·hjN±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj2±ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj’±h]”hŒ Description”…”�”}”(hj”±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M¹hj2±ubjM)�”}”(hŒGOffline a node if all memory sections and cpus of the node are removed.”h]”hŒGOffline a node if all memory sections and cpus of the node are removed.”…”�”}”(hj¨±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M¸hj2±ubjM)�”}”(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&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´Mºhj2±ubjM)�”}”(hŒoThe caller must call lock_device_hotplug() to serialize hotplug and online/offline operations before this call.”h]”hŒoThe caller must call lock_device_hotplug() to serialize hotplug and online/offline operations before this call.”…”�”}”(hjϱh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.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”]”(héŒ__remove_memory (C function)”Œc.__remove_memory”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ*void __remove_memory (u64 start, u64 size)”h]”hù)�”}”(hŒ)void __remove_memory(u64 start, u64 size)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjþ±h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjú±h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M) ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ²h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjú±h²hh³j ²h´M) ubhÿ)�”}”(hŒ__remove_memory”h]”j)�”}”(hŒ__remove_memory”h]”hŒ__remove_memory”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj²ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjú±h²hh³j ²h´M) ubj )�”}”(hŒ(u64 start, u64 size)”h]”(j )�”}”(hŒ u64 start”h]”(h)�”}”(hhh]”j)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj>²h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj;²ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j@²Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj!²sbŒc.__remove_memory”†”asbuh1hhj7²ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^²h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj7²ubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjl²h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7²ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj3²ubj )�”}”(hŒu64 size”h]”(h)�”}”(hhh]”j)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjˆ²h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj…²ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jвŒmodname”NŒ classname”Njpjs)�”}”jv]”jZ²Œc.__remove_memory”†”asbuh1hhj�²ubjÇ)�”}”(hŒ ”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 ]”jah"]”h$]”h&]”uh1jhj�²ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj3²ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjú±h²hh³j ²h´M) ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjö±h²hh³j ²h´M) ubah}”(h]”jñ±ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j ²h´M) hjó±h²hubj4)�”}”(hhh]”jM)�”}”(hŒ.Remove memory if every memory block is offline”h]”hŒ.Remove memory if every memory block is offline”…”�”}”(hjÞ²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M) hjÛ²h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjó±h²hh³j ²h´M) ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjö²jHjö²jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``u64 start`` physical address of the region to remove ``u64 size`` size of the region to remove **NOTE** The caller must call lock_device_hotplug() to serialize hotplug and online/offline operations before this call, as required by try_offline_node().”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj³h]”hŒ Parameters”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjþ²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M- hjú²ubj¤)�”}”(hhh]”(j©)�”}”(hŒ7``u64 start`` physical address of the region to remove ”h]”(j¯)�”}”(hŒ ``u64 start``”h]”jS)�”}”(hj³h]”hŒ u64 start”…”�”}”(hj!³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M* hj³ubjÉ)�”}”(hhh]”jM)�”}”(hŒ(physical address of the region to remove”h]”hŒ(physical address of the region to remove”…”�”}”(hj8³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j4³h´M* hj5³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j4³h´M* hj³ubj©)�”}”(hŒ*``u64 size`` size of the region to remove ”h]”(j¯)�”}”(hŒ ``u64 size``”h]”jS)�”}”(hjX³h]”hŒu64 size”…”�”}”(hjZ³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjV³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M+ hjR³ubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of the region to remove”h]”hŒsize of the region to remove”…”�”}”(hjq³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jm³h´M+ hjn³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjR³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jm³h´M+ hj³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjú²ubjM)�”}”(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&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M- hjú²ubjM)�”}”(hŒ’The caller must call lock_device_hotplug() to serialize hotplug and online/offline operations before this call, as required by try_offline_node().”h]”hŒ’The caller must call lock_device_hotplug() to serialize hotplug and online/offline operations before this call, as required by try_offline_node().”…”�”}”(hj©³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.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”]”(héŒ-offline_and_remove_memory_ranges (C function)”Œ"c.offline_and_remove_memory_ranges”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒYint offline_and_remove_memory_ranges (const struct range *ranges, unsigned int nr_ranges)”h]”hù)�”}”(hŒXint offline_and_remove_memory_ranges(const struct range *ranges, unsigned int nr_ranges)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjسh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÔ³h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M� ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç³h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÔ³h²hh³jæ³h´M� ubhÿ)�”}”(hŒ offline_and_remove_memory_ranges”h]”j)�”}”(hŒ offline_and_remove_memory_ranges”h]”hŒ offline_and_remove_memory_ranges”…”�”}”(hjù³h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjõ³ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÔ³h²hh³jæ³h´M� ubj )�”}”(hŒ4(const struct range *ranges, unsigned int nr_ranges)”h]”(j )�”}”(hŒconst struct range *ranges”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj´ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"´h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj´ubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hj0´h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj´ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=´h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj´ubh)�”}”(hhh]”j)�”}”(hŒrange”h]”hŒrange”…”�”}”(hjN´h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjK´ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jP´Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljû³sbŒ"c.offline_and_remove_memory_ranges”†”asbuh1hhj´ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjn´h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj´ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj|´h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj´ubj)�”}”(hŒranges”h]”hŒranges”…”�”}”(hj‰´h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj´ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj ´ubj )�”}”(hŒunsigned int nr_ranges”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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ž´ubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(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ž´ubj)�”}”(hŒ nr_ranges”h]”hŒ nr_ranges”…”�”}”(hjÚ´h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjž´ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj ´ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÔ³h²hh³jæ³h´M� ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjгh²hh³jæ³h´M� ubah}”(h]”j˳ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jæ³h´M� hjͳh²hubj4)�”}”(hhh]”jM)�”}”(hŒ)offline and remove multiple memory ranges”h]”hŒ)offline and remove multiple memory ranges”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M� hjµh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjͳh²hh³jæ³h´M� ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjµjHjµjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX¿**Parameters** ``const struct range *ranges`` array of physical address ranges to offline and remove ``unsigned int nr_ranges`` number of entries in **ranges** **Description** Offline and remove several memory ranges as one operation, serialized against other hotplug operations by a single lock_device_hotplug(). This offlines all ranges before removing any of them. If offlining any range fails, the entire process is reverted and nothing is removed. This provides a fully atomic semantic for unplugging an entire device. Each range must be memory-block aligned in start and size. **Return** 0 on success, negative errno on failure (never positive). On failure no range has been removed.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj&µh]”hŒ Parameters”…”�”}”(hj(µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj$µubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M‘ hj µubj¤)�”}”(hhh]”(j©)�”}”(hŒV``const struct range *ranges`` array of physical address ranges to offline and remove ”h]”(j¯)�”}”(hŒ``const struct range *ranges``”h]”jS)�”}”(hjEµh]”hŒconst struct range *ranges”…”�”}”(hjGµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjCµubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´MŽ hj?µubjÉ)�”}”(hhh]”jM)�”}”(hŒ6array of physical address ranges to offline and remove”h]”hŒ6array of physical address ranges to offline and remove”…”�”}”(hj^µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jZµh´MŽ hj[µubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj?µubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jZµh´MŽ hj<µubj©)�”}”(hŒ;``unsigned int nr_ranges`` number of entries in **ranges** ”h]”(j¯)�”}”(hŒ``unsigned int nr_ranges``”h]”jS)�”}”(hj~µh]”hŒunsigned int nr_ranges”…”�”}”(hj€µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj|µubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M� hjxµubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of entries in **ranges**”h]”(hŒnumber of entries in ”…”�”}”(hj—µh²hh³Nh´NubjŽ)�”}”(hŒ **ranges**”h]”hŒranges”…”�”}”(hjŸµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj—µubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j“µh´M� hj”µubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjxµubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j“µh´M� hj<µubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj µubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjǵh]”hŒ Description”…”�”}”(hjɵh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŵubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M‘ hj µubjM)�”}”(hŒ‰Offline and remove several memory ranges as one operation, serialized against other hotplug operations by a single lock_device_hotplug().”h]”hŒ‰Offline and remove several memory ranges as one operation, serialized against other hotplug operations by a single lock_device_hotplug().”…”�”}”(hjݵh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M� hj µubjM)�”}”(hŒÒThis offlines all ranges before removing any of them. If offlining any range fails, the entire process is reverted and nothing is removed. This provides a fully atomic semantic for unplugging an entire device.”h]”hŒÒThis offlines all ranges before removing any of them. If offlining any range fails, the entire process is reverted and nothing is removed. This provides a fully atomic semantic for unplugging an entire device.”…”�”}”(hjìµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M“ hj µubjM)�”}”(hŒ:Each range must be memory-block aligned in start and size.”h]”hŒ:Each range must be memory-block aligned in start and size.”…”�”}”(hjûµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M— hj µubjM)�”}”(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&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.c”h´M™ hj µubjM)�”}”(hŒ`0 on success, negative errno on failure (never positive). On failure no range has been removed.”h]”hŒ`0 on success, negative errno on failure (never positive). On failure no range has been removed.”…”�”}”(hj"¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/memory_hotplug.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”]”(héŒ$mmu_interval_read_begin (C function)”Œc.mmu_interval_read_begin”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒRunsigned long mmu_interval_read_begin (struct mmu_interval_notifier *interval_sub)”h]”hù)�”}”(hŒQunsigned long mmu_interval_read_begin(struct mmu_interval_notifier *interval_sub)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjQ¶h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjM¶h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´K©ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`¶h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjM¶h²hh³j_¶h´K©ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjn¶h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjM¶h²hh³j_¶h´K©ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|¶h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjM¶h²hh³j_¶h´K©ubhÿ)�”}”(hŒmmu_interval_read_begin”h]”j)�”}”(hŒmmu_interval_read_begin”h]”hŒmmu_interval_read_begin”…”�”}”(hj޶h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjжubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjM¶h²hh³j_¶h´K©ubj )�”}”(hŒ,(struct mmu_interval_notifier *interval_sub)”h]”j )�”}”(hŒ*struct mmu_interval_notifier *interval_sub”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjª¶h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¦¶ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·¶h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¦¶ubh)�”}”(hhh]”j)�”}”(hŒmmu_interval_notifier”h]”hŒmmu_interval_notifier”…”�”}”(hjȶh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŶubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jʶŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj�¶sbŒc.mmu_interval_read_begin”†”asbuh1hhj¦¶ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjè¶h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¦¶ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjö¶h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¦¶ubj)�”}”(hŒ interval_sub”h]”hŒ interval_sub”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦¶ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¢¶ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjM¶h²hh³j_¶h´K©ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjI¶h²hh³j_¶h´K©ubah}”(h]”jD¶ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j_¶h´K©hjF¶h²hubj4)�”}”(hhh]”jM)�”}”(hŒ5Begin a read side critical section against a VA range”h]”hŒ5Begin a read side critical section against a VA range”…”�”}”(hj-·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´K©hj*·h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjF¶h²hh³j_¶h´K©ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjE·jHjE·jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXÎ**Parameters** ``struct mmu_interval_notifier *interval_sub`` The interval subscription **Description** mmu_iterval_read_begin()/mmu_iterval_read_retry() implement a collision-retry scheme similar to seqcount for the VA range under subscription. If the mm invokes invalidation during the critical section then mmu_interval_read_retry() will return true. This is useful to obtain shadow PTEs where teardown or setup of the SPTEs require a blocking context. The critical region formed by this can sleep, and the required 'user_lock' can also be a sleeping lock. The caller is required to provide a 'user_lock' to serialize both teardown and setup. The return value should be passed to mmu_interval_read_retry().”h]”(jM)�”}”(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&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´K­hjI·ubj¤)�”}”(hhh]”j©)�”}”(hŒI``struct mmu_interval_notifier *interval_sub`` The interval subscription ”h]”(j¯)�”}”(hŒ.``struct mmu_interval_notifier *interval_sub``”h]”jS)�”}”(hjn·h]”hŒ*struct mmu_interval_notifier *interval_sub”…”�”}”(hjp·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjl·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´K«hjh·ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe interval subscription”h]”hŒThe interval subscription”…”�”}”(hj‡·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jƒ·h´K«hj„·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjh·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jƒ·h´K«hje·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjI·ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj©·h]”hŒ Description”…”�”}”(hj«·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj§·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´K­hjI·ubjM)�”}”(hŒùmmu_iterval_read_begin()/mmu_iterval_read_retry() implement a collision-retry scheme similar to seqcount for the VA range under subscription. If the mm invokes invalidation during the critical section then mmu_interval_read_retry() will return true.”h]”hŒùmmu_iterval_read_begin()/mmu_iterval_read_retry() implement a collision-retry scheme similar to seqcount for the VA range under subscription. If the mm invokes invalidation during the critical section then mmu_interval_read_retry() will return true.”…”�”}”(hj¿·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´K¬hjI·ubjM)�”}”(hŒÎThis is useful to obtain shadow PTEs where teardown or setup of the SPTEs require a blocking context. The critical region formed by this can sleep, and the required 'user_lock' can also be a sleeping lock.”h]”hŒÒThis is useful to obtain shadow PTEs where teardown or setup of the SPTEs require a blocking context. The critical region formed by this can sleep, and the required ‘user_lock’ can also be a sleeping lock.”…”�”}”(hjηh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´K±hjI·ubjM)�”}”(hŒUThe caller is required to provide a 'user_lock' to serialize both teardown and setup.”h]”hŒYThe caller is required to provide a ‘user_lock’ to serialize both teardown and setup.”…”�”}”(hjÝ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´KµhjI·ubjM)�”}”(hŒ?The return value should be passed to mmu_interval_read_retry().”h]”hŒ?The return value should be passed to mmu_interval_read_retry().”…”�”}”(hjì·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´K¸hjI·ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"mmu_notifier_register (C function)”Œc.mmu_notifier_register”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒSint mmu_notifier_register (struct mmu_notifier *subscription, struct mm_struct *mm)”h]”hù)�”}”(hŒRint mmu_notifier_register(struct mmu_notifier *subscription, struct mm_struct *mm)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj¸h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´M×ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*¸h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¸h²hh³j)¸h´M×ubhÿ)�”}”(hŒmmu_notifier_register”h]”j)�”}”(hŒmmu_notifier_register”h]”hŒmmu_notifier_register”…”�”}”(hj<¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj8¸ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¸h²hh³j)¸h´M×ubj )�”}”(hŒ9(struct mmu_notifier *subscription, struct mm_struct *mm)”h]”(j )�”}”(hŒ!struct mmu_notifier *subscription”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjX¸h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjT¸ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hje¸h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjT¸ubh)�”}”(hhh]”j)�”}”(hŒ mmu_notifier”h]”hŒ mmu_notifier”…”�”}”(hjv¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjs¸ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jx¸Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj>¸sbŒc.mmu_notifier_register”†”asbuh1hhjT¸ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–¸h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjT¸ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¤¸h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjT¸ubj)�”}”(hŒ subscription”h]”hŒ subscription”…”�”}”(hj±¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjT¸ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjP¸ubj )�”}”(hŒstruct mm_struct *mm”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjʸh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjƸubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj׸h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjƸubh)�”}”(hhh]”j)�”}”(hŒ mm_struct”h]”hŒ mm_struct”…”�”}”(hjè¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjå¸ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j긌modname”NŒ classname”Njpjs)�”}”jv]”j’¸Œc.mmu_notifier_register”†”asbuh1hhjƸubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjƸubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjƸubj)�”}”(hŒmm”h]”hŒmm”…”�”}”(hj!¹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjƸubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjP¸ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¸h²hh³j)¸h´M×ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¸h²hh³j)¸h´M×ubah}”(h]”j¸ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j)¸h´M×hj¸h²hubj4)�”}”(hhh]”jM)�”}”(hŒRegister a notifier on a mm”h]”hŒRegister a notifier on a mm”…”�”}”(hjK¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´M×hjH¹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¸h²hh³j)¸h´M×ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjc¹jHjc¹jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX7**Parameters** ``struct mmu_notifier *subscription`` The notifier to attach ``struct mm_struct *mm`` The mm to attach the notifier to **Description** Must not hold mmap_lock nor any other VM related lock when calling this registration function. Must also ensure mm_users can't go down to zero while this runs to avoid races with mmu_notifier_release, so mm has to be current->mm or the mm should be pinned safely such as with get_task_mm(). If the mm is not current->mm, the mm_users pin should be released by calling mmput after mmu_notifier_register returns. mmu_notifier_unregister() or mmu_notifier_put() must be always called to unregister the notifier. While the caller has a mmu_notifier get the subscription->mm pointer will remain valid, and can be converted to an active mm pointer via mmget_not_zero().”h]”(jM)�”}”(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&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´MÛhjg¹ubj¤)�”}”(hhh]”(j©)�”}”(hŒ=``struct mmu_notifier *subscription`` The notifier to attach ”h]”(j¯)�”}”(hŒ%``struct mmu_notifier *subscription``”h]”jS)�”}”(hjŒ¹h]”hŒ!struct mmu_notifier *subscription”…”�”}”(hj޹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjйubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´MØhj†¹ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe notifier to attach”h]”hŒThe notifier to attach”…”�”}”(hj¥¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¡¹h´MØhj¢¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj†¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¡¹h´MØhjƒ¹ubj©)�”}”(hŒ:``struct mm_struct *mm`` The mm to attach the notifier to ”h]”(j¯)�”}”(hŒ``struct mm_struct *mm``”h]”jS)�”}”(hjŹh]”hŒstruct mm_struct *mm”…”�”}”(hjǹh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjùubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´MÙhj¿¹ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The mm to attach the notifier to”h]”hŒ The mm to attach the notifier to”…”�”}”(hjÞ¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÚ¹h´MÙhjÛ¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¿¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÚ¹h´MÙhjƒ¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjg¹ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjºh]”hŒ Description”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjþ¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´MÛhjg¹ubjM)�”}”(hXšMust not hold mmap_lock nor any other VM related lock when calling this registration function. Must also ensure mm_users can't go down to zero while this runs to avoid races with mmu_notifier_release, so mm has to be current->mm or the mm should be pinned safely such as with get_task_mm(). If the mm is not current->mm, the mm_users pin should be released by calling mmput after mmu_notifier_register returns.”h]”hXœMust not hold mmap_lock nor any other VM related lock when calling this registration function. Must also ensure mm_users can’t go down to zero while this runs to avoid races with mmu_notifier_release, so mm has to be current->mm or the mm should be pinned safely such as with get_task_mm(). If the mm is not current->mm, the mm_users pin should be released by calling mmput after mmu_notifier_register returns.”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´MÚhjg¹ubjM)�”}”(hŒammu_notifier_unregister() or mmu_notifier_put() must be always called to unregister the notifier.”h]”hŒammu_notifier_unregister() or mmu_notifier_put() must be always called to unregister the notifier.”…”�”}”(hj%ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´Mâhjg¹ubjM)�”}”(hŒšWhile the caller has a mmu_notifier get the subscription->mm pointer will remain valid, and can be converted to an active mm pointer via mmget_not_zero().”h]”hŒšWhile the caller has a mmu_notifier get the subscription->mm pointer will remain valid, and can be converted to an active mm pointer via mmget_not_zero().”…”�”}”(hj4ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.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”]”(héŒ$mmu_notifier_get_locked (C function)”Œc.mmu_notifier_get_locked”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒhstruct mmu_notifier * mmu_notifier_get_locked (const struct mmu_notifier_ops *ops, struct mm_struct *mm)”h]”hù)�”}”(hŒfstruct mmu_notifier *mmu_notifier_get_locked(const struct mmu_notifier_ops *ops, struct mm_struct *mm)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjcºh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj_ºh²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´M ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqºh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj_ºh²hh³jpºh´M ubh)�”}”(hhh]”j)�”}”(hŒ mmu_notifier”h]”hŒ mmu_notifier”…”�”}”(hj‚ºh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjºubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j„ºŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒmmu_notifier_get_locked”sbŒc.mmu_notifier_get_locked”†”asbuh1hhj_ºh²hh³jpºh´M ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£ºh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj_ºh²hh³jpºh´M ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj±ºh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj_ºh²hh³jpºh´M ubhÿ)�”}”(hŒmmu_notifier_get_locked”h]”j)�”}”(hj ºh]”hŒmmu_notifier_get_locked”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾ºubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj_ºh²hh³jpºh´M ubj )�”}”(hŒ:(const struct mmu_notifier_ops *ops, struct mm_struct *mm)”h]”(j )�”}”(hŒ"const struct mmu_notifier_ops *ops”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjݺh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÙºubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêºh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÙºubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjøºh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÙºubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÙºubh)�”}”(hhh]”j)�”}”(hŒmmu_notifier_ops”h]”hŒmmu_notifier_ops”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj»ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j»Œmodname”NŒ classname”Njpjs)�”}”jv]”jžºŒc.mmu_notifier_get_locked”†”asbuh1hhjÙºubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4»h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÙºubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjB»h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÙºubj)�”}”(hŒops”h]”hŒops”…”�”}”(hjO»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙºubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÕºubj )�”}”(hŒstruct mm_struct *mm”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjh»h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjd»ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju»h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjd»ubh)�”}”(hhh]”j)�”}”(hŒ mm_struct”h]”hŒ mm_struct”…”�”}”(hj†»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjƒ»ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jˆ»Œmodname”NŒ classname”Njpjs)�”}”jv]”jžºŒc.mmu_notifier_get_locked”†”asbuh1hhjd»ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤»h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjd»ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj²»h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjd»ubj)�”}”(hŒmm”h]”hŒmm”…”�”}”(hj¿»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjd»ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÕºubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj_ºh²hh³jpºh´M ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj[ºh²hh³jpºh´M ubah}”(h]”jVºah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jpºh´M hjXºh²hubj4)�”}”(hhh]”jM)�”}”(hŒ6Return the single struct mmu_notifier for the mm & ops”h]”hŒ6Return the single struct mmu_notifier for the mm & ops”…”�”}”(hjé»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´M hjæ»h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjXºh²hh³jpºh´M ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¼jHj¼jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXœ**Parameters** ``const struct mmu_notifier_ops *ops`` The operations struct being subscribe with ``struct mm_struct *mm`` The mm to attach notifiers too **Description** This function either allocates a new mmu_notifier via ops->alloc_notifier(), or returns an already existing notifier on the list. The value of the ops pointer is used to determine when two notifiers are the same. Each call to mmu_notifier_get() must be paired with a call to mmu_notifier_put(). The caller must hold the write side of mm->mmap_lock. While the caller has a mmu_notifier get the mm pointer will remain valid, and can be converted to an active mm pointer via mmget_not_zero().”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj ¼h]”hŒ Parameters”…”�”}”(hj ¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´Mhj¼ubj¤)�”}”(hhh]”(j©)�”}”(hŒR``const struct mmu_notifier_ops *ops`` The operations struct being subscribe with ”h]”(j¯)�”}”(hŒ&``const struct mmu_notifier_ops *ops``”h]”jS)�”}”(hj*¼h]”hŒ"const struct mmu_notifier_ops *ops”…”�”}”(hj,¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj(¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´Mhj$¼ubjÉ)�”}”(hhh]”jM)�”}”(hŒ*The operations struct being subscribe with”h]”hŒ*The operations struct being subscribe with”…”�”}”(hjC¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j?¼h´Mhj@¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj$¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j?¼h´Mhj!¼ubj©)�”}”(hŒ8``struct mm_struct *mm`` The mm to attach notifiers too ”h]”(j¯)�”}”(hŒ``struct mm_struct *mm``”h]”jS)�”}”(hjc¼h]”hŒstruct mm_struct *mm”…”�”}”(hje¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhja¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´Mhj]¼ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe mm to attach notifiers too”h]”hŒThe mm to attach notifiers too”…”�”}”(hj|¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jx¼h´Mhjy¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj]¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jx¼h´Mhj!¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¼ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjž¼h]”hŒ Description”…”�”}”(hj ¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjœ¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´Mhj¼ubjM)�”}”(hŒÔThis function either allocates a new mmu_notifier via ops->alloc_notifier(), or returns an already existing notifier on the list. The value of the ops pointer is used to determine when two notifiers are the same.”h]”hŒÔThis function either allocates a new mmu_notifier via ops->alloc_notifier(), or returns an already existing notifier on the list. The value of the ops pointer is used to determine when two notifiers are the same.”…”�”}”(hj´¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´Mhj¼ubjM)�”}”(hŒ‡Each call to mmu_notifier_get() must be paired with a call to mmu_notifier_put(). The caller must hold the write side of mm->mmap_lock.”h]”hŒ‡Each call to mmu_notifier_get() must be paired with a call to mmu_notifier_put(). The caller must hold the write side of mm->mmap_lock.”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´Mhj¼ubjM)�”}”(hŒŒWhile the caller has a mmu_notifier get the mm pointer will remain valid, and can be converted to an active mm pointer via mmget_not_zero().”h]”hŒŒWhile the caller has a mmu_notifier get the mm pointer will remain valid, and can be converted to an active mm pointer via mmget_not_zero().”…”�”}”(hjÒ¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´Mhj¼ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmmu_notifier_put (C function)”Œc.mmu_notifier_put”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ9void mmu_notifier_put (struct mmu_notifier *subscription)”h]”hù)�”}”(hŒ8void mmu_notifier_put(struct mmu_notifier *subscription)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjý¼h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´M�ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjý¼h²hh³j½h´M�ubhÿ)�”}”(hŒmmu_notifier_put”h]”j)�”}”(hŒmmu_notifier_put”h]”hŒmmu_notifier_put”…”�”}”(hj"½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj½ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjý¼h²hh³j½h´M�ubj )�”}”(hŒ#(struct mmu_notifier *subscription)”h]”j )�”}”(hŒ!struct mmu_notifier *subscription”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj>½h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj:½ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjK½h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj:½ubh)�”}”(hhh]”j)�”}”(hŒ mmu_notifier”h]”hŒ mmu_notifier”…”�”}”(hj\½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjY½ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j^½Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj$½sbŒc.mmu_notifier_put”†”asbuh1hhj:½ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|½h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj:½ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjнh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj:½ubj)�”}”(hŒ subscription”h]”hŒ subscription”…”�”}”(hj—½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj:½ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj6½ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjý¼h²hh³j½h´M�ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjù¼h²hh³j½h´M�ubah}”(h]”jô¼ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j½h´M�hjö¼h²hubj4)�”}”(hhh]”jM)�”}”(hŒ%Release the reference on the notifier”h]”hŒ%Release the reference on the notifier”…”�”}”(hjÁ½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´M�hj¾½h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjö¼h²hh³j½h´M�ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÙ½jHjÙ½jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX¥**Parameters** ``struct mmu_notifier *subscription`` The notifier to act on **Description** This function must be paired with each mmu_notifier_get(), it releases the reference obtained by the get. If this is the last reference then process to free the notifier will be run asynchronously. Unlike mmu_notifier_unregister() the get/put flow only calls ops->release when the mm_struct is destroyed. Instead free_notifier is always called to release any resources held by the user. As ops->release is not guaranteed to be called, the user must ensure that all sptes are dropped, and no new sptes can be established before mmu_notifier_put() is called. This function can be called from the ops->release callback, however the caller must still ensure it is called pairwise with mmu_notifier_get(). Modules calling this function must call mmu_notifier_synchronize() in their __exit functions to ensure the async work is completed.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjã½h]”hŒ Parameters”…”�”}”(hjå½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjá½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´M…hjݽubj¤)�”}”(hhh]”j©)�”}”(hŒ=``struct mmu_notifier *subscription`` The notifier to act on ”h]”(j¯)�”}”(hŒ%``struct mmu_notifier *subscription``”h]”jS)�”}”(hj¾h]”hŒ!struct mmu_notifier *subscription”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´M‚hjü½ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe notifier to act on”h]”hŒThe notifier to act on”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¾h´M‚hj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjü½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¾h´M‚hjù½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjݽubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj=¾h]”hŒ Description”…”�”}”(hj?¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj;¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´M„hjݽubjM)�”}”(hŒÅThis function must be paired with each mmu_notifier_get(), it releases the reference obtained by the get. If this is the last reference then process to free the notifier will be run asynchronously.”h]”hŒÅThis function must be paired with each mmu_notifier_get(), it releases the reference obtained by the get. If this is the last reference then process to free the notifier will be run asynchronously.”…”�”}”(hjS¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´MƒhjݽubjM)�”}”(hŒ¼Unlike mmu_notifier_unregister() the get/put flow only calls ops->release when the mm_struct is destroyed. Instead free_notifier is always called to release any resources held by the user.”h]”hŒ¼Unlike mmu_notifier_unregister() the get/put flow only calls ops->release when the mm_struct is destroyed. Instead free_notifier is always called to release any resources held by the user.”…”�”}”(hjb¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´M‡hjݽubjM)�”}”(hŒ©As ops->release is not guaranteed to be called, the user must ensure that all sptes are dropped, and no new sptes can be established before mmu_notifier_put() is called.”h]”hŒ©As ops->release is not guaranteed to be called, the user must ensure that all sptes are dropped, and no new sptes can be established before mmu_notifier_put() is called.”…”�”}”(hjq¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´M‹hjݽubjM)�”}”(hŒ�This function can be called from the ops->release callback, however the caller must still ensure it is called pairwise with mmu_notifier_get().”h]”hŒ�This function can be called from the ops->release callback, however the caller must still ensure it is called pairwise with mmu_notifier_get().”…”�”}”(hj€¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´M�hjݽubjM)�”}”(hŒƒModules calling this function must call mmu_notifier_synchronize() in their __exit functions to ensure the async work is completed.”h]”hŒƒModules calling this function must call mmu_notifier_synchronize() in their __exit functions to ensure the async work is completed.”…”�”}”(hj�¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.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”]”(héŒ)mmu_interval_notifier_insert (C function)”Œc.mmu_interval_notifier_insert”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ»int mmu_interval_notifier_insert (struct mmu_interval_notifier *interval_sub, struct mm_struct *mm, unsigned long start, unsigned long length, const struct mmu_interval_notifier_ops *ops)”h]”hù)�”}”(hŒºint mmu_interval_notifier_insert(struct mmu_interval_notifier *interval_sub, struct mm_struct *mm, unsigned long start, unsigned long length, const struct mmu_interval_notifier_ops *ops)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj¾¾h²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjº¾h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´MëubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjº¾h²hh³j̾h´Mëubhÿ)�”}”(hŒmmu_interval_notifier_insert”h]”j)�”}”(hŒmmu_interval_notifier_insert”h]”hŒmmu_interval_notifier_insert”…”�”}”(hjß¾h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÛ¾ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjº¾h²hh³j̾h´Mëubj )�”}”(hŒš(struct mmu_interval_notifier *interval_sub, struct mm_struct *mm, unsigned long start, unsigned long length, const struct mmu_interval_notifier_ops *ops)”h]”(j )�”}”(hŒ*struct mmu_interval_notifier *interval_sub”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjû¾h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj÷¾ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj÷¾ubh)�”}”(hhh]”j)�”}”(hŒmmu_interval_notifier”h]”hŒmmu_interval_notifier”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¿ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¿Œmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljá¾sbŒc.mmu_interval_notifier_insert”†”asbuh1hhj÷¾ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9¿h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj÷¾ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjG¿h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj÷¾ubj)�”}”(hŒ interval_sub”h]”hŒ interval_sub”…”�”}”(hjT¿h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj÷¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjó¾ubj )�”}”(hŒstruct mm_struct *mm”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjm¿h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hji¿ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjz¿h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhji¿ubh)�”}”(hhh]”j)�”}”(hŒ mm_struct”h]”hŒ mm_struct”…”�”}”(hj‹¿h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjˆ¿ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j�¿Œmodname”NŒ classname”Njpjs)�”}”jv]”j5¿Œc.mmu_interval_notifier_insert”†”asbuh1hhji¿ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©¿h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhji¿ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj·¿h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hji¿ubj)�”}”(hŒmm”h]”hŒmm”…”�”}”(hjÄ¿h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhji¿ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjó¾ubj )�”}”(hŒunsigned long start”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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Ù¿ubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(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Ù¿ubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙ¿ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjó¾ubj )�”}”(hŒunsigned long length”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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*Àubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjJÀh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj*ÀubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXÀh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj*Àubj)�”}”(hŒlength”h]”hŒlength”…”�”}”(hjfÀh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj*Àubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjó¾ubj )�”}”(hŒ+const struct mmu_interval_notifier_ops *ops”h]”(j5)�”}”(hj“h]”hŒconst”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj{ÀubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒÀh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj{Àubj5)�”}”(hj8h]”hŒstruct”…”�”}”(hjšÀh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj{ÀubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§Àh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj{Àubh)�”}”(hhh]”j)�”}”(hŒmmu_interval_notifier_ops”h]”hŒmmu_interval_notifier_ops”…”�”}”(hj¸Àh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjµÀubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jºÀŒmodname”NŒ classname”Njpjs)�”}”jv]”j5¿Œc.mmu_interval_notifier_insert”†”asbuh1hhj{ÀubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖÀh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj{ÀubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjäÀh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj{Àubj)�”}”(hŒops”h]”hŒops”…”�”}”(hjñÀh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj{Àubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjó¾ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjº¾h²hh³j̾h´Mëubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¶¾h²hh³j̾h´Mëubah}”(h]”j±¾ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j̾h´Mëhj³¾h²hubj4)�”}”(hhh]”jM)�”}”(hŒInsert an interval notifier”h]”hŒInsert an interval notifier”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´MëhjÁh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj³¾h²hh³j̾h´Mëubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj3ÁjHj3ÁjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX,**Parameters** ``struct mmu_interval_notifier *interval_sub`` Interval subscription to register ``struct mm_struct *mm`` mm_struct to attach to ``unsigned long start`` Starting virtual address to monitor ``unsigned long length`` Length of the range to monitor ``const struct mmu_interval_notifier_ops *ops`` Interval notifier operations to be called on matching events **Description** This function subscribes the interval notifier for notifications from the mm. Upon return the ops related to mmu_interval_notifier will be called whenever an event that intersects with the given range occurs. Upon return the range_notifier may not be present in the interval tree yet. The caller must use the normal interval notifier read flow via mmu_interval_read_begin() to establish SPTEs for this range.”•h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj=Áh]”hŒ Parameters”…”�”}”(hj?Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj;Áubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´Mïhj7Áubj¤)�”}”(hhh]”(j©)�”}”(hŒQ``struct mmu_interval_notifier *interval_sub`` Interval subscription to register ”h]”(j¯)�”}”(hŒ.``struct mmu_interval_notifier *interval_sub``”h]”jS)�”}”(hj\Áh]”hŒ*struct mmu_interval_notifier *interval_sub”…”�”}”(hj^Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjZÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´MìhjVÁubjÉ)�”}”(hhh]”jM)�”}”(hŒ!Interval subscription to register”h]”hŒ!Interval subscription to register”…”�”}”(hjuÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jqÁh´MìhjrÁubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjVÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jqÁh´MìhjSÁubj©)�”}”(hŒ0``struct mm_struct *mm`` mm_struct to attach to ”h]”(j¯)�”}”(hŒ``struct mm_struct *mm``”h]”jS)�”}”(hj•Áh]”hŒstruct mm_struct *mm”…”�”}”(hj—Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj“Áubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´Mïhj�ÁubjÉ)�”}”(hhh]”jM)�”}”(hŒmm_struct to attach to”h]”hŒmm_struct to attach to”…”�”}”(hj®Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jªÁh´Mïhj«Áubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�Áubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jªÁh´MïhjSÁubj©)�”}”(hŒ<``unsigned long start`` Starting virtual address to monitor ”h]”(j¯)�”}”(hŒ``unsigned long start``”h]”jS)�”}”(hjÎÁh]”hŒunsigned long start”…”�”}”(hjÐÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÌÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´MíhjÈÁubjÉ)�”}”(hhh]”jM)�”}”(hŒ#Starting virtual address to monitor”h]”hŒ#Starting virtual address to monitor”…”�”}”(hjçÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jãÁh´MíhjäÁubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÈÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jãÁh´MíhjSÁubj©)�”}”(hŒ8``unsigned long length`` Length of the range to monitor ”h]”(j¯)�”}”(hŒ``unsigned long length``”h]”jS)�”}”(hjÂh]”hŒunsigned long length”…”�”}”(hj Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´MîhjÂubjÉ)�”}”(hhh]”jM)�”}”(hŒLength of the range to monitor”h]”hŒLength of the range to monitor”…”�”}”(hj Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÂh´MîhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÂh´MîhjSÁubj©)�”}”(hŒm``const struct mmu_interval_notifier_ops *ops`` Interval notifier operations to be called on matching events ”h]”(j¯)�”}”(hŒ/``const struct mmu_interval_notifier_ops *ops``”h]”jS)�”}”(hj@Âh]”hŒ+const struct mmu_interval_notifier_ops *ops”…”�”}”(hjBÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj>Âubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/mmu_notifier.c”h´Mðhj:ÂubjÉ)�”}”(hhh]”jM)�”}”(hŒprivate assignment accordingly.”h]”hŒ_insert a page into the balloon’s page list and make the page->private assignment accordingly.”…”�”}”(hjÕÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´KhjÒÆh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjšÅh²hh³j³Åh´Kubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjíÆjHjíÆjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒÖ**Parameters** ``struct balloon_dev_info *balloon`` pointer to balloon device ``struct page *page`` page to be assigned as a 'balloon page' **Description** Caller must ensure the balloon_pages_lock is held.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj÷Æh]”hŒ Parameters”…”�”}”(hjùÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjõÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´KhjñÆubj¤)�”}”(hhh]”(j©)�”}”(hŒ?``struct balloon_dev_info *balloon`` pointer to balloon device ”h]”(j¯)�”}”(hŒ$``struct balloon_dev_info *balloon``”h]”jS)�”}”(hjÇh]”hŒ struct balloon_dev_info *balloon”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´KhjÇubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to balloon device”h]”hŒpointer to balloon device”…”�”}”(hj/Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j+Çh´Khj,Çubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j+Çh´Khj Çubj©)�”}”(hŒ>``struct page *page`` page to be assigned as a 'balloon page' ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hjOÇh]”hŒstruct page *page”…”�”}”(hjQÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjMÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´KhjIÇubjÉ)�”}”(hhh]”jM)�”}”(hŒ'page to be assigned as a 'balloon page'”h]”hŒ+page to be assigned as a ‘balloon page’”…”�”}”(hjhÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jdÇh´KhjeÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjIÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jdÇh´Khj Çubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjñÆubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjŠÇh]”hŒ Description”…”�”}”(hjŒÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjˆÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´KhjñÆubjM)�”}”(hŒ2Caller must ensure the balloon_pages_lock is held.”h]”hŒ2Caller must ensure the balloon_pages_lock is held.”…”�”}”(hj Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´KhjñÆubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"balloon_page_finalize (C function)”Œc.balloon_page_finalize”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ.void balloon_page_finalize (struct page *page)”h]”hù)�”}”(hŒ-void balloon_page_finalize(struct page *page)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÏÇh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjËÇh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´K(ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞÇh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjËÇh²hh³jÝÇh´K(ubhÿ)�”}”(hŒballoon_page_finalize”h]”j)�”}”(hŒballoon_page_finalize”h]”hŒballoon_page_finalize”…”�”}”(hjðÇh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjìÇubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjËÇh²hh³jÝÇh´K(ubj )�”}”(hŒ(struct page *page)”h]”j )�”}”(hŒstruct page *page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj Èh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÈubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÈubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj*Èh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj'Èubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j,ÈŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljòÇsbŒc.balloon_page_finalize”†”asbuh1hhjÈubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJÈh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÈubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjXÈh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÈubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjeÈh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÈubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÈubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjËÇh²hh³jÝÇh´K(ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÇÇh²hh³jÝÇh´K(ubah}”(h]”jÂÇah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÝÇh´K(hjÄÇh²hubj4)�”}”(hhh]”jM)�”}”(hŒ_prepare a balloon page that was removed from the balloon list for release to the page allocator”h]”hŒ_prepare a balloon page that was removed from the balloon list for release to the page allocator”…”�”}”(hj�Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´K(hjŒÈh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÄÇh²hh³jÝÇh´K(ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj§ÈjHj§ÈjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒ–**Parameters** ``struct page *page`` page to be released to the page allocator **Description** Caller must ensure the balloon_pages_lock is held.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj±Èh]”hŒ Parameters”…”�”}”(hj³Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¯Èubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´K,hj«Èubj¤)�”}”(hhh]”j©)�”}”(hŒ@``struct page *page`` page to be released to the page allocator ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hjÐÈh]”hŒstruct page *page”…”�”}”(hjÒÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÎÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´K*hjÊÈubjÉ)�”}”(hhh]”jM)�”}”(hŒ)page to be released to the page allocator”h]”hŒ)page to be released to the page allocator”…”�”}”(hjéÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jåÈh´K*hjæÈubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÊÈubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jåÈh´K*hjÇÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj«ÈubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj Éh]”hŒ Description”…”�”}”(hj Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj Éubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´K,hj«ÈubjM)�”}”(hŒ2Caller must ensure the balloon_pages_lock is held.”h]”hŒ2Caller must ensure the balloon_pages_lock is held.”…”�”}”(hj!Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.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”]”(héŒ&balloon_page_list_enqueue (C function)”Œc.balloon_page_list_enqueue”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ_size_t balloon_page_list_enqueue (struct balloon_dev_info *b_dev_info, struct list_head *pages)”h]”hù)�”}”(hŒ^size_t balloon_page_list_enqueue(struct balloon_dev_info *b_dev_info, struct list_head *pages)”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjSÉh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjPÉubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jUÉŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒballoon_page_list_enqueue”sbŒc.balloon_page_list_enqueue”†”asbuh1hhjLÉh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´KAubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuÉh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjLÉh²hh³jtÉh´KAubhÿ)�”}”(hŒballoon_page_list_enqueue”h]”j)�”}”(hjqÉh]”hŒballoon_page_list_enqueue”…”�”}”(hj‡Éh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjƒÉubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjLÉh²hh³jtÉh´KAubj )�”}”(hŒ>(struct balloon_dev_info *b_dev_info, struct list_head *pages)”h]”(j )�”}”(hŒ#struct balloon_dev_info *b_dev_info”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj¢Éh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjžÉubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯Éh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjžÉubh)�”}”(hhh]”j)�”}”(hŒballoon_dev_info”h]”hŒballoon_dev_info”…”�”}”(hjÀÉh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj½Éubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÂÉŒmodname”NŒ classname”Njpjs)�”}”jv]”joÉŒc.balloon_page_list_enqueue”†”asbuh1hhjžÉubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞÉh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjžÉubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjìÉh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjžÉubj)�”}”(hŒ b_dev_info”h]”hŒ b_dev_info”…”�”}”(hjùÉh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjžÉubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjšÉubj )�”}”(hŒstruct list_head *pages”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÊubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÊubh)�”}”(hhh]”j)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hj0Êh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj-Êubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j2ÊŒmodname”NŒ classname”Njpjs)�”}”jv]”joÉŒc.balloon_page_list_enqueue”†”asbuh1hhjÊubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNÊh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÊubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj\Êh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÊubj)�”}”(hŒpages”h]”hŒpages”…”�”}”(hjiÊh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÊubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjšÉubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjLÉh²hh³jtÉh´KAubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjHÉh²hh³jtÉh´KAubah}”(h]”jCÉah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jtÉh´KAhjEÉh²hubj4)�”}”(hhh]”jM)�”}”(hŒ3inserts a list of pages into the balloon page list.”h]”hŒ3inserts a list of pages into the balloon page list.”…”�”}”(hj“Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´KAhj�Êh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjEÉh²hh³jtÉh´KAubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj«ÊjHj«ÊjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX‰**Parameters** ``struct balloon_dev_info *b_dev_info`` balloon device descriptor where we will insert a new page to ``struct list_head *pages`` pages to enqueue - allocated using balloon_page_alloc. **Description** Driver must call this function to properly enqueue balloon pages before definitively removing them from the guest system. **Return** number of pages that were enqueued.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjµÊh]”hŒ Parameters”…”�”}”(hj·Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj³Êubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´KEhj¯Êubj¤)�”}”(hhh]”(j©)�”}”(hŒe``struct balloon_dev_info *b_dev_info`` balloon device descriptor where we will insert a new page to ”h]”(j¯)�”}”(hŒ'``struct balloon_dev_info *b_dev_info``”h]”jS)�”}”(hjÔÊh]”hŒ#struct balloon_dev_info *b_dev_info”…”�”}”(hjÖÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÒÊubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´KChjÎÊubjÉ)�”}”(hhh]”jM)�”}”(hŒallocates a new page for insertion into the balloon page list.”h]”hŒ>allocates a new page for insertion into the balloon page list.”…”�”}”(hj‚Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´KŠhjÏh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÓÎh²hh³jëÎh´KŠubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjšÏjHjšÏjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX3**Parameters** ``void`` no arguments **Description** Driver must call this function to properly allocate a new balloon page. Driver must call balloon_page_enqueue before definitively removing the page from the guest system. **Return** struct page for the allocated page or NULL on allocation failure.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¤Ïh]”hŒ Parameters”…”�”}”(hj¦Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¢Ïubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´KŽhjžÏubj¤)�”}”(hhh]”j©)�”}”(hŒ``void`` no arguments ”h]”(j¯)�”}”(hŒ``void``”h]”jS)�”}”(hjÃÏh]”hŒvoid”…”�”}”(hjÅÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÁÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´Khj½ÏubjÉ)�”}”(hhh]”jM)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjÜÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jØÏh´KhjÙÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj½Ïubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jØÏh´KhjºÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjžÏubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjþÏh]”hŒ Description”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjüÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´KhjžÏubjM)�”}”(hŒªDriver must call this function to properly allocate a new balloon page. Driver must call balloon_page_enqueue before definitively removing the page from the guest system.”h]”hŒªDriver must call this function to properly allocate a new balloon page. Driver must call balloon_page_enqueue before definitively removing the page from the guest system.”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´K‹hjžÏubjM)�”}”(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&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´K�hjžÏubjM)�”}”(hŒAstruct page for the allocated page or NULL on allocation failure.”h]”hŒAstruct page for the allocated page or NULL on allocation failure.”…”�”}”(hj;Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.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”]”(héŒ!balloon_page_enqueue (C function)”Œc.balloon_page_enqueue”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒRvoid balloon_page_enqueue (struct balloon_dev_info *b_dev_info, struct page *page)”h]”hù)�”}”(hŒQvoid balloon_page_enqueue(struct balloon_dev_info *b_dev_info, struct page *page)”h]”(jµ)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjjÐh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjfÐh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´K¡ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyÐh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjfÐh²hh³jxÐh´K¡ubhÿ)�”}”(hŒballoon_page_enqueue”h]”j)�”}”(hŒballoon_page_enqueue”h]”hŒballoon_page_enqueue”…”�”}”(hj‹Ðh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‡Ðubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjfÐh²hh³jxÐh´K¡ubj )�”}”(hŒ8(struct balloon_dev_info *b_dev_info, struct page *page)”h]”(j )�”}”(hŒ#struct balloon_dev_info *b_dev_info”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj§Ðh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj£ÐubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´Ðh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj£Ðubh)�”}”(hhh]”j)�”}”(hŒballoon_dev_info”h]”hŒballoon_dev_info”…”�”}”(hjÅÐh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÂÐubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÇÐŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj�ÐsbŒc.balloon_page_enqueue”†”asbuh1hhj£ÐubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåÐh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj£ÐubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjóÐh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj£Ðubj)�”}”(hŒ b_dev_info”h]”hŒ b_dev_info”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj£Ðubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjŸÐubj )�”}”(hŒstruct page *page”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÑubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&Ñh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÑubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj7Ñh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4Ñubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j9ÑŒmodname”NŒ classname”Njpjs)�”}”jv]”jáÐŒc.balloon_page_enqueue”†”asbuh1hhjÑubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUÑh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÑubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjcÑh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÑubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjpÑh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÑubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjŸÐubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjfÐh²hh³jxÐh´K¡ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjbÐh²hh³jxÐh´K¡ubah}”(h]”j]Ðah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jxÐh´K¡hj_Ðh²hubj4)�”}”(hhh]”jM)�”}”(hŒ.inserts a new page into the balloon page list.”h]”hŒ.inserts a new page into the balloon page list.”…”�”}”(hjšÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´K¡hj—Ñh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj_Ðh²hh³jxÐh´K¡ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj²ÑjHj²ÑjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXã**Parameters** ``struct balloon_dev_info *b_dev_info`` balloon device descriptor where we will insert a new page ``struct page *page`` new page to enqueue - allocated using balloon_page_alloc. **Description** Drivers must call this function to properly enqueue a new allocated balloon page before definitively removing the page from the guest system. Drivers must not enqueue pages while page->lru is still in use, and must not use page->lru until a page was unqueued again.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¼Ñh]”hŒ Parameters”…”�”}”(hj¾Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjºÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´K¥hj¶Ñubj¤)�”}”(hhh]”(j©)�”}”(hŒb``struct balloon_dev_info *b_dev_info`` balloon device descriptor where we will insert a new page ”h]”(j¯)�”}”(hŒ'``struct balloon_dev_info *b_dev_info``”h]”jS)�”}”(hjÛÑh]”hŒ#struct balloon_dev_info *b_dev_info”…”�”}”(hjÝÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÙÑubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´K£hjÕÑubjÉ)�”}”(hhh]”jM)�”}”(hŒ9balloon device descriptor where we will insert a new page”h]”hŒ9balloon device descriptor where we will insert a new page”…”�”}”(hjôÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jðÑh´K£hjñÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÕÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jðÑh´K£hjÒÑubj©)�”}”(hŒP``struct page *page`` new page to enqueue - allocated using balloon_page_alloc. ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hjÒh]”hŒstruct page *page”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´K¤hjÒubjÉ)�”}”(hhh]”jM)�”}”(hŒ9new page to enqueue - allocated using balloon_page_alloc.”h]”hŒ9new page to enqueue - allocated using balloon_page_alloc.”…”�”}”(hj-Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j)Òh´K¤hj*Òubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j)Òh´K¤hjÒÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¶ÑubjM)�”}”(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&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´K¦hj¶ÑubjM)�”}”(hŒ�Drivers must call this function to properly enqueue a new allocated balloon page before definitively removing the page from the guest system.”h]”hŒ�Drivers must call this function to properly enqueue a new allocated balloon page before definitively removing the page from the guest system.”…”�”}”(hjeÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´K¥hj¶ÑubjM)�”}”(hŒ{Drivers must not enqueue pages while page->lru is still in use, and must not use page->lru until a page was unqueued again.”h]”hŒ{Drivers must not enqueue pages while page->lru is still in use, and must not use page->lru until a page was unqueued again.”…”�”}”(hjtÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.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”]”(héŒ!balloon_page_dequeue (C function)”Œc.balloon_page_dequeue”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒHstruct page * balloon_page_dequeue (struct balloon_dev_info *b_dev_info)”h]”hù)�”}”(hŒFstruct page *balloon_page_dequeue(struct balloon_dev_info *b_dev_info)”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj£Òh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjŸÒh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´K¸ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±Òh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŸÒh²hh³j°Òh´K¸ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÂÒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¿Òubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÄÒŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒballoon_page_dequeue”sbŒc.balloon_page_dequeue”†”asbuh1hhjŸÒh²hh³j°Òh´K¸ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãÒh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŸÒh²hh³j°Òh´K¸ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjñÒh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjŸÒh²hh³j°Òh´K¸ubhÿ)�”}”(hŒballoon_page_dequeue”h]”j)�”}”(hjàÒh]”hŒballoon_page_dequeue”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjþÒubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjŸÒh²hh³j°Òh´K¸ubj )�”}”(hŒ%(struct balloon_dev_info *b_dev_info)”h]”j )�”}”(hŒ#struct balloon_dev_info *b_dev_info”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÓubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*Óh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÓubh)�”}”(hhh]”j)�”}”(hŒballoon_dev_info”h]”hŒballoon_dev_info”…”�”}”(hj;Óh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj8Óubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j=ÓŒmodname”NŒ classname”Njpjs)�”}”jv]”jÞÒŒc.balloon_page_dequeue”†”asbuh1hhjÓubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYÓh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÓubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjgÓh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÓubj)�”}”(hŒ b_dev_info”h]”hŒ b_dev_info”…”�”}”(hjtÓh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÓubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÓubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjŸÒh²hh³j°Òh´K¸ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj›Òh²hh³j°Òh´K¸ubah}”(h]”j–Òah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j°Òh´K¸hj˜Òh²hubj4)�”}”(hhh]”jM)�”}”(hŒhremoves a page from balloon's page list and returns its address to allow the driver to release the page.”h]”hŒjremoves a page from balloon’s page list and returns its address to allow the driver to release the page.”…”�”}”(hjžÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´K¸hj›Óh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj˜Òh²hh³j°Òh´K¸ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¶ÓjHj¶ÓjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXú**Parameters** ``struct balloon_dev_info *b_dev_info`` balloon device descriptor where we will grab a page from. **Description** Driver must call this function to properly dequeue a previously enqueued page before definitively releasing it back to the guest system. Caller must perform its own accounting to ensure that this function is called only if some pages are actually enqueued. Note that this function may fail to dequeue some pages even if there are some enqueued pages - since the page list can be temporarily empty due to the compaction of isolated pages. TODO: remove the caller accounting requirements, and allow caller to wait until all pages can be dequeued. **Return** struct page for the dequeued page, or NULL if no page was dequeued.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÀÓh]”hŒ Parameters”…”�”}”(hjÂÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¾Óubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´K¼hjºÓubj¤)�”}”(hhh]”j©)�”}”(hŒb``struct balloon_dev_info *b_dev_info`` balloon device descriptor where we will grab a page from. ”h]”(j¯)�”}”(hŒ'``struct balloon_dev_info *b_dev_info``”h]”jS)�”}”(hjßÓh]”hŒ#struct balloon_dev_info *b_dev_info”…”�”}”(hjáÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÝÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´KºhjÙÓubjÉ)�”}”(hhh]”jM)�”}”(hŒ9balloon device descriptor where we will grab a page from.”h]”hŒ9balloon device descriptor where we will grab a page from.”…”�”}”(hjøÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jôÓh´KºhjõÓubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÙÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jôÓh´KºhjÖÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjºÓubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÔh]”hŒ Description”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´K¼hjºÓubjM)�”}”(hŒˆDriver must call this function to properly dequeue a previously enqueued page before definitively releasing it back to the guest system.”h]”hŒˆDriver must call this function to properly dequeue a previously enqueued page before definitively releasing it back to the guest system.”…”�”}”(hj0Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´K»hjºÓubjM)�”}”(hŒwCaller must perform its own accounting to ensure that this function is called only if some pages are actually enqueued.”h]”hŒwCaller must perform its own accounting to ensure that this function is called only if some pages are actually enqueued.”…”�”}”(hj?Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´K¾hjºÓubjM)�”}”(hŒ´Note that this function may fail to dequeue some pages even if there are some enqueued pages - since the page list can be temporarily empty due to the compaction of isolated pages.”h]”hŒ´Note that this function may fail to dequeue some pages even if there are some enqueued pages - since the page list can be temporarily empty due to the compaction of isolated pages.”…”�”}”(hjNÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´KÁhjºÓubjM)�”}”(hŒjTODO: remove the caller accounting requirements, and allow caller to wait until all pages can be dequeued.”h]”hŒjTODO: remove the caller accounting requirements, and allow caller to wait until all pages can be dequeued.”…”�”}”(hj]Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´KÅhjºÓubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjnÔh]”hŒReturn”…”�”}”(hjpÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjlÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.c”h´KÈhjºÓubjM)�”}”(hŒCstruct page for the dequeued page, or NULL if no page was dequeued.”h]”hŒCstruct page for the dequeued page, or NULL if no page was dequeued.”…”�”}”(hj„Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/balloon.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”]”(héŒvmf_insert_pfn_pmd (C function)”Œc.vmf_insert_pfn_pmd”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒSvm_fault_t vmf_insert_pfn_pmd (struct vm_fault *vmf, unsigned long pfn, bool write)”h]”hù)�”}”(hŒRvm_fault_t vmf_insert_pfn_pmd(struct vm_fault *vmf, unsigned long pfn, bool write)”h]”(h)�”}”(hhh]”j)�”}”(hŒ vm_fault_t”h]”hŒ vm_fault_t”…”�”}”(hj¶Ôh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj³Ôubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¸ÔŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒvmf_insert_pfn_pmd”sbŒc.vmf_insert_pfn_pmd”†”asbuh1hhj¯Ôh²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M£ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØÔh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¯Ôh²hh³j×Ôh´M£ubhÿ)�”}”(hŒvmf_insert_pfn_pmd”h]”j)�”}”(hjÔÔh]”hŒvmf_insert_pfn_pmd”…”�”}”(hjêÔh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjæÔubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¯Ôh²hh³j×Ôh´M£ubj )�”}”(hŒ5(struct vm_fault *vmf, unsigned long pfn, bool write)”•h]”(j )�”}”(hŒstruct vm_fault *vmf”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÕubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÕubh)�”}”(hhh]”j)�”}”(hŒvm_fault”h]”hŒvm_fault”…”�”}”(hj#Õh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Õubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j%ÕŒmodname”NŒ classname”Njpjs)�”}”jv]”jÒÔŒc.vmf_insert_pfn_pmd”†”asbuh1hhjÕubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAÕh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÕubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjOÕh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÕubj)�”}”(hŒvmf”h]”hŒvmf”…”�”}”(hj\Õh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjýÔubj )�”}”(hŒunsigned long pfn”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjuÕh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjqÕubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒÕh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjqÕubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj‘Õh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjqÕubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸÕh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjqÕubj)�”}”(hŒpfn”h]”hŒpfn”…”�”}”(hj­Õh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjqÕubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjýÔubj )�”}”(hŒ bool write”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(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ÂÕubj)�”}”(hŒwrite”h]”hŒwrite”…”�”}”(hjáÕh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÂÕubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjýÔubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj¯Ôh²hh³j×Ôh´M£ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj«Ôh²hh³j×Ôh´M£ubah}”(h]”j¦Ôah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j×Ôh´M£hj¨Ôh²hubj4)�”}”(hhh]”jM)�”}”(hŒinsert a pmd size pfn”h]”hŒinsert a pmd size pfn”…”�”}”(hj Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M£hjÖh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¨Ôh²hh³j×Ôh´M£ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj#ÖjHj#ÖjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``struct vm_fault *vmf`` Structure describing the fault ``unsigned long pfn`` pfn to insert ``bool write`` whether it's a write fault **Description** Insert a pmd size pfn. See vmf_insert_pfn() for additional info. **Return** vm_fault_t value.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj-Öh]”hŒ Parameters”…”�”}”(hj/Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj+Öubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M§hj'Öubj¤)�”}”(hhh]”(j©)�”}”(hŒ8``struct vm_fault *vmf`` Structure describing the fault ”h]”(j¯)�”}”(hŒ``struct vm_fault *vmf``”h]”jS)�”}”(hjLÖh]”hŒstruct vm_fault *vmf”…”�”}”(hjNÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjJÖubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M¤hjFÖubjÉ)�”}”(hhh]”jM)�”}”(hŒStructure describing the fault”h]”hŒStructure describing the fault”…”�”}”(hjeÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jaÖh´M¤hjbÖubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjFÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jaÖh´M¤hjCÖubj©)�”}”(hŒ$``unsigned long pfn`` pfn to insert ”h]”(j¯)�”}”(hŒ``unsigned long pfn``”h]”jS)�”}”(hj…Öh]”hŒunsigned long pfn”…”�”}”(hj‡Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjƒÖubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M¥hjÖubjÉ)�”}”(hhh]”jM)�”}”(hŒ pfn to insert”h]”hŒ pfn to insert”…”�”}”(hjžÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jšÖh´M¥hj›Öubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jšÖh´M¥hjCÖubj©)�”}”(hŒ*``bool write`` whether it's a write fault ”h]”(j¯)�”}”(hŒ``bool write``”h]”jS)�”}”(hj¾Öh]”hŒ bool write”…”�”}”(hjÀÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¼Öubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M¦hj¸ÖubjÉ)�”}”(hhh]”jM)�”}”(hŒwhether it's a write fault”h]”hŒwhether it’s a write fault”…”�”}”(hj×Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÓÖh´M¦hjÔÖubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¸Öubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÓÖh´M¦hjCÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj'ÖubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjùÖh]”hŒ Description”…”�”}”(hjûÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj÷Öubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M¨hj'ÖubjM)�”}”(hŒ@Insert a pmd size pfn. See vmf_insert_pfn() for additional info.”h]”hŒ@Insert a pmd size pfn. See vmf_insert_pfn() for additional info.”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M§hj'ÖubjM)�”}”(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&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M©hj'ÖubjM)�”}”(hŒvm_fault_t value.”h]”hŒvm_fault_t value.”…”�”}”(hj6×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.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”]”(héŒvmf_insert_pfn_pud (C function)”Œc.vmf_insert_pfn_pud”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒSvm_fault_t vmf_insert_pfn_pud (struct vm_fault *vmf, unsigned long pfn, bool write)”h]”hù)�”}”(hŒRvm_fault_t vmf_insert_pfn_pud(struct vm_fault *vmf, unsigned long pfn, bool write)”h]”(h)�”}”(hhh]”j)�”}”(hŒ vm_fault_t”h]”hŒ vm_fault_t”…”�”}”(hjh×h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhje×ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jj׌modname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒvmf_insert_pfn_pud”sbŒc.vmf_insert_pfn_pud”†”asbuh1hhja×h²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠ×h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhja×h²hh³j‰×h´Mubhÿ)�”}”(hŒvmf_insert_pfn_pud”h]”j)�”}”(hj†×h]”hŒvmf_insert_pfn_pud”…”�”}”(hjœ×h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj˜×ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhja×h²hh³j‰×h´Mubj )�”}”(hŒ5(struct vm_fault *vmf, unsigned long pfn, bool write)”h]”(j )�”}”(hŒstruct vm_fault *vmf”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj·×h²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj³×ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄ×h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj³×ubh)�”}”(hhh]”j)�”}”(hŒvm_fault”h]”hŒvm_fault”…”�”}”(hjÕ×h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÒ×ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j×׌modname”NŒ classname”Njpjs)�”}”jv]”j„׌c.vmf_insert_pfn_pud”†”asbuh1hhj³×ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjó×h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj³×ubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj³×ubj)�”}”(hŒvmf”h]”hŒvmf”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj³×ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¯×ubj )�”}”(hŒunsigned long pfn”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj'Øh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj#ØubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5Øh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj#Øubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjCØh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj#ØubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQØh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj#Øubj)�”}”(hŒpfn”h]”hŒpfn”…”�”}”(hj_Øh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj#Øubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¯×ubj )�”}”(hŒ bool write”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjxØh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjtØubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…Øh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjtØubj)�”}”(hŒwrite”h]”hŒwrite”…”�”}”(hj“Øh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjtØubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj¯×ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hja×h²hh³j‰×h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj]×h²hh³j‰×h´Mubah}”(h]”jX×ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j‰×h´MhjZ×h²hubj4)�”}”(hhh]”jM)�”}”(hŒinsert a pud size pfn”h]”hŒinsert a pud size pfn”…”�”}”(hj½Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MhjºØh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjZ×h²hh³j‰×h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÕØjHjÕØjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``struct vm_fault *vmf`` Structure describing the fault ``unsigned long pfn`` pfn to insert ``bool write`` whether it's a write fault **Description** Insert a pud size pfn. See vmf_insert_pfn() for additional info. **Return** vm_fault_t value.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjߨh]”hŒ Parameters”…”�”}”(hjáØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÝØubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MhjÙØubj¤)�”}”(hhh]”(j©)�”}”(hŒ8``struct vm_fault *vmf`` Structure describing the fault ”h]”(j¯)�”}”(hŒ``struct vm_fault *vmf``”h]”jS)�”}”(hjþØh]”hŒstruct vm_fault *vmf”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjüØubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MhjøØubjÉ)�”}”(hhh]”jM)�”}”(hŒStructure describing the fault”h]”hŒStructure describing the fault”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÙh´MhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjøØubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÙh´MhjõØubj©)�”}”(hŒ$``unsigned long pfn`` pfn to insert ”h]”(j¯)�”}”(hŒ``unsigned long pfn``”h]”jS)�”}”(hj7Ùh]”hŒunsigned long pfn”…”�”}”(hj9Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj5Ùubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Mhj1ÙubjÉ)�”}”(hhh]”jM)�”}”(hŒ pfn to insert”h]”hŒ pfn to insert”…”�”}”(hjPÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jLÙh´MhjMÙubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj1Ùubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jLÙh´MhjõØubj©)�”}”(hŒ*``bool write`` whether it's a write fault ”h]”(j¯)�”}”(hŒ``bool write``”h]”jS)�”}”(hjpÙh]”hŒ bool write”…”�”}”(hjrÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjnÙubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MhjjÙubjÉ)�”}”(hhh]”jM)�”}”(hŒwhether it's a write fault”h]”hŒwhether it’s a write fault”…”�”}”(hj‰Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j…Ùh´Mhj†Ùubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjjÙubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j…Ùh´MhjõØubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÙØubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj«Ùh]”hŒ Description”…”�”}”(hj­Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj©Ùubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MhjÙØubjM)�”}”(hŒ@Insert a pud size pfn. See vmf_insert_pfn() for additional info.”h]”hŒ@Insert a pud size pfn. See vmf_insert_pfn() for additional info.”…”�”}”(hjÁÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MhjÙØubjM)�”}”(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&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MhjÙØubjM)�”}”(hŒvm_fault_t value.”h]”hŒvm_fault_t value.”…”�”}”(hjèÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MhjÙØubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!vmf_insert_folio_pud (C function)”Œc.vmf_insert_folio_pud”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒWvm_fault_t vmf_insert_folio_pud (struct vm_fault *vmf, struct folio *folio, bool write)”h]”hù)�”}”(hŒVvm_fault_t vmf_insert_folio_pud(struct vm_fault *vmf, struct folio *folio, bool write)”h]”(h)�”}”(hhh]”j)�”}”(hŒ vm_fault_t”h]”hŒ vm_fault_t”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÚubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÚŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlŒvmf_insert_folio_pud”sbŒc.vmf_insert_folio_pud”†”asbuh1hhjÚh²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M3ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<Úh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÚh²hh³j;Úh´M3ubhÿ)�”}”(hŒvmf_insert_folio_pud”h]”j)�”}”(hj8Úh]”hŒvmf_insert_folio_pud”…”�”}”(hjNÚh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjJÚubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÚh²hh³j;Úh´M3ubj )�”}”(hŒ7(struct vm_fault *vmf, struct folio *folio, bool write)”h]”(j )�”}”(hŒstruct vm_fault *vmf”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjiÚh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjeÚubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvÚh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjeÚubh)�”}”(hhh]”j)�”}”(hŒvm_fault”h]”hŒvm_fault”…”�”}”(hj‡Úh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj„Úubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j‰ÚŒmodname”NŒ classname”Njpjs)�”}”jv]”j6ÚŒc.vmf_insert_folio_pud”†”asbuh1hhjeÚubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥Úh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjeÚubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj³Úh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjeÚubj)�”}”(hŒvmf”h]”hŒvmf”…”�”}”(hjÀÚh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjeÚubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjaÚubj )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÙÚh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÕÚubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæÚh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÕÚubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj÷Úh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjôÚubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jùÚŒmodname”NŒ classname”Njpjs)�”}”jv]”j6ÚŒc.vmf_insert_folio_pud”†”asbuh1hhjÕÚubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÕÚubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj#Ûh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÕÚubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj0Ûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕÚubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjaÚubj )�”}”(hŒ bool write”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjIÛh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjEÛubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjVÛh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjEÛubj)�”}”(hŒwrite”h]”hŒwrite”…”�”}”(hjdÛh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjEÛubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjaÚubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÚh²hh³j;Úh´M3ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÚh²hh³j;Úh´M3ubah}”(h]”j Úah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j;Úh´M3hj Úh²hubj4)�”}”(hhh]”jM)�”}”(hŒ-insert a pud size folio mapped by a pud entry”h]”hŒ-insert a pud size folio mapped by a pud entry”…”�”}”(hjŽÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M3hj‹Ûh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj Úh²hh³j;Úh´M3ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¦ÛjHj¦ÛjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hŒÀ**Parameters** ``struct vm_fault *vmf`` Structure describing the fault ``struct folio *folio`` folio to insert ``bool write`` whether it's a write fault **Return** vm_fault_t value.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj°Ûh]”hŒ Parameters”…”�”}”(hj²Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj®Ûubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M7hjªÛubj¤)�”}”(hhh]”(j©)�”}”(hŒ8``struct vm_fault *vmf`` Structure describing the fault ”h]”(j¯)�”}”(hŒ``struct vm_fault *vmf``”h]”jS)�”}”(hjÏÛh]”hŒstruct vm_fault *vmf”…”�”}”(hjÑÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÍÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M4hjÉÛubjÉ)�”}”(hhh]”jM)�”}”(hŒStructure describing the fault”h]”hŒStructure describing the fault”…”�”}”(hjèÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jäÛh´M4hjåÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÉÛubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jäÛh´M4hjÆÛubj©)�”}”(hŒ(``struct folio *folio`` folio to insert ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjÜh]”hŒstruct folio *folio”…”�”}”(hj Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M5hjÜubjÉ)�”}”(hhh]”jM)�”}”(hŒfolio to insert”h]”hŒfolio to insert”…”�”}”(hj!Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÜh´M5hjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÜh´M5hjÆÛubj©)�”}”(hŒ*``bool write`` whether it's a write fault ”h]”(j¯)�”}”(hŒ``bool write``”h]”jS)�”}”(hjAÜh]”hŒ bool write”…”�”}”(hjCÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj?Üubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M6hj;ÜubjÉ)�”}”(hhh]”jM)�”}”(hŒwhether it's a write fault”h]”hŒwhether it’s a write fault”…”�”}”(hjZÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jVÜh´M6hjWÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj;Üubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jVÜh´M6hjÆÛubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjªÛubjM)�”}”(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&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M8hjªÛubjM)�”}”(hŒvm_fault_t value.”h]”hŒvm_fault_t value.”…”�”}”(hj’Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M8hjªÛubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒtouch_pmd (C function)”Œ c.touch_pmd”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒWbool touch_pmd (struct vm_area_struct *vma, unsigned long addr, pmd_t *pmd, bool write)”h]”hù)�”}”(hŒVbool touch_pmd(struct vm_area_struct *vma, unsigned long addr, pmd_t *pmd, bool write)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjÁÜh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj½Üh²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MMubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏÜh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj½Üh²hh³jÎÜh´MMubhÿ)�”}”(hŒ touch_pmd”h]”j)�”}”(hŒ touch_pmd”h]”hŒ touch_pmd”…”�”}”(hjáÜh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÝÜubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj½Üh²hh³jÎÜh´MMubj )�”}”(hŒH(struct vm_area_struct *vma, unsigned long addr, pmd_t *pmd, bool write)”h]”(j )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjýÜh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjùÜubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Ýh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjùÜubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÝubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÝŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljãÜsbŒ c.touch_pmd”†”asbuh1hhjùÜubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;Ýh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjùÜubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjIÝh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjùÜubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjVÝh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjùÜubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjõÜubj )�”}”(hŒunsigned long addr”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjoÝh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjkÝubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}Ýh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjkÝubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj‹Ýh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjkÝubjÇ)�”}”(hŒ ”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 ]”jah"]”h$]”h&]”uh1jhjkÝubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjõÜubj )�”}”(hŒ pmd_t *pmd”h]”(h)�”}”(hhh]”j)�”}”(hŒpmd_t”h]”hŒpmd_t”…”�”}”(hjÃÝh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÀÝubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÅÝŒmodname”NŒ classname”Njpjs)�”}”jv]”j7ÝŒ c.touch_pmd”†”asbuh1hhj¼ÝubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáÝh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¼ÝubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjïÝh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¼Ýubj)�”}”(hŒpmd”h]”hŒpmd”…”�”}”(hjüÝh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¼Ýubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjõÜubj )�”}”(hŒ bool write”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(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Þubj)�”}”(hŒwrite”h]”hŒwrite”…”�”}”(hj0Þh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÞubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjõÜubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj½Üh²hh³jÎÜh´MMubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¹Üh²hh³jÎÜh´MMubah}”(h]”j´Üah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÎÜh´MMhj¶Üh²hubj4)�”}”(hhh]”jM)�”}”(hŒ;Mark page table pmd entry as accessed and dirty (for write)”h]”hŒ;Mark page table pmd entry as accessed and dirty (for write)”…”�”}”(hjZÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MMhjWÞh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¶Üh²hh³jÎÜh´MMubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjrÞjHjrÞjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``struct vm_area_struct *vma`` The VMA covering **addr** ``unsigned long addr`` The virtual address ``pmd_t *pmd`` pmd pointer into the page table mapping **addr** ``bool write`` Whether it's a write access **Return** whether the pmd entry is changed”h]”(jM)�”}”(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&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MQhjvÞubj¤)�”}”(hhh]”(j©)�”}”(hŒ9``struct vm_area_struct *vma`` The VMA covering **addr** ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hj›Þh]”hŒstruct vm_area_struct *vma”…”�”}”(hj�Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj™Þubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MNhj•ÞubjÉ)�”}”(hhh]”jM)�”}”(hŒThe VMA covering **addr**”h]”(hŒThe VMA covering ”…”�”}”(hj´Þh²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hj¼Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj´Þubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j°Þh´MNhj±Þubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj•Þubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j°Þh´MNhj’Þubj©)�”}”(hŒ+``unsigned long addr`` The virtual address ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hjâÞh]”hŒunsigned long addr”…”�”}”(hjäÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjàÞubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MOhjÜÞubjÉ)�”}”(hhh]”jM)�”}”(hŒThe virtual address”h]”hŒThe virtual address”…”�”}”(hjûÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j÷Þh´MOhjøÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÜÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j÷Þh´MOhj’Þubj©)�”}”(hŒ@``pmd_t *pmd`` pmd pointer into the page table mapping **addr** ”h]”(j¯)�”}”(hŒ``pmd_t *pmd``”h]”jS)�”}”(hjßh]”hŒ pmd_t *pmd”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjßubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MPhjßubjÉ)�”}”(hhh]”jM)�”}”(hŒ0pmd pointer into the page table mapping **addr**”h]”(hŒ(pmd pointer into the page table mapping ”…”�”}”(hj4ßh²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hj<ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj4ßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j0ßh´MPhj1ßubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjßubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j0ßh´MPhj’Þubj©)�”}”(hŒ+``bool write`` Whether it's a write access ”h]”(j¯)�”}”(hŒ``bool write``”h]”jS)�”}”(hjbßh]”hŒ bool write”…”�”}”(hjdßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj`ßubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MQhj\ßubjÉ)�”}”(hhh]”jM)�”}”(hŒWhether it's a write access”h]”hŒWhether it’s a write access”…”�”}”(hj{ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jwßh´MQhjxßubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj\ßubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jwßh´MQhj’Þubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjvÞubjM)�”}”(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&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MShjvÞubjM)�”}”(hŒ whether the pmd entry is changed”h]”hŒ whether the pmd entry is changed”…”�”}”(hj³ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MShjvÞubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒzap_huge_pmd (C function)”Œc.zap_huge_pmd”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒfbool zap_huge_pmd (struct mmu_gather *tlb, struct vm_area_struct *vma, pmd_t *pmd, unsigned long addr)”h]”hù)�”}”(hŒebool zap_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma, pmd_t *pmd, unsigned long addr)”h]”(jµ)�”}”(hjÿ-h]”hŒbool”…”�”}”(hjâßh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjÞßh²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Më ubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðßh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÞßh²hh³jïßh´Më ubhÿ)�”}”(hŒ zap_huge_pmd”h]”j)�”}”(hŒ zap_huge_pmd”h]”hŒ zap_huge_pmd”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjþßubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÞßh²hh³jïßh´Më ubj )�”}”(hŒT(struct mmu_gather *tlb, struct vm_area_struct *vma, pmd_t *pmd, unsigned long addr)”h]”(j )�”}”(hŒstruct mmu_gather *tlb”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjàubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+àh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjàubh)�”}”(hhh]”j)�”}”(hŒ mmu_gather”h]”hŒ mmu_gather”…”�”}”(hj<àh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj9àubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j>àŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljàsbŒc.zap_huge_pmd”†”asbuh1hhjàubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\àh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjàubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjjàh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjàubj)�”}”(hŒtlb”h]”hŒtlb”…”�”}”(hjwàh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjàubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjàubj )�”}”(hŒstruct vm_area_struct *vma”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj�àh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjŒàubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�àh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŒàubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj®àh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj«àubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j°àŒmodname”NŒ classname”Njpjs)�”}”jv]”jXàŒc.zap_huge_pmd”†”asbuh1hhjŒàubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌàh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjŒàubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÚàh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjŒàubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjçàh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŒàubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjàubj )�”}”(hŒ pmd_t *pmd”h]”(h)�”}”(hhh]”j)�”}”(hŒpmd_t”h]”hŒpmd_t”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjáubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jáŒmodname”NŒ classname”Njpjs)�”}”jv]”jXàŒc.zap_huge_pmd”†”asbuh1hhjüàubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!áh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjüàubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj/áh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjüàubj)�”}”(hŒpmd”h]”hŒpmd”…”�”}”(hj<áh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjüàubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjàubj )�”}”(hŒunsigned long addr”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjUáh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjQáubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcáh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjQáubjµ)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjqáh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjQáubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjQáubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj�áh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjQáubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjàubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjÞßh²hh³jïßh´Më ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÚßh²hh³jïßh´Më ubah}”(h]”jÕßah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jïßh´Më hj×ßh²hubj4)�”}”(hhh]”jM)�”}”(hŒ$Zap a huge THP which is of PMD size.”h]”hŒ$Zap a huge THP which is of PMD size.”…”�”}”(hj·áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Më hj´áh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj×ßh²hh³jïßh´Më ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÏájHjÏájI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXY**Parameters** ``struct mmu_gather *tlb`` The MMU gather TLB state associated with the operation. ``struct vm_area_struct *vma`` The VMA containing the range to zap. ``pmd_t *pmd`` A pointer to the leaf PMD entry. ``unsigned long addr`` The virtual address for the range to zap. **Return** ``true`` on success, ``false`` otherwise.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÙáh]”hŒ Parameters”…”�”}”(hjÛáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj×áubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Mï hjÓáubj¤)�”}”(hhh]”(j©)�”}”(hŒS``struct mmu_gather *tlb`` The MMU gather TLB state associated with the operation. ”h]”(j¯)�”}”(hŒ``struct mmu_gather *tlb``”h]”jS)�”}”(hjøáh]”hŒstruct mmu_gather *tlb”…”�”}”(hjúáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjöáubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Mì hjòáubjÉ)�”}”(hhh]”jM)�”}”(hŒ7The MMU gather TLB state associated with the operation.”h]”hŒ7The MMU gather TLB state associated with the operation.”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j âh´Mì hjâubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjòáubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j âh´Mì hjïáubj©)�”}”(hŒD``struct vm_area_struct *vma`` The VMA containing the range to zap. ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hj1âh]”hŒstruct vm_area_struct *vma”…”�”}”(hj3âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj/âubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Mí hj+âubjÉ)�”}”(hhh]”jM)�”}”(hŒ$The VMA containing the range to zap.”h]”hŒ$The VMA containing the range to zap.”…”�”}”(hjJâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jFâh´Mí hjGâubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj+âubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jFâh´Mí hjïáubj©)�”}”(hŒ0``pmd_t *pmd`` A pointer to the leaf PMD entry. ”h]”(j¯)�”}”(hŒ``pmd_t *pmd``”h]”jS)�”}”(hjjâh]”hŒ pmd_t *pmd”…”�”}”(hjlâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjhâubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Mî hjdâubjÉ)�”}”(hhh]”jM)�”}”(hŒ A pointer to the leaf PMD entry.”h]”hŒ A pointer to the leaf PMD entry.”…”�”}”(hjƒâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jâh´Mî hj€âubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjdâubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jâh´Mî hjïáubj©)�”}”(hŒA``unsigned long addr`` The virtual address for the range to zap. ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hj£âh]”hŒunsigned long addr”…”�”}”(hj¥âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¡âubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Mï hj�âubjÉ)�”}”(hhh]”jM)�”}”(hŒ)The virtual address for the range to zap.”h]”hŒ)The virtual address for the range to zap.”…”�”}”(hj¼âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¸âh´Mï hj¹âubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�âubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¸âh´Mï hjïáubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÓáubjM)�”}”(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&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Mñ hjÓáubjM)�”}”(hŒ)``true`` on success, ``false`` otherwise.”h]”(jS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjøâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjôâubhŒ on success, ”…”�”}”(hjôâh²hh³Nh´NubjS)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjôâubhŒ otherwise.”…”�”}”(hjôâh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.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”]”(héŒ#__split_unmapped_folio (C function)”Œc.__split_unmapped_folio”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ§int __split_unmapped_folio (struct folio *folio, int new_order, struct page *split_at, struct xa_state *xas, struct address_space *mapping, enum split_type split_type)”h]”hù)�”}”(hŒ¦int __split_unmapped_folio(struct folio *folio, int new_order, struct page *split_at, struct xa_state *xas, struct address_space *mapping, enum split_type split_type)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjCãh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hj?ãh²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MÚubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRãh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj?ãh²hh³jQãh´MÚubhÿ)�”}”(hŒ__split_unmapped_folio”h]”j)�”}”(hŒ__split_unmapped_folio”h]”hŒ__split_unmapped_folio”…”�”}”(hjdãh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj`ãubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj?ãh²hh³jQãh´MÚubj )�”}”(hŒŒ(struct folio *folio, int new_order, struct page *split_at, struct xa_state *xas, struct address_space *mapping, enum split_type split_type)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj€ãh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj|ãubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�ãh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj|ãubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjžãh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj›ãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j ãŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljfãsbŒc.__split_unmapped_folio”†”asbuh1hhj|ãubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾ãh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj|ãubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÌãh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj|ãubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÙãh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj|ãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjxãubj )�”}”(hŒ int new_order”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(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îãubj)�”}”(hŒ new_order”h]”hŒ new_order”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjîãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjxãubj )�”}”(hŒstruct page *split_at”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj'äh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj#äubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4äh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj#äubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjEäh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjBäubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jGäŒmodname”NŒ classname”Njpjs)�”}”jv]”jºãŒc.__split_unmapped_folio”†”asbuh1hhj#äubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcäh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj#äubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjqäh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj#äubj)�”}”(hŒsplit_at”h]”hŒsplit_at”…”�”}”(hj~äh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj#äubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjxãubj )�”}”(hŒstruct xa_state *xas”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj—äh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj“äubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤äh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj“äubh)�”}”(hhh]”j)�”}”(hŒxa_state”h]”hŒxa_state”…”�”}”(hjµäh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj²äubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j·äŒmodname”NŒ classname”Njpjs)�”}”jv]”jºãŒc.__split_unmapped_folio”†”asbuh1hhj“äubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓäh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj“äubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjáäh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj“äubj)�”}”(hŒxas”h]”hŒxas”…”�”}”(hjîäh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj“äubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjxãubj )�”}”(hŒstruct address_space *mapping”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjåubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjåubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj%åh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj"åubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j'åŒmodname”NŒ classname”Njpjs)�”}”jv]”jºãŒc.__split_unmapped_folio”†”asbuh1hhjåubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCåh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjåubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjQåh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjåubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj^åh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjåubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjxãubj )�”}”(hŒenum split_type split_type”h]”(j5)�”}”(hj‘ôh]”hŒenum”…”�”}”(hjwåh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjsåubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„åh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjsåubh)�”}”(hhh]”j)�”}”(hŒ split_type”h]”hŒ split_type”…”�”}”(hj•åh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj’åubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j—åŒmodname”NŒ classname”Njpjs)�”}”jv]”jºãŒc.__split_unmapped_folio”†”asbuh1hhjsåubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³åh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjsåubj)�”}”(hŒ split_type”h]”hŒ split_type”…”�”}”(hjÁåh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjsåubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjxãubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hj?ãh²hh³jQãh´MÚubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj;ãh²hh³jQãh´MÚubah}”(h]”j6ãah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jQãh´MÚhj8ãh²hubj4)�”}”(hhh]”jM)�”}”(hŒcsplits an unmapped **folio** to lower order folios in two ways: uniform split or non-uniform split.”h]”(hŒsplits an unmapped ”…”�”}”(hjëåh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjóåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjëåubhŒG to lower order folios in two ways: uniform split or non-uniform split.”…”�”}”(hjëåh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MÚhjèåh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj8ãh²hh³jQãh´MÚubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjæjHjæjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``struct folio *folio`` the to-be-split folio ``int new_order`` the smallest order of the after split folios (since buddy allocator like split generates folios with orders from **folio**'s order - 1 to new_order). ``struct page *split_at`` in buddy allocator like split, the folio containing **split_at** will be split until its order becomes **new_order**. ``struct xa_state *xas`` xa_state pointing to folio->mapping->i_pages and locked by caller ``struct address_space *mapping`` **folio->mapping** ``enum split_type split_type`` if the split is uniform or not (buddy allocator like split) **Description** 1. uniform split: the given **folio** into multiple **new_order** small folios, where all small folios have the same order. This is done when split_type is SPLIT_TYPE_UNIFORM. 2. buddy allocator like (non-uniform) split: the given **folio** is split into half and one of the half (containing the given page) is split into half until the given **folio**'s order becomes **new_order**. This is done when split_type is SPLIT_TYPE_NON_UNIFORM. The high level flow for these two methods are: 1. uniform split: **xas** is split with no expectation of failure and a single __split_folio_to_order() is called to split the **folio** into **new_order** along with stats update. 2. non-uniform split: folio_order - **new_order** calls to __split_folio_to_order() are expected to be made in a for loop to split the **folio** to one lower order at a time. The folio containing **split_at** is split in each iteration. **xas** is split into half in each iteration and can fail. A failed **xas** split leaves split folios as is without merging them back. After splitting, the caller's folio reference will be transferred to the folio containing **split_at**. The caller needs to unlock and/or free after-split folios if necessary. **Return** 0 - successful, <0 - failed (if -ENOMEM is returned, **folio** might be split but not to **new_order**, the caller needs to check)”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjæh]”hŒ Parameters”…”�”}”(hj!æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjæubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MÞhjæubj¤)�”}”(hhh]”(j©)�”}”(hŒ.``struct folio *folio`` the to-be-split folio ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj>æh]”hŒstruct folio *folio”…”�”}”(hj@æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj<æubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MÜhj8æubjÉ)�”}”(hhh]”jM)�”}”(hŒthe to-be-split folio”h]”hŒthe to-be-split folio”…”�”}”(hjWæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jSæh´MÜhjTæubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj8æubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jSæh´MÜhj5æubj©)�”}”(hŒ¨``int new_order`` the smallest order of the after split folios (since buddy allocator like split generates folios with orders from **folio**'s order - 1 to new_order). ”h]”(j¯)�”}”(hŒ``int new_order``”h]”jS)�”}”(hjwæh]”hŒ int new_order”…”�”}”(hjyæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjuæubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MßhjqæubjÉ)�”}”(hhh]”jM)�”}”(hŒ•the smallest order of the after split folios (since buddy allocator like split generates folios with orders from **folio**'s order - 1 to new_order).”h]”(hŒqthe smallest order of the after split folios (since buddy allocator like split generates folios with orders from ”…”�”}”(hj�æh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj˜æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�æubhŒ’s order - 1 to new_order).”…”�”}”(hj�æh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MÝhj�æubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjqæubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŒæh´Mßhj5æubj©)�”}”(hŒ�``struct page *split_at`` in buddy allocator like split, the folio containing **split_at** will be split until its order becomes **new_order**. ”h]”(j¯)�”}”(hŒ``struct page *split_at``”h]”jS)�”}”(hjÃæh]”hŒstruct page *split_at”…”�”}”(hjÅæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÁæubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Máhj½æubjÉ)�”}”(hhh]”jM)�”}”(hŒuin buddy allocator like split, the folio containing **split_at** will be split until its order becomes **new_order**.”h]”(hŒ4in buddy allocator like split, the folio containing ”…”�”}”(hjÜæh²hh³Nh´NubjŽ)�”}”(hŒ **split_at**”h]”hŒsplit_at”…”�”}”(hjäæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÜæubhŒ' will be split until its order becomes ”…”�”}”(hjÜæh²hh³Nh´NubjŽ)�”}”(hŒ **new_order**”h]”hŒ new_order”…”�”}”(hjöæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÜæubhŒ.”…”�”}”(hjÜæh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MàhjÙæubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj½æubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jØæh´Máhj5æubj©)�”}”(hŒ[``struct xa_state *xas`` xa_state pointing to folio->mapping->i_pages and locked by caller ”h]”(j¯)�”}”(hŒ``struct xa_state *xas``”h]”jS)�”}”(hj!çh]”hŒstruct xa_state *xas”…”�”}”(hj#çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MâhjçubjÉ)�”}”(hhh]”jM)�”}”(hŒAxa_state pointing to folio->mapping->i_pages and locked by caller”h]”hŒAxa_state pointing to folio->mapping->i_pages and locked by caller”…”�”}”(hj:çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j6çh´Mâhj7çubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjçubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j6çh´Mâhj5æubj©)�”}”(hŒ5``struct address_space *mapping`` **folio->mapping** ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjZçh]”hŒstruct address_space *mapping”…”�”}”(hj\çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjXçubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MãhjTçubjÉ)�”}”(hhh]”jM)�”}”(hŒ**folio->mapping**”h]”jŽ)�”}”(hjuçh]”hŒfolio->mapping”…”�”}”(hjwçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjsçubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³joçh´Mãhjpçubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjTçubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³joçh´Mãhj5æubj©)�”}”(hŒ[``enum split_type split_type`` if the split is uniform or not (buddy allocator like split) ”h]”(j¯)�”}”(hŒ``enum split_type split_type``”h]”jS)�”}”(hjœçh]”hŒenum split_type split_type”…”�”}”(hjžçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjšçubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Mähj–çubjÉ)�”}”(hhh]”jM)�”}”(hŒ;if the split is uniform or not (buddy allocator like split)”h]”hŒ;if the split is uniform or not (buddy allocator like split)”…”�”}”(hjµçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j±çh´Mähj²çubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj–çubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j±çh´Mähj5æubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjæubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj×çh]”hŒ Description”…”�”}”(hjÙçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÕçubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MæhjæubjÐ/)�”}”(hhh]”(jÕ/)�”}”(hŒ¬uniform split: the given **folio** into multiple **new_order** small folios, where all small folios have the same order. This is done when split_type is SPLIT_TYPE_UNIFORM.”h]”jM)�”}”(hŒ¬uniform split: the given **folio** into multiple **new_order** small folios, where all small folios have the same order. This is done when split_type is SPLIT_TYPE_UNIFORM.”h]”(hŒuniform split: the given ”…”�”}”(hjôçh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjüçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjôçubhŒ into multiple ”…”�”}”(hjôçh²hh³Nh´NubjŽ)�”}”(hŒ **new_order**”h]”hŒ new_order”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjôçubhŒn small folios, where all small folios have the same order. This is done when split_type is SPLIT_TYPE_UNIFORM.”…”�”}”(hjôçh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Måhjðçubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjíçubjÕ/)�”}”(hXbuddy allocator like (non-uniform) split: the given **folio** is split into half and one of the half (containing the given page) is split into half until the given **folio**'s order becomes **new_order**. This is done when split_type is SPLIT_TYPE_NON_UNIFORM. ”h]”jM)�”}”(hXbuddy allocator like (non-uniform) split: the given **folio** is split into half and one of the half (containing the given page) is split into half until the given **folio**'s order becomes **new_order**. This is done when split_type is SPLIT_TYPE_NON_UNIFORM.”h]”(hŒ4buddy allocator like (non-uniform) split: the given ”…”�”}”(hj1èh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj9èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj1èubhŒg is split into half and one of the half (containing the given page) is split into half until the given ”…”�”}”(hj1èh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjKèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj1èubhŒ’s order becomes ”…”�”}”(hj1èh²hh³Nh´NubjŽ)�”}”(hŒ **new_order**”h]”hŒ new_order”…”�”}”(hj]èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj1èubhŒ9. This is done when split_type is SPLIT_TYPE_NON_UNIFORM.”…”�”}”(hj1èh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Mèhj-èubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hjíçubeh}”(h]”h ]”h"]”h$]”h&]”j>0j?0j@0hjA0jB0uh1jÏ/hjæubjM)�”}”(hŒ.The high level flow for these two methods are:”h]”hŒ.The high level flow for these two methods are:”…”�”}”(hj‚èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MíhjæubjÐ/)�”}”(hhh]”(jÕ/)�”}”(hŒ±uniform split: **xas** is split with no expectation of failure and a single __split_folio_to_order() is called to split the **folio** into **new_order** along with stats update.”h]”jM)�”}”(hŒ±uniform split: **xas** is split with no expectation of failure and a single __split_folio_to_order() is called to split the **folio** into **new_order** along with stats update.”h]”(hŒuniform split: ”…”�”}”(hj˜èh²hh³Nh´NubjŽ)�”}”(hŒ**xas**”h]”hŒxas”…”�”}”(hj èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj˜èubhŒf is split with no expectation of failure and a single __split_folio_to_order() is called to split the ”…”�”}”(hj˜èh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj²èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj˜èubhŒ into ”…”�”}”(hj˜èh²hh³Nh´NubjŽ)�”}”(hŒ **new_order**”h]”hŒ new_order”…”�”}”(hjÄèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj˜èubhŒ along with stats update.”…”�”}”(hj˜èh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Mïhj”èubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hj‘èubjÕ/)�”}”(hXqnon-uniform split: folio_order - **new_order** calls to __split_folio_to_order() are expected to be made in a for loop to split the **folio** to one lower order at a time. The folio containing **split_at** is split in each iteration. **xas** is split into half in each iteration and can fail. A failed **xas** split leaves split folios as is without merging them back. ”h]”jM)�”}”(hXpnon-uniform split: folio_order - **new_order** calls to __split_folio_to_order() are expected to be made in a for loop to split the **folio** to one lower order at a time. The folio containing **split_at** is split in each iteration. **xas** is split into half in each iteration and can fail. A failed **xas** split leaves split folios as is without merging them back.”h]”(hŒ!non-uniform split: folio_order - ”…”�”}”(hjçèh²hh³Nh´NubjŽ)�”}”(hŒ **new_order**”h]”hŒ new_order”…”�”}”(hjïèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjçèubhŒV calls to __split_folio_to_order() are expected to be made in a for loop to split the ”…”�”}”(hjçèh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjçèubhŒ4 to one lower order at a time. The folio containing ”…”�”}”(hjçèh²hh³Nh´NubjŽ)�”}”(hŒ **split_at**”h]”hŒsplit_at”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjçèubhŒ is split in each iteration. ”…”�”}”(hjçèh²hh³Nh´NubjŽ)�”}”(hŒ**xas**”h]”hŒxas”…”�”}”(hj%éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjçèubhŒ= is split into half in each iteration and can fail. A failed ”…”�”}”(hjçèh²hh³Nh´NubjŽ)�”}”(hŒ**xas**”h]”hŒxas”…”�”}”(hj7éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjçèubhŒ; split leaves split folios as is without merging them back.”…”�”}”(hjçèh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Mòhjãèubah}”(h]”h ]”h"]”h$]”h&]”uh1jÔ/hj‘èubeh}”(h]”h ]”h"]”h$]”h&]”j>0j?0j@0hjA0jB0uh1jÏ/hjæubjM)�”}”(hŒ¯After splitting, the caller's folio reference will be transferred to the folio containing **split_at**. The caller needs to unlock and/or free after-split folios if necessary.”h]”(hŒ\After splitting, the caller’s folio reference will be transferred to the folio containing ”…”�”}”(hj\éh²hh³Nh´NubjŽ)�”}”(hŒ **split_at**”h]”hŒsplit_at”…”�”}”(hjdéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj\éubhŒI. The caller needs to unlock and/or free after-split folios if necessary.”…”�”}”(hj\éh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MùhjæubjM)�”}”(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&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MýhjæubjM)�”}”(hŒ‚0 - successful, <0 - failed (if -ENOMEM is returned, **folio** might be split but not to **new_order**, the caller needs to check)”h]”(hŒ50 - successful, <0 - failed (if -ENOMEM is returned, ”…”�”}”(hj•éh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj�éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj•éubhŒ might be split but not to ”…”�”}”(hj•éh²hh³Nh´NubjŽ)�”}”(hŒ **new_order**”h]”hŒ new_order”…”�”}”(hj¯éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj•éubhŒ, the caller needs to check)”…”�”}”(hj•éh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.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”]”(héŒ#folio_check_splittable (C function)”Œc.folio_check_splittable”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒdint folio_check_splittable (struct folio *folio, unsigned int new_order, enum split_type split_type)”h]”hù)�”}”(hŒcint folio_check_splittable(struct folio *folio, unsigned int new_order, enum split_type split_type)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjèéh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjäéh²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MCubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷éh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjäéh²hh³jöéh´MCubhÿ)�”}”(hŒfolio_check_splittable”h]”j)�”}”(hŒfolio_check_splittable”h]”hŒfolio_check_splittable”…”�”}”(hj êh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjêubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjäéh²hh³jöéh´MCubj )�”}”(hŒI(struct folio *folio, unsigned int new_order, enum split_type split_type)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj%êh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj!êubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2êh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj!êubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjCêh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj@êubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jEêŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj êsbŒc.folio_check_splittable”†”asbuh1hhj!êubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcêh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj!êubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjqêh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj!êubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj~êh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj!êubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjêubj )�”}”(hŒunsigned int new_order”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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“êubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(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“êubj)�”}”(hŒ new_order”h]”hŒ new_order”…”�”}”(hjÏêh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj“êubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjêubj )�”}”(hŒenum split_type split_type”h]”(j5)�”}”(hj‘ôh]”hŒenum”…”�”}”(hjèêh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjäêubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõêh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjäêubh)�”}”(hhh]”j)�”}”(hŒ split_type”h]”hŒ split_type”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjëubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jëŒmodname”NŒ classname”Njpjs)�”}”jv]”j_êŒc.folio_check_splittable”†”asbuh1hhjäêubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$ëh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjäêubj)�”}”(hŒ split_type”h]”hŒ split_type”…”�”}”(hj2ëh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjäêubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjêubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjäéh²hh³jöéh´MCubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjàéh²hh³jöéh´MCubah}”(h]”jÛéah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jöéh´MChjÝéh²hubj4)�”}”(hhh]”jM)�”}”(hŒ.check if a folio can be split to a given order”h]”• çhŒ.check if a folio can be split to a given order”…”�”}”(hj\ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MChjYëh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÝéh²hh³jöéh´MCubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjtëjHjtëjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX\**Parameters** ``struct folio *folio`` folio to be split ``unsigned int new_order`` the smallest order of the after split folios (since buddy allocator like split generates folios with orders from **folio**'s order - 1 to new_order). ``enum split_type split_type`` uniform or non-uniform split **Description** folio_check_splittable() checks if **folio** can be split to **new_order** using **split_type** method. The truncated folio check must come first. **Context** folio must be locked. **Return** 0 - **folio** can be split to **new_order**, otherwise an error number is returned.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj~ëh]”hŒ Parameters”…”�”}”(hj€ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj|ëubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MGhjxëubj¤)�”}”(hhh]”(j©)�”}”(hŒ*``struct folio *folio`` folio to be split ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj�ëh]”hŒstruct folio *folio”…”�”}”(hjŸëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj›ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MDhj—ëubjÉ)�”}”(hhh]”jM)�”}”(hŒfolio to be split”h]”hŒfolio to be split”…”�”}”(hj¶ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j²ëh´MDhj³ëubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj—ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j²ëh´MDhj”ëubj©)�”}”(hŒ±``unsigned int new_order`` the smallest order of the after split folios (since buddy allocator like split generates folios with orders from **folio**'s order - 1 to new_order). ”h]”(j¯)�”}”(hŒ``unsigned int new_order``”h]”jS)�”}”(hjÖëh]”hŒunsigned int new_order”…”�”}”(hjØëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÔëubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MGhjÐëubjÉ)�”}”(hhh]”jM)�”}”(hŒ•the smallest order of the after split folios (since buddy allocator like split generates folios with orders from **folio**'s order - 1 to new_order).”h]”(hŒqthe smallest order of the after split folios (since buddy allocator like split generates folios with orders from ”…”�”}”(hjïëh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj÷ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjïëubhŒ’s order - 1 to new_order).”…”�”}”(hjïëh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MEhjìëubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÐëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jëëh´MGhj”ëubj©)�”}”(hŒ<``enum split_type split_type`` uniform or non-uniform split ”h]”(j¯)�”}”(hŒ``enum split_type split_type``”h]”jS)�”}”(hj"ìh]”hŒenum split_type split_type”…”�”}”(hj$ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj ìubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MHhjìubjÉ)�”}”(hhh]”jM)�”}”(hŒuniform or non-uniform split”h]”hŒuniform or non-uniform split”…”�”}”(hj;ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j7ìh´MHhj8ìubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjìubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j7ìh´MHhj”ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjxëubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj]ìh]”hŒ Description”…”�”}”(hj_ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj[ìubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MJhjxëubjM)�”}”(hŒ’folio_check_splittable() checks if **folio** can be split to **new_order** using **split_type** method. The truncated folio check must come first.”h]”(hŒ#folio_check_splittable() checks if ”…”�”}”(hjsìh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj{ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjsìubhŒ can be split to ”…”�”}”(hjsìh²hh³Nh´NubjŽ)�”}”(hŒ **new_order**”h]”hŒ new_order”…”�”}”(hj�ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjsìubhŒ using ”…”�”}”(hjsìh²hh³Nh´NubjŽ)�”}”(hŒ**split_type**”h]”hŒ split_type”…”�”}”(hjŸìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjsìubhŒ3 method. The truncated folio check must come first.”…”�”}”(hjsìh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MIhjxëubjM)�”}”(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&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MLhjxëubjM)�”}”(hŒfolio must be locked.”h]”hŒfolio must be locked.”…”�”}”(hjÐìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MMhjxëubjM)�”}”(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&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MOhjxëubjM)�”}”(hŒS0 - **folio** can be split to **new_order**, otherwise an error number is returned.”h]”(hŒ0 - ”…”�”}”(hj÷ìh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjÿìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj÷ìubhŒ can be split to ”…”�”}”(hj÷ìh²hh³Nh´NubjŽ)�”}”(hŒ **new_order**”h]”hŒ new_order”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj÷ìubhŒ(, otherwise an error number is returned.”…”�”}”(hj÷ìh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MOhjxëubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ__folio_split (C function)”Œc.__folio_split”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ int __folio_split (struct folio *folio, unsigned int new_order, struct page *split_at, struct page *lock_at, struct list_head *list, enum split_type split_type)”h]”hù)�”}”(hŒŸint __folio_split(struct folio *folio, unsigned int new_order, struct page *split_at, struct page *lock_at, struct list_head *list, enum split_type split_type)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjJíh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjFíh²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYíh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjFíh²hh³jXíh´Mubhÿ)�”}”(hŒ __folio_split”h]”j)�”}”(hŒ __folio_split”h]”hŒ __folio_split”…”�”}”(hjkíh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjgíubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjFíh²hh³jXíh´Mubj )�”}”(hŒŽ(struct folio *folio, unsigned int new_order, struct page *split_at, struct page *lock_at, struct list_head *list, enum split_type split_type)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj‡íh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjƒíubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”íh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjƒíubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj¥íh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¢íubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j§íŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljmísbŒc.__folio_split”†”asbuh1hhjƒíubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅíh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjƒíubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjÓíh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjƒíubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjàíh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjƒíubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjíubj )�”}”(hŒunsigned int new_order”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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õíubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(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õíubj)�”}”(hŒ new_order”h]”hŒ new_order”…”�”}”(hj1îh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjõíubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjíubj )�”}”(hŒstruct page *split_at”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjJîh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjFîubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWîh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjFîubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjhîh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjeîubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jjîŒmodname”NŒ classname”Njpjs)�”}”jv]”jÁíŒc.__folio_split”†”asbuh1hhjFîubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†îh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjFîubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj”îh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjFîubj)�”}”(hŒsplit_at”h]”hŒsplit_at”…”�”}”(hj¡îh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjFîubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjíubj )�”}”(hŒstruct page *lock_at”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjºîh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj¶îubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇîh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¶îubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjØîh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕîubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jÚîŒmodname”NŒ classname”Njpjs)�”}”jv]”jÁíŒc.__folio_split”†”asbuh1hhj¶îubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöîh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj¶îubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj¶îubj)�”}”(hŒlock_at”h]”hŒlock_at”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¶îubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjíubj )�”}”(hŒstruct list_head *list”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj*ïh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj&ïubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7ïh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj&ïubh)�”}”(hhh]”j)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hjHïh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjEïubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jJïŒmodname”NŒ classname”Njpjs)�”}”jv]”jÁíŒc.__folio_split”†”asbuh1hhj&ïubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfïh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj&ïubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjtïh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj&ïubj)�”}”(hŒlist”h]”hŒlist”…”�”}”(hj�ïh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj&ïubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjíubj )�”}”(hŒenum split_type split_type”h]”(j5)�”}”(hj‘ôh]”hŒenum”…”�”}”(hjšïh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj–ïubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§ïh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj–ïubh)�”}”(hhh]”j)�”}”(hŒ split_type”h]”hŒ split_type”…”�”}”(hj¸ïh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjµïubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jºïŒmodname”NŒ classname”Njpjs)�”}”jv]”jÁíŒc.__folio_split”†”asbuh1hhj–ïubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖïh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj–ïubj)�”}”(hŒ split_type”h]”hŒ split_type”…”�”}”(hjäïh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj–ïubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjíubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjFíh²hh³jXíh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjBíh²hh³jXíh´Mubah}”(h]”j=íah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jXíh´Mhj?íh²hubj4)�”}”(hhh]”jM)�”}”(hŒ6split a folio at **split_at** to a **new_order** folio”h]”(hŒsplit a folio at ”…”�”}”(hjðh²hh³Nh´NubjŽ)�”}”(hŒ **split_at**”h]”hŒsplit_at”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjðubhŒ to a ”…”�”}”(hjðh²hh³Nh´NubjŽ)�”}”(hŒ **new_order**”h]”hŒ new_order”…”�”}”(hj(ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjðubhŒ folio”…”�”}”(hjðh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Mhj ðh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj?íh²hh³jXíh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjJðjHjJðjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX**Parameters** ``struct folio *folio`` folio to split ``unsigned int new_order`` the order of the new folio ``struct page *split_at`` a page within the new folio ``struct page *lock_at`` a page within **folio** to be left locked to caller ``struct list_head *list`` after-split folios will be put on it if non NULL ``enum split_type split_type`` perform uniform split or not (non-uniform split) **Description** It calls __split_unmapped_folio() to perform uniform and non-uniform split. It is in charge of checking whether the split is supported or not and preparing **folio** for __split_unmapped_folio(). After splitting, the after-split folio containing **lock_at** remains locked and others are unlocked: 1. for uniform split, **lock_at** points to one of **folio**'s subpages; 2. for buddy allocator like (non-uniform) split, **lock_at** points to **folio**. **Return** 0 - successful, <0 - failed (if -ENOMEM is returned, **folio** might be split but not to **new_order**, the caller needs to check)”h]”(jM)�”}”(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&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M!hjNðubj¤)�”}”(hhh]”(j©)�”}”(hŒ'``struct folio *folio`` folio to split ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjsðh]”hŒstruct folio *folio”…”�”}”(hjuðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjqðubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MhjmðubjÉ)�”}”(hhh]”jM)�”}”(hŒfolio to split”h]”hŒfolio to split”…”�”}”(hjŒðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jˆðh´Mhj‰ðubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjmðubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jˆðh´Mhjjðubj©)�”}”(hŒ6``unsigned int new_order`` the order of the new folio ”h]”(j¯)�”}”(hŒ``unsigned int new_order``”h]”jS)�”}”(hj¬ðh]”hŒunsigned int new_order”…”�”}”(hj®ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjªðubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Mhj¦ðubjÉ)�”}”(hhh]”jM)�”}”(hŒthe order of the new folio”h]”hŒthe order of the new folio”…”�”}”(hjÅðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÁðh´MhjÂðubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¦ðubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÁðh´Mhjjðubj©)�”}”(hŒ6``struct page *split_at`` a page within the new folio ”h]”(j¯)�”}”(hŒ``struct page *split_at``”h]”jS)�”}”(hjåðh]”hŒstruct page *split_at”…”�”}”(hjçðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjãðubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M hjßðubjÉ)�”}”(hhh]”jM)�”}”(hŒa page within the new folio”h]”hŒa page within the new folio”…”�”}”(hjþðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³júðh´M hjûðubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjßðubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³júðh´M hjjðubj©)�”}”(hŒM``struct page *lock_at`` a page within **folio** to be left locked to caller ”h]”(j¯)�”}”(hŒ``struct page *lock_at``”h]”jS)�”}”(hjñh]”hŒstruct page *lock_at”…”�”}”(hj ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjñubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M!hjñubjÉ)�”}”(hhh]”jM)�”}”(hŒ3a page within **folio** to be left locked to caller”h]”(hŒa page within ”…”�”}”(hj7ñh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj?ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj7ñubhŒ to be left locked to caller”…”�”}”(hj7ñh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j3ñh´M!hj4ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjñubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j3ñh´M!hjjðubj©)�”}”(hŒL``struct list_head *list`` after-split folios will be put on it if non NULL ”h]”(j¯)�”}”(hŒ``struct list_head *list``”h]”jS)�”}”(hjiñh]”hŒstruct list_head *list”…”�”}”(hjkñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjgñubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M"hjcñubjÉ)�”}”(hhh]”jM)�”}”(hŒ0after-split folios will be put on it if non NULL”h]”hŒ0after-split folios will be put on it if non NULL”…”�”}”(hj‚ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j~ñh´M"hjñubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjcñubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j~ñh´M"hjjðubj©)�”}”(hŒP``enum split_type split_type`` perform uniform split or not (non-uniform split) ”h]”(j¯)�”}”(hŒ``enum split_type split_type``”h]”jS)�”}”(hj¢ñh]”hŒenum split_type split_type”…”�”}”(hj¤ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj ñubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M#hjœñubjÉ)�”}”(hhh]”jM)�”}”(hŒ0perform uniform split or not (non-uniform split)”h]”hŒ0perform uniform split or not (non-uniform split)”…”�”}”(hj»ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j·ñh´M#hj¸ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjœñubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j·ñh´M#hjjðubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjNðubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÝñh]”hŒ Description”…”�”}”(hjßñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÛñubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M%hjNðubjM)�”}”(hŒÃIt calls __split_unmapped_folio() to perform uniform and non-uniform split. It is in charge of checking whether the split is supported or not and preparing **folio** for __split_unmapped_folio().”h]”(hŒœIt calls __split_unmapped_folio() to perform uniform and non-uniform split. It is in charge of checking whether the split is supported or not and preparing ”…”�”}”(hjóñh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjûñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjóñubhŒ for __split_unmapped_folio().”…”�”}”(hjóñh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M$hjNðubjM)�”}”(hXAfter splitting, the after-split folio containing **lock_at** remains locked and others are unlocked: 1. for uniform split, **lock_at** points to one of **folio**'s subpages; 2. for buddy allocator like (non-uniform) split, **lock_at** points to **folio**.”h]”(hŒ2After splitting, the after-split folio containing ”…”�”}”(hjòh²hh³Nh´NubjŽ)�”}”(hŒ **lock_at**”h]”hŒlock_at”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjòubhŒ? remains locked and others are unlocked: 1. for uniform split, ”…”�”}”(hjòh²hh³Nh´NubjŽ)�”}”(hŒ **lock_at**”h]”hŒlock_at”…”�”}”(hj.òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjòubhŒ points to one of ”…”�”}”(hjòh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj@òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjòubhŒ@’s subpages; 2. for buddy allocator like (non-uniform) split, ”…”�”}”(hjòh²hh³Nh´NubjŽ)�”}”(hŒ **lock_at**”h]”hŒlock_at”…”�”}”(hjRòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjòubhŒ points to ”…”�”}”(hjòh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjdòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjòubhŒ.”…”�”}”(hjòh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M(hjNðubjM)�”}”(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&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M-hjNðubjM)�”}”(hŒ‚0 - successful, <0 - failed (if -ENOMEM is returned, **folio** might be split but not to **new_order**, the caller needs to check)”h]”(hŒ50 - successful, <0 - failed (if -ENOMEM is returned, ”…”�”}”(hj•òh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj�òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj•òubhŒ might be split but not to ”…”�”}”(hj•òh²hh³Nh´NubjŽ)�”}”(hŒ **new_order**”h]”hŒ new_order”…”�”}”(hj¯òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj•òubhŒ, the caller needs to check)”…”�”}”(hj•òh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.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”]”(héŒ!folio_split_unmapped (C function)”Œc.folio_split_unmapped”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒFint folio_split_unmapped (struct folio *folio, unsigned int new_order)”h]”hù)�”}”(hŒEint folio_split_unmapped(struct folio *folio, unsigned int new_order)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjèòh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjäòh²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MöubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷òh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjäòh²hh³jöòh´Möubhÿ)�”}”(hŒfolio_split_unmapped”h]”j)�”}”(hŒfolio_split_unmapped”h]”hŒfolio_split_unmapped”…”�”}”(hj óh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjóubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjäòh²hh³jöòh´Möubj )�”}”(hŒ-(struct folio *folio, unsigned int new_order)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj%óh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj!óubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2óh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj!óubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjCóh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj@óubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jEóŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj ósbŒc.folio_split_unmapped”†”asbuh1hhj!óubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcóh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj!óubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjqóh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj!óubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj~óh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj!óubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjóubj )�”}”(hŒunsigned int new_order”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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“óubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(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“óubj)�”}”(hŒ new_order”h]”hŒ new_order”…”�”}”(hjÏóh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj“óubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjóubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjäòh²hh³jöòh´Möubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjàòh²hh³jöòh´Möubah}”(h]”jÛòah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jöòh´MöhjÝòh²hubj4)�”}”(hhh]”jM)�”}”(hŒ1split a large anon folio that is already unmapped”h]”hŒ1split a large anon folio that is already unmapped”…”�”}”(hjùóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Möhjöóh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÝòh²hh³jöòh´Möubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjôjHjôjI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX»**Parameters** ``struct folio *folio`` folio to split ``unsigned int new_order`` the order of folios after split **Description** This function is a helper for splitting folios that have already been unmapped. The use case is that the device or the CPU can refuse to migrate THP pages in the middle of migration, due to allocation issues on either side. anon_vma_lock is not required to be held, mmap_read_lock() or mmap_write_lock() should be held. **folio** is expected to be locked by the caller. device-private and non device-private folios are supported along with folios that are in the swapcache. **folio** should also be unmapped and isolated from LRU (if applicable) Upon return, the folio is not remapped, split folios are not added to LRU, free_folio_and_swap_cache() is not called, and new folios remain locked. **Return** 0 on success, -EAGAIN if the folio cannot be split (e.g., due to insufficient reference count or extra pins).”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjôh]”hŒ Parameters”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjôubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Múhjôubj¤)�”}”(hhh]”(j©)�”}”(hŒ'``struct folio *folio`` folio to split ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj:ôh]”hŒstruct folio *folio”…”�”}”(hj<ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj8ôubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M÷hj4ôubjÉ)�”}”(hhh]”jM)�”}”(hŒfolio to split”h]”hŒfolio to split”…”�”}”(hjSôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jOôh´M÷hjPôubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj4ôubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jOôh´M÷hj1ôubj©)�”}”(hŒ;``unsigned int new_order`` the order of folios after split ”h]”(j¯)�”}”(hŒ``unsigned int new_order``”h]”jS)�”}”(hjsôh]”hŒunsigned int new_order”…”�”}”(hjuôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjqôubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MøhjmôubjÉ)�”}”(hhh]”jM)�”}”(hŒthe order of folios after split”h]”hŒthe order of folios after split”…”�”}”(hjŒôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jˆôh´Møhj‰ôubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjmôubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jˆôh´Møhj1ôubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjôubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj®ôh]”hŒ Description”…”�”}”(hj°ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¬ôubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MúhjôubjM)�”}”(hŒßThis function is a helper for splitting folios that have already been unmapped. The use case is that the device or the CPU can refuse to migrate THP pages in the middle of migration, due to allocation issues on either side.”h]”hŒßThis function is a helper for splitting folios that have already been unmapped. The use case is that the device or the CPU can refuse to migrate THP pages in the middle of migration, due to allocation issues on either side.”…”�”}”(hjÄôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MùhjôubjM)�”}”(hXAanon_vma_lock is not required to be held, mmap_read_lock() or mmap_write_lock() should be held. **folio** is expected to be locked by the caller. device-private and non device-private folios are supported along with folios that are in the swapcache. **folio** should also be unmapped and isolated from LRU (if applicable)”h]”(hŒ`anon_vma_lock is not required to be held, mmap_read_lock() or mmap_write_lock() should be held. ”…”�”}”(hjÓôh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjÛôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÓôubhŒ‘ is expected to be locked by the caller. device-private and non device-private folios are supported along with folios that are in the swapcache. ”…”�”}”(hjÓôh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjíôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÓôubhŒ> should also be unmapped and isolated from LRU (if applicable)”…”�”}”(hjÓôh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MþhjôubjM)�”}”(hŒ“Upon return, the folio is not remapped, split folios are not added to LRU, free_folio_and_swap_cache() is not called, and new folios remain locked.”h]”hŒ“Upon return, the folio is not remapped, split folios are not added to LRU, free_folio_and_swap_cache() is not called, and new folios remain locked.”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MhjôubjM)�”}”(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&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MhjôubjM)�”}”(hŒm0 on success, -EAGAIN if the folio cannot be split (e.g., due to insufficient reference count or extra pins).”h]”hŒm0 on success, -EAGAIN if the folio cannot be split (e.g., due to insufficient reference count or extra pins).”…”�”}”(hj-õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Mhjôubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_split (C function)”Œ c.folio_split”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒlint folio_split (struct folio *folio, unsigned int new_order, struct page *split_at, struct list_head *list)”h]”hù)�”}”(hŒkint folio_split(struct folio *folio, unsigned int new_order, struct page *split_at, struct list_head *list)”h]”(jµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj\õh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjXõh²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MXubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkõh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjXõh²hh³jjõh´MXubhÿ)�”}”(hŒ folio_split”h]”j)�”}”(hŒ folio_split”h]”hŒ folio_split”…”�”}”(hj}õh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjyõubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjXõh²hh³jjõh´MXubj )�”}”(hŒ\(struct folio *folio, unsigned int new_order, struct page *split_at, struct list_head *list)”h]”(j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj™õh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hj•õubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦õh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj•õubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj·õh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj´õubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j¹õŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jljõsbŒ c.folio_split”†”asbuh1hhj•õubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×õh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhj•õubjF )�”}”(hjI h]”hŒ*”…”�”}”(hjåõh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hj•õubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjòõh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj•õubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‘õubj )�”}”(hŒunsigned int new_order”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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öubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(hj'öh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjöubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5öh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjöubj)�”}”(hŒ new_order”h]”hŒ new_order”…”�”}”(hjCöh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjöubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‘õubj )�”}”(hŒstruct page *split_at”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hj\öh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjXöubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjiöh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjXöubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjzöh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjwöubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”j|öŒmodname”NŒ classname”Njpjs)�”}”jv]”jÓõŒ c.folio_split”†”asbuh1hhjXöubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜öh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjXöubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj¦öh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjXöubj)�”}”(hŒsplit_at”h]”hŒsplit_at”…”�”}”(hj³öh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjXöubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‘õubj )�”}”(hŒstruct list_head *list”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÌöh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÈöubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙöh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÈöubh)�”}”(hhh]”j)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hjêöh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjçöubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jìöŒmodname”NŒ classname”Njpjs)�”}”jv]”jÓõŒ c.folio_split”†”asbuh1hhjÈöubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÈöubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÈöubj)�”}”(hŒlist”h]”hŒlist”…”�”}”(hj#÷h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÈöubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hj‘õubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjXõh²hh³jjõh´MXubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjTõh²hh³jjõh´MXubah}”(h]”jOõah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jjõh´MXhjQõh²hubj4)�”}”(hhh]”jM)�”}”(hŒ6split a folio at **split_at** to a **new_order** folio”h]”(hŒsplit a folio at ”…”�”}”(hjM÷h²hh³Nh´NubjŽ)�”}”(hŒ **split_at**”h]”hŒsplit_at”…”�”}”(hjU÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjM÷ubhŒ to a ”…”�”}”(hjM÷h²hh³Nh´NubjŽ)�”}”(hŒ **new_order**”h]”hŒ new_order”…”�”}”(hjg÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjM÷ubhŒ folio”…”�”}”(hjM÷h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MXhjJ÷h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjQõh²hh³jjõh´MXubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj‰÷jHj‰÷jI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hX&**Parameters** ``struct folio *folio`` folio to split ``unsigned int new_order`` the order of the new folio ``struct page *split_at`` a page within the new folio ``struct list_head *list`` after-split folios are added to **list** if not null, otherwise to LRU list **Description** It has the same prerequisites and returns as split_huge_page_to_list_to_order(). Split a folio at **split_at** to a new_order folio, leave the remaining subpages of the original folio as large as possible. For example, in the case of splitting an order-9 folio at its third order-3 subpages to an order-3 folio, there are 2^(9-3)=64 order-3 subpages in the order-9 folio. After the split, there will be a group of folios with different orders and the new folio containing **split_at** is marked in bracket: [order-4, {order-3}, order-3, order-5, order-6, order-7, order-8]. After split, folio is left locked for caller. **Return** 0 - successful, <0 - failed (if -ENOMEM is returned, **folio** might be split but not to **new_order**, the caller needs to check)”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj“÷h]”hŒ Parameters”…”�”}”(hj•÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‘÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M\hj�÷ubj¤)�”}”(hhh]”(j©)�”}”(hŒ'``struct folio *folio`` folio to split ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj²÷h]”hŒstruct folio *folio”…”�”}”(hj´÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj°÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MYhj¬÷ubjÉ)�”}”(hhh]”jM)�”}”(hŒfolio to split”h]”hŒfolio to split”…”�”}”(hjË÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÇ÷h´MYhjÈ÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¬÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÇ÷h´MYhj©÷ubj©)�”}”(hŒ6``unsigned int new_order`` the order of the new folio ”h]”(j¯)�”}”(hŒ``unsigned int new_order``”h]”jS)�”}”(hjë÷h]”hŒunsigned int new_order”…”�”}”(hjí÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjé÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MZhjå÷ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe order of the new folio”h]”hŒthe order of the new folio”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jøh´MZhjøubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjå÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jøh´MZhj©÷ubj©)�”}”(hŒ6``struct page *split_at`` a page within the new folio ”h]”(j¯)�”}”(hŒ``struct page *split_at``”h]”jS)�”}”(hj$øh]”hŒstruct page *split_at”…”�”}”(hj&øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj"øubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M[hjøubjÉ)�”}”(hhh]”jM)�”}”(hŒa page within the new folio”h]”hŒa page within the new folio”…”�”}”(hj=øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j9øh´M[hj:øubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjøubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j9øh´M[hj©÷ubj©)�”}”(hŒg``struct list_head *list`` after-split folios are added to **list** if not null, otherwise to LRU list ”h]”(j¯)�”}”(hŒ``struct list_head *list``”h]”jS)�”}”(hj]øh]”hŒstruct list_head *list”…”�”}”(hj_øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj[øubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M]hjWøubjÉ)�”}”(hhh]”jM)�”}”(hŒKafter-split folios are added to **list** if not null, otherwise to LRU list”h]”(hŒ after-split folios are added to ”…”�”}”(hjvøh²hh³Nh´NubjŽ)�”}”(hŒ**list**”h]”hŒlist”…”�”}”(hj~øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjvøubhŒ# if not null, otherwise to LRU list”…”�”}”(hjvøh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M\hjsøubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjWøubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jrøh´M]hj©÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj�÷ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj«øh]”hŒ Description”…”�”}”(hj­øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj©øubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M_hj�÷ubjM)�”}”(hŒPIt has the same prerequisites and returns as split_huge_page_to_list_to_order().”h]”hŒPIt has the same prerequisites and returns as split_huge_page_to_list_to_order().”…”�”}”(hjÁøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M^hj�÷ubjM)�”}”(hXìSplit a folio at **split_at** to a new_order folio, leave the remaining subpages of the original folio as large as possible. For example, in the case of splitting an order-9 folio at its third order-3 subpages to an order-3 folio, there are 2^(9-3)=64 order-3 subpages in the order-9 folio. After the split, there will be a group of folios with different orders and the new folio containing **split_at** is marked in bracket: [order-4, {order-3}, order-3, order-5, order-6, order-7, order-8].”h]”(hŒSplit a folio at ”…”�”}”(hjÐøh²hh³Nh´NubjŽ)�”}”(hŒ **split_at**”h]”hŒsplit_at”…”�”}”(hjØøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÐøubhXj to a new_order folio, leave the remaining subpages of the original folio as large as possible. For example, in the case of splitting an order-9 folio at its third order-3 subpages to an order-3 folio, there are 2^(9-3)=64 order-3 subpages in the order-9 folio. After the split, there will be a group of folios with different orders and the new folio containing ”…”�”}”(hjÐøh²hh³Nh´NubjŽ)�”}”(hŒ **split_at**”h]”hŒsplit_at”…”�”}”(hjêøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÐøubhŒY is marked in bracket: [order-4, {order-3}, order-3, order-5, order-6, order-7, order-8].”…”�”}”(hjÐøh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Mahj�÷ubjM)�”}”(hŒ-After split, folio is left locked for caller.”h]”hŒ-After split, folio is left locked for caller.”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Mihj�÷ubjM)�”}”(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&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Mkhj�÷ubjM)�”}”(hŒ‚0 - successful, <0 - failed (if -ENOMEM is returned, **folio** might be split but not to **new_order**, the caller needs to check)”h]”(hŒ50 - successful, <0 - failed (if -ENOMEM is returned, ”…”�”}”(hj*ùh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj2ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj*ùubhŒ might be split but not to ”…”�”}”(hj*ùh²hh³Nh´NubjŽ)�”}”(hŒ **new_order**”h]”hŒ new_order”…”�”}”(hjDùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj*ùubhŒ, the caller needs to check)”…”�”}”(hj*ùh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Mlhj�÷ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ min_order_for_split (C function)”Œc.min_order_for_split”hNt”auh1hÜhjÞÁh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ6unsigned int min_order_for_split (struct folio *folio)”h]”hù)�”}”(hŒ5unsigned int min_order_for_split(struct folio *folio)”h]”(jµ)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj}ùh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjyùh²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MwubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒùh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjyùh²hh³j‹ùh´Mwubjµ)�”}”(hŒint”h]”hŒint”…”�”}”(hjšùh²hh³Nh´Nubah}”(h]”h ]”jÁah"]”h$]”h&]”uh1j´hjyùh²hh³j‹ùh´MwubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨ùh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjyùh²hh³j‹ùh´Mwubhÿ)�”}”(hŒmin_order_for_split”h]”j)�”}”(hŒmin_order_for_split”h]”hŒmin_order_for_split”…”�”}”(hjºùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¶ùubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjyùh²hh³j‹ùh´Mwubj )�”}”(hŒ(struct folio *folio)”h]”j )�”}”(hŒstruct folio *folio”h]”(j5)�”}”(hj8h]”hŒstruct”…”�”}”(hjÖùh²hh³Nh´Nubah}”(h]”h ]”jAah"]”h$]”h&]”uh1j4hjÒùubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãùh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÒùubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjôùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jlŒ reftarget”jöùŒmodname”NŒ classname”Njpjs)�”}”jv]”jy)�”}”jlj¼ùsbŒc.min_order_for_split”†”asbuh1hhjÒùubjÇ)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”jÓah"]”h$]”h&]”uh1jÆhjÒùubjF )�”}”(hjI h]”hŒ*”…”�”}”(hj"úh²hh³Nh´Nubah}”(h]”h ]”jR ah"]”h$]”h&]”uh1jE hjÒùubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj/úh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÒùubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j hjÎùubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j hjyùh²hh³j‹ùh´Mwubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjuùh²hh³j‹ùh´Mwubah}”(h]”jpùah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j‹ùh´Mwhjrùh²hubj4)�”}”(hhh]”jM)�”}”(hŒ/get the minimum order **folio** can be split to”h]”(hŒget the minimum order ”…”�”}”(hjYúh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjaúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjYúubhŒ can be split to”…”�”}”(hjYúh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´MwhjVúh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjrùh²hh³j‹ùh´Mwubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjƒújHjƒújI‰jJ‰jK‰uh1híh²hhjÞÁh³Nh´Nubj„)�”}”(hXF**Parameters** ``struct folio *folio`` folio to split **Description** min_order_for_split() tells the minimum order **folio** can be split to. If a file-backed folio is truncated, 0 will be returned. Any subsequent split attempt should get -EBUSY from split checking code. **Return** **folio**'s minimum order for split”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj�úh]”hŒ Parameters”…”�”}”(hj�úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‹úubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M{hj‡úubj¤)�”}”(hhh]”j©)�”}”(hŒ'``struct folio *folio`` folio to split ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj¬úh]”hŒstruct folio *folio”…”�”}”(hj®úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjªúubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Mxhj¦úubjÉ)�”}”(hhh]”jM)�”}”(hŒfolio to split”h]”hŒfolio to split”…”�”}”(hjÅúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÁúh´MxhjÂúubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¦úubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÁúh´Mxhj£úubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj‡úubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjçúh]”hŒ Description”…”�”}”(hjéúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjåúubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Mzhj‡úubjM)�”}”(hŒÊmin_order_for_split() tells the minimum order **folio** can be split to. If a file-backed folio is truncated, 0 will be returned. Any subsequent split attempt should get -EBUSY from split checking code.”h]”(hŒ.min_order_for_split() tells the minimum order ”…”�”}”(hjýúh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjýúubhŒ“ can be split to. If a file-backed folio is truncated, 0 will be returned. Any subsequent split attempt should get -EBUSY from split checking code.”…”�”}”(hjýúh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´Myhj‡úubjM)�”}”(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&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M}hj‡úubjM)�”}”(hŒ#**folio**'s minimum order for split”h]”(jŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj:ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj6ûubhŒ’s minimum order for split”…”�”}”(hj6ûh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:135: ./mm/huge_memory.c”h´M~hj‡úubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjÞÁh²hh³Nh´Nubeh}”(h]”Œ more-memory-management-functions”ah ]”h"]”Œ more memory management functions”ah$]”h&]”uh1hµhh·h²hh³hÊh´K`ubeh}”(h]”Œmemory-management-apis”ah ]”h"]”Œmemory management apis”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”j�ûŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”j@]”j5asŒnameids”}”(jgûjdûjFjCjEj@jDjAj-j*j¯j¬j(j%j<j9jrjrj¬œj©œj§j§jËýjÈýj�jšj¨#j¥#jý¦jú¦jÛÁjØÁj_ûj\ûuŒ nametypes”}”(jgû‰jF‰jEˆjD‰j-‰j¯‰j(‰j<‰jr‰j¬œ‰j§‰jËý‰j�‰j¨#‰jý¦‰jÛÁ‰j_û‰uh}”(jdûh·jChËhëhôjjjôjùjÆjËj§j¬jä jé j j j@jIjAjIj*jZj¬j0j%j²j9j+jrjLjijnjPjUjžj£jMjRjüjj jj…$jŠ$jG'jL'j¨+j­+jð-jõ-j}0j‚0j`5je5j¶7j»7j³9j¸9j1<j6<j†=j‹=j?j?jÿ@jAj@CjECj@FjEFj–Gj›GjWIj\IjLjLjFPjKPjÓQjØQj˜Tj�Tj“Vj˜VjcXjhXjáYjæYjt[jy[jà\jå\jÏ^jÔ^j–bj›bj?gjDgjhkjmkjmj#mjÙnjÞnj¡pj¦pj©œjrj7rjujCuj xjxjâyjçyjo{jt{j j%jË�jÐ�jÇ…jÌ…jއj“‡jIŠjNŠjŒjŒj¶�j»�jë�jð�j’j’j™–jž–jQ˜jV˜j÷™jü™j§j¯œjÈýjÀœjÝœjâœj¤Ÿj©Ÿj\¢ja¢j¤j¤jÛ¦jà¦j”©j™©j&¬j+¬jß®jä®j–°j›°ja³jf³jDµjIµj,¸j1¸jeºjjºj ¼j¼j"¾j'¾j²¿j·¿j3Áj8ÁjÃj Ãj­Äj²ÄjUÆjZÆj°ÇjµÇj…ÊjŠÊjZÍj_ÍjÒjÒj»ÕjÀÕj-Ùj2ÙjˆÝj�Ýjmàjràjãjãj(çj-çj@éjEéjíjíjðjðjój!ójÚõjßõjiøjnøjáújæújšjÎýj5ÿj:ÿjñjöj¥#j j½jÂjbjgjæjëju jz j¿ jÄ jjj¢j§jIjNjjjZj_jÎjÓj�j•j8 j= j"j "jú¦j«#jÈ#jÍ#jl&jq&j)j!)jW+j\+jù,jþ,jÎ/jÓ/jx2j}2j 4j%4j16j66jT8jY8jæ:jë:ji=jn=jg?jl?jxAj}Aj CjCj Dj¥DjžFj£FjFHjKHjvJj{Jj8Lj=LjNjNjÎOjÓOjÊQjÏQjúSjÿSj¯Uj´UjÖWjÛWjBYjGYjë\jð\js_jx_j"bj'bjªdj¯dj,gj1gjíijòij2mj7mj~ojƒoj-qj2qjÜrjárj@ujEujƒwjˆwjDzjIzjÍ{jÒ{jÆ~jË~j›�j �jÁ„jÆ„j�†j”†jFˆjKˆjî‰jó‰j½‹j‹j†Žj‹Žj8�j=�j”j”j˜j!˜jšjšjš›jŸ›j#�j(�j¬žj±žj> jC jÇ¡jÌ¡j:¤j?¤jØÁj§j%§j*§jÚ¨jߨj€ªj…ªj<®jA®j}²j‚²j²´j·´jÕ·jÚ·jtºjyºj;¼j@¼j¡¿j¦¿j\ûjÞÁjûÁjÂj´Äj¹Äj=ÈjBÈjbËjgËj’Îj—Îj¡Ñj¦ÑjœÕj¡ÕjÑØjÖØj¦Üj«Üjvßj{ßjfâjkâjhåjmåj�çj’çjéj!éjÁìjÆìjœðj¡ðjhójmój*öj/öjÉøjÎøjÂûjÇûj^þjcþjújÿjñjöjØjÝjQjVj¤ j© jŽ j“ jÌjÑjZj_j.j3jÎjÓj9j>jXj]j€j…j¨j­jÈjÍj!j!jD$jI$j¶'j»'j+j+j-j-j/j/jÖ1jÛ1jï3jô3j>6jC6jû8j9jÃ<jÈ<jC@jH@jÁBjÆBj®Ej³EjüGjHjrJjwJj Mj&MjPNjUNj*Wj/Wj–\j›\jF]jK]j ajaj§ej¬ejŽgj“gjéhjîhj³jj¸jjmj mjonjtnjÒoj×ojrjrjžsj£sj9uj>ujûvjwj¥xjªxjAzjFzj½|jÂ|j[}j`}jõ~jú~jÈ€jÍ€j§‚j¬‚j(„j-„j†j†j³‡j¸‡j*‰j/‰jÇŠjÌŠjHŒjMŒjð�jõ�j�j �j®‘j³‘j&”j+”jè•jí•j�—j”—jn™js™jÅ›jÊ›jžj!žjs jx jV¢j[¢j¤j¤j°¥jµ¥jh§jm§j§©j¬©j­«j²«jƒ­jˆ­j;°j@°jX²j]²j³³j¸³jnµjsµjï¶jô¶jp¸ju¸j ºjºjP¼jU¼jѽjÖ½j)Àj.ÀjpÂjuÂj‡ÄjŒÄjžÆj£Æj²Èj·ÈjÍÊjÒÊjÇÌjÌÌj¿ÏjÄÏj¤Ñj©ÑjœÔj¡Ôj�Öj†Öj ÙjÙjzÜjÜj ßjßj(âj-âj‡åjŒåjøèjýèjëjëj�íj’íj4ïj9ïjÐðjÕðj´ñj¹ñj¾òjÃòjæõjëõjùj"ùj ûjûjÀüjÅüjkþjpþjQjVjÿjjðjõjqjvjÿ j jLjQj(j-jÎjÓjøjýjójøjrjwjÍ"jÒ"jº&j¿&j*j*j`-je-jB0jG0j$3j)3jt6jy6jV9j[9j8<j=<j|>j�>j™@jž@jìDjñDj�Ij†Ij Kj¥Kj0Mj5MjAPjFPj¿SjÄSjyWj~Wj![j&[j’bj—bjtejyejÌgjÑgj%kj*kjLnjQnjàpjåpj�sj•sjujujwjwj xj¥xjzj#zjœ{j¡{j}j}j„~j‰~j€j€j…‚jŠ‚j„j„jJ†jO†jˆjˆjf‰jk‰jxŒj}Œjý�jŽj ‘j‘jš”jŸ”j—j—jª˜j¯˜jŒšj‘šj œjœjIžjNžj j j¨¡j­¡j¹¤j¾¤j §j§jò¨j÷¨j…ªjŠªjt¬jy¬jM®jR®j¤°j©°j ³j³j”µj™µj¸j¸jѹjÖ¹j»j»j̼jѼjRÀjWÀjVÂj[ÂjÔÅjÙÅj·Çj¼ÇjšÉjŸÉjÌjÌj ÏjÏj¼ÐjÁÐjÓj Ój`ÔjeÔjÔÖjÙÖjíØjòØj]ÛjbÛj&Ýj+Ýj6áj;ájÓâjØâjuäjzäjÊæjÏæjÛèjàèjìj$ìj îj¥îjëðjððjëójðójëõjðõj�÷j’÷jQùjVùjàújåújâüjçüjòþj÷þj„j‰jWj\j– j› j j j j¥jÎjÓjOjTjÐjÕj�j¢j jj,j1jE jJ jÓ"jØ"jT$jY$jä%jé%jƒ(jˆ(jˆ*j�*j<,jA,j_/jd/jw1j|1jš4jŸ4j`7je7j,=j1=j'?j,?j–Aj›Aj DjDj`GjeGj’Ij—IjKj KjAMjFMjžOj£OjŒQj‘QjlSjqSjÉUjÎUj5Xj:Xj3[j8[j7^j<^j–aj›aj¬cj±cjfjfj•hjšhjkjkjËljÐlj!pj&pj�qj¢qjìrjñrj;tj@tj¼ujÁujXwj]wj"yj'yj{j{jO}jT}jâ~jç~j8�j=�jQ…jV…jžˆj£ˆj�Œj•Œj Žj¥Žj@‘jE‘jà“jå“já–jæ–j™j#™j­šj²šj.�j3�j¦Ÿj«Ÿj`¡je¡j“£j˜£j¥j¥jv¨j{¨j­j­j•°jš°jñ±jö±j˳jгjD¶jI¶j¸j¸jVºj[ºjô¼jù¼j±¾j¶¾jÂÂjÇÂjRÄjWÄj˜Åj�ÅjÂÇjÇÇjCÉjHÉj§Ëj¬ËjÑÎjÖÎj]ÐjbÐj–Òj›Òj¦Ôj«ÔjX×j]×j ÚjÚj´Üj¹ÜjÕßjÚßj6ãj;ãjÛéjàéj=íjBíjÛòjàòjOõjTõjpùjuùuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”hŒsystem_message”“”)�”}”(hhh]”jM)�”}”(hhh]”hŒ6Hyperlink target "mm-api-gfp-flags" is not referenced.”…”�”}”hj÷ûsbah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjôûubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÊŒline”Kuh1jòûubaŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.