€•Œ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´KVubah}”(h]”h ]”h"]”h$]”h&]”jjŒ add_permalink”ˆuh1høŒsphinx_line_type”Œ declarator”hhôh²hh³jh´KVubah}”(h]”hëah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1hòh³jh´KVhhïh²hubhŒ desc_content”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hhïh²hh³jh´KVubeh}”(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´KXhhË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´KVhjjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j|h´KVhhË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´KZhj…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´KWhjª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´KWhjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjªubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÇh´KWhj¥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´KXhjç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´KXhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjçubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jh´KXhj¥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´KZhj…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´KZhj…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´K]hj…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´K\hj…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´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³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:8: ./arch/x86/include/asm/uaccess.h”h´Kchj…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´Kdhj…ubeh}”(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)�”}”(hjh]”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'hjh²hh³j%h´K ubah}”(h]”jah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j%h´K hjh²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hjh²hh³j%h´K ubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGj>jHj>jI‰jJ‰jK‰uh1híh²hhhËh³Nh´NubjM)�”}”(hŒ``put_user (x, ptr)``”h]”jS)�”}”(hjDh]”hŒput_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´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.”…”�”}”(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 hjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jlh´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Ž)�”}”(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´K¤hjsubj¤)�”}”(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£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´K¤hjsubjM)�”}”(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¤hjsubjM)�”}”(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´K§hjsubjM)�”}”(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.”…”�”}”(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´K¦hjsubjM)�”}”(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�hjXubhŒ0 must have pointer-to-simple-variable type, and ”…”�”}”(hjXh²hh³Nh´NubjŽ)�”}”(hŒ**x**”h]”hŒx”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjXubhŒ3 must be assignable to the result of dereferencing ”…”�”}”(hjXh²hh³Nh´NubjŽ)�”}”(hŒ**ptr**”h]”hŒptr”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjXubhŒ.”…”�”}”(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´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´K­hjsubjM)�”}”(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®hjsubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$__copy_to_user_inatomic (C function)”Œc.__copy_to_user_inatomic”hNt”auh1hÜhhËh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒZunsigned long __copy_to_user_inatomic (void __user *to, const void *from, unsigned long n)”h]”hù)�”}”(hŒYunsigned long __copy_to_user_inatomic(void __user *to, const void *from, 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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´K~ubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1jòhjÜh²hh³jñh´K~ubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÜh²hh³jñh´K~ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÜh²hh³jñh´K~ubhÿ)�”}”(hŒ__copy_to_user_inatomic”h]”j)�”}”(hŒ__copy_to_user_inatomic”h]”hŒ__copy_to_user_inatomic”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÜh²hh³jñh´K~ubhŒdesc_parameterlist”“”)�”}”(hŒ4(void __user *to, const void *from, unsigned long n)”h]”(hŒdesc_parameter”“”)�”}”(hŒvoid __user *to”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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?ubhŒ__user”…”�”}”(hj?h²hh³Nh´Nubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj?ubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1jqhj?ubj)�”}”(hŒto”h]”hŒto”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj9ubj>)�”}”(hŒconst void *from”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒconst”h]”hŒconst”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1j›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—ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj—ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj—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=hj9ubj>)�”}”(hŒunsigned long n”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Œ ”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjøubj)�”}”(hjh]”hŒn”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjøubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj9ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÜ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]”hŒ bullet_list”“”)�”}”(hhh]”hŒ list_item”“”)�”}”(hŒ9Copy a block of data into user space, with less checking.”h]”jM)�”}”(hjfh]”hŒ9Copy a block of data into user space, with less checking.”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´K~hjdubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj_h²hh³juh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1j]h³juh´K~hjZh²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²hhhËh³Nh´Nubj„)�”}”(hX×**Parameters** ``void __user *to`` Destination address, in user space. ``const void *from`` Source address, in kernel space. ``unsigned long n`` Number of bytes to copy. **Context** User context only. **Description** Copy data from kernel space to user space. Caller must check the specified block with access_ok() before calling this function. The caller should also make sure he pins the user space address so that we don't result in page fault and sleep.”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:11: ./include/linux/uaccess.h”h´K‚hj‘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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´Khj°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´KhjÌubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj°ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jËh´Khj­ubj©)�”}”(hŒ6``const void *from`` Source address, in kernel space. ”h]”(j¯)�”}”(hŒ``const void *from``”h]”jS)�”}”(hjïh]”hŒconst void *from”…”�”}”(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:11: ./include/linux/uaccess.h”h´K€hjéubjÉ)�”}”(hhh]”jM)�”}”(hŒ Source address, in kernel space.”h]”hŒ Source address, in kernel 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­ubj©)�”}”(hŒ-``unsigned long n`` Number of bytes to copy. ”h]”(j¯)�”}”(hŒ``unsigned long n``”h]”jS)�”}”(hj(h]”hŒunsigned long n”…”�”}”(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:11: ./include/linux/uaccess.h”h´K�hj"ubjÉ)�”}”(hhh]”jM)�”}”(hŒNumber of bytes to copy.”h]”hŒNumber of bytes to copy.”…”�”}”(hjAh²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Œ **Context**”h]”jŽ)�”}”(hjch]”hŒContext”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjaubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´Kƒhj‘ubjM)�”}”(hŒUser context only.”h]”hŒUser context only.”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´K…hj‘ubjM)�”}”(hŒñCopy data from kernel space to user space. Caller must check the specified block with access_ok() before calling this function. The caller should also make sure he pins the user space address so that we don't result in page fault and sleep.”h]”hŒóCopy data from kernel space to user space. Caller must check the specified block with access_ok() before calling this function. The caller should also make sure he pins the user space address so that we don’t result in page fault and sleep.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”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éŒ$probe_subpage_writeable (C function)”Œc.probe_subpage_writeable”hNt”auh1hÜhhËh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ@size_t probe_subpage_writeable (char __user *uaddr, size_t size)”h]”hù)�”}”(hŒ?size_t probe_subpage_writeable(char __user *uaddr, 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”Œ identifier”Œ reftarget”jÔŒmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”jíŒ ASTIdentifier”“”)�”}”jèŒprobe_subpage_writeable”sbŒc.probe_subpage_writeable”†”asbuh1hhjËh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M4ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjËh²hh³jûh´M4ubhÿ)�”}”(hŒprobe_subpage_writeable”h]”j)�”}”(hjøh]”hŒprobe_subpage_writeable”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjËh²hh³jûh´M4ubj8)�”}”(hŒ!(char __user *uaddr, size_t size)”h]”(j>)�”}”(hŒchar __user *uaddr”h]”(já)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj%ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj%ubhŒ__user”…”�”}”(hj%h²hh³Nh´Nubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj%ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj%ubj)�”}”(hŒuaddr”h]”hŒuaddr”…”�”}”(hjdh²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”jèŒ reftarget”j‚Œmodname”NŒ classname”Njìjï)�”}”jò]”jöŒc.probe_subpage_writeable”†”asbuh1hhjyubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjyubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjyubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj!ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjË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ŒNprobe the user range for write faults at sub-page granularity (e.g. arm64 MTE)”h]”hŒNprobe the user range for write faults at sub-page granularity (e.g. arm64 MTE)”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”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²hhhËh³Nh´Nubj„)�”}”(hXÀ**Parameters** ``char __user *uaddr`` start of address range ``size_t size`` size of address range **Description** Returns 0 on success, the number of bytes not probed on fault. It is expected that the caller checked for the write permission of each page in the range either by put_user() or GUP. The architecture port can implement a more efficient get_user() probing if the same sub-page faults are triggered by either a read or a write.”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:11: ./include/linux/uaccess.h”h´M8hjòubj¤)�”}”(hhh]”(j©)�”}”(hŒ.``char __user *uaddr`` start of address range ”h]”(j¯)�”}”(hŒ``char __user *uaddr``”h]”jS)�”}”(hj h]”hŒchar __user *uaddr”…”�”}”(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:11: ./include/linux/uaccess.h”h´M6hj ubjÉ)�”}”(hhh]”jM)�”}”(hŒstart of address range”h]”hŒstart of address range”…”�”}”(hj0 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j, h´M6hj- ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j, h´M6hj ubj©)�”}”(hŒ&``size_t size`` size of address range ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hjP h]”hŒ size_t size”…”�”}”(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:11: ./include/linux/uaccess.h”h´M7hjJ ubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of address range”h]”hŒsize of address range”…”�”}”(hji h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³je h´M7hjf ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjJ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³je 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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M9hjòubjM)�”}”(hŒ>Returns 0 on success, the number of bytes not probed on fault.”h]”hŒ>Returns 0 on success, the number of bytes not probed on fault.”…”�”}”(hj¡ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M8hjòubjM)�”}”(hXIt is expected that the caller checked for the write permission of each page in the range either by put_user() or GUP. The architecture port can implement a more efficient get_user() probing if the same sub-page faults are triggered by either a read or a write.”h]”hXIt is expected that the caller checked for the write permission of each page in the range either by put_user() or GUP. The architecture port can implement a more efficient get_user() probing if the same sub-page faults are triggered by either a read or a write.”…”�”}”(hj° h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M:hjòubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"copy_struct_from_user (C function)”Œc.copy_struct_from_user”hNt”auh1hÜhhËh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒYint copy_struct_from_user (void *dst, size_t ksize, const void __user *src, size_t usize)”h]”hù)�”}”(hŒXint copy_struct_from_user(void *dst, size_t ksize, const void __user *src, size_t usize)”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:11: ./include/linux/uaccess.h”h´MZubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÛ h²hh³jí h´MZubhÿ)�”}”(hŒcopy_struct_from_user”h]”j)�”}”(hŒcopy_struct_from_user”h]”hŒcopy_struct_from_user”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjü ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÛ h²hh³jí h´MZubj8)�”}”(hŒ?(void *dst, size_t ksize, const void __user *src, size_t usize)”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 ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj ubj)�”}”(hŒdst”h]”hŒdst”…”�”}”(hjE h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj ubj>)�”}”(hŒ size_t ksize”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hja h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj^ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jc Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj sbŒc.copy_struct_from_user”†”asbuh1hhjZ ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjZ ubj)�”}”(hŒksize”h]”hŒksize”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjZ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj ubj>)�”}”(hŒconst void __user *src”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œ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¤ ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjñ h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¤ 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 usize”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”jèŒ reftarget”j Œmodname”NŒ classname”Njìjï)�”}”jò]”j} Œc.copy_struct_from_user”†”asbuh1hhj ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj ubj)�”}”(hŒusize”h]”hŒusize”…”�”}”(hjF 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&]”jjuh1j7hjÛ h²hh³jí h´MZubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj× h²hh³jí h´MZubah}”(h]”jÒ ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jí h´MZhjÔ h²hubj4)�”}”(hhh]”jM)�”}”(hŒcopy a struct from userspace”h]”hŒcopy a struct from userspace”…”�”}”(hjp h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MZhjm h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÔ h²hh³jí h´MZubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjˆ jHjˆ jI‰jJ‰jK‰uh1híh²hhhËh³Nh´Nubj„)�”}”(hXç**Parameters** ``void *dst`` Destination address, in kernel space. This buffer must be **ksize** bytes long. ``size_t ksize`` Size of **dst** struct. ``const void __user *src`` Source address, in userspace. ``size_t usize`` (Alleged) size of **src** struct. **Description** Copies a struct from userspace to kernel space, in a way that guarantees backwards-compatibility for struct syscall arguments (as long as future struct extensions are made such that all new fields are *appended* to the old struct, and zeroed-out new fields have the same meaning as the old struct). **ksize** is just sizeof(*dst), and **usize** should've been passed by userspace. The recommended usage is something like the following:: SYSCALL_DEFINE2(foobar, const struct foo __user *, uarg, size_t, usize) { int err; struct foo karg = {}; if (usize > PAGE_SIZE) return -E2BIG; if (usize < FOO_SIZE_VER0) return -EINVAL; err = copy_struct_from_user(&karg, sizeof(karg), uarg, usize); if (err) return err; // ... } There are three cases to consider: * If **usize** == **ksize**, then it's copied verbatim. * If **usize** < **ksize**, then the userspace has passed an old struct to a newer kernel. The rest of the trailing bytes in **dst** (**ksize** - **usize**) are to be zero-filled. * If **usize** > **ksize**, then the userspace has passed a new struct to an older kernel. The trailing bytes unknown to the kernel (**usize** - **ksize**) are checked to ensure they are zeroed, otherwise -E2BIG is returned. Returns (in all cases, some data may have been copied): * -E2BIG: (**usize** > **ksize**) and there are non-zero trailing bytes in **src**. * -EFAULT: access to userspace 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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M^hjŒ ubj¤)�”}”(hhh]”(j©)�”}”(hŒ^``void *dst`` Destination address, in kernel space. This buffer must be **ksize** bytes long. ”h]”(j¯)�”}”(hŒ ``void *dst``”h]”jS)�”}”(hj± h]”hŒ void *dst”…”�”}”(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:11: ./include/linux/uaccess.h”h´M\hj« ubjÉ)�”}”(hhh]”jM)�”}”(hŒODestination address, in kernel space. This buffer must be **ksize** bytes long.”h]”(hŒ:Destination address, in kernel space. This buffer must be ”…”�”}”(hjÊ h²hh³Nh´NubjŽ)�”}”(hŒ **ksize**”h]”hŒksize”…”�”}”(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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.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Œ)``size_t ksize`` Size of **dst** struct. ”h]”(j¯)�”}”(hŒ``size_t ksize``”h]”jS)�”}”(hjý h]”hŒ size_t ksize”…”�”}”(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:11: ./include/linux/uaccess.h”h´M]hj÷ ubjÉ)�”}”(hhh]”jM)�”}”(hŒSize of **dst** struct.”h]”(hŒSize of ”…”�”}”(hj h²hh³Nh´NubjŽ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ubhŒ struct.”…”�”}”(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Œ9``const void __user *src`` Source address, in userspace. ”h]”(j¯)�”}”(hŒ``const void __user *src``”h]”jS)�”}”(hjH h]”hŒconst void __user *src”…”�”}”(hjJ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjF ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M^hjB ubjÉ)�”}”(hhh]”jM)�”}”(hŒSource address, in userspace.”h]”hŒSource address, in userspace.”…”�”}”(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Œ3``size_t usize`` (Alleged) size of **src** struct. ”h]”(j¯)�”}”(hŒ``size_t usize``”h]”jS)�”}”(hj� h]”hŒ size_t usize”…”�”}”(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:11: ./include/linux/uaccess.h”h´M_hj{ ubjÉ)�”}”(hhh]”jM)�”}”(hŒ!(Alleged) size of **src** struct.”h]”(hŒ(Alleged) size of ”…”�”}”(hjš h²hh³Nh´NubjŽ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hj¢ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjš ubhŒ struct.”…”�”}”(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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MahjŒ ubjM)�”}”(hX*Copies a struct from userspace to kernel space, in a way that guarantees backwards-compatibility for struct syscall arguments (as long as future struct extensions are made such that all new fields are *appended* to the old struct, and zeroed-out new fields have the same meaning as the old struct).”h]”(hŒÉCopies a struct from userspace to kernel space, in a way that guarantees backwards-compatibility for struct syscall arguments (as long as future struct extensions are made such that all new fields are ”…”�”}”(hjä h²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ *appended*”h]”hŒappended”…”�”}”(hjî h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jì hjä ubhŒW to the old struct, and zeroed-out new fields have the same meaning as the old struct).”…”�”}”(hjä h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M`hjŒ ubjM)�”}”(hŒ‰**ksize** is just sizeof(*dst), and **usize** should've been passed by userspace. The recommended usage is something like the following::”h]”(jŽ)�”}”(hŒ **ksize**”h]”hŒksize”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ubhŒ is just sizeof(”…”�”}”(hj h²hh³Nh´Nubjí )�”}”(hŒ*dst), and **usize**”h]”hŒdst), and **usize*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jì hj ubhŒ] should’ve been passed by userspace. The recommended usage is something like the following:”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MfhjŒ ubhŒ literal_block”“”)�”}”(hX=SYSCALL_DEFINE2(foobar, const struct foo __user *, uarg, size_t, usize) { int err; struct foo karg = {}; if (usize > PAGE_SIZE) return -E2BIG; if (usize < FOO_SIZE_VER0) return -EINVAL; err = copy_struct_from_user(&karg, sizeof(karg), uarg, usize); if (err) return err; // ... }”h]”hX=SYSCALL_DEFINE2(foobar, const struct foo __user *, uarg, size_t, usize) { int err; struct foo karg = {}; if (usize > PAGE_SIZE) return -E2BIG; if (usize < FOO_SIZE_VER0) return -EINVAL; err = copy_struct_from_user(&karg, sizeof(karg), uarg, usize); if (err) return err; // ... }”…”�”}”hj8 sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j6 h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MihjŒ ubj¤)�”}”(hhh]”(j©)�”}”(hXøThere are three cases to consider: * If **usize** == **ksize**, then it's copied verbatim. * If **usize** < **ksize**, then the userspace has passed an old struct to a newer kernel. The rest of the trailing bytes in **dst** (**ksize** - **usize**) are to be zero-filled. * If **usize** > **ksize**, then the userspace has passed a new struct to an older kernel. The trailing bytes unknown to the kernel (**usize** - **ksize**) are checked to ensure they are zeroed, otherwise -E2BIG is returned. ”h]”(j¯)�”}”(hŒ"There are three cases to consider:”h]”hŒ"There are three cases to consider:”…”�”}”(hjN h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M�hjJ ubjÉ)�”}”(hhh]”j^)�”}”(hhh]”(jc)�”}”(hŒ5If **usize** == **ksize**, then it's copied verbatim.”h]”jM)�”}”(hje h]”(hŒIf ”…”�”}”(hjg h²hh³Nh´NubjŽ)�”}”(hŒ **usize**”h]”hŒusize”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjg ubhŒ == ”…”�”}”(hjg h²hh³Nh´NubjŽ)�”}”(hŒ **ksize**”h]”hŒksize”…”�”}”(hj€ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjg ubhŒ, then it’s copied verbatim.”…”�”}”(hjg h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M{hjc ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj` ubjc)�”}”(hŒ±If **usize** < **ksize**, then the userspace has passed an old struct to a newer kernel. The rest of the trailing bytes in **dst** (**ksize** - **usize**) are to be zero-filled.”h]”jM)�”}”(hŒ±If **usize** < **ksize**, then the userspace has passed an old struct to a newer kernel. The rest of the trailing bytes in **dst** (**ksize** - **usize**) are to be zero-filled.”h]”(hŒIf ”…”�”}”(hj£ h²hh³Nh´NubjŽ)�”}”(hŒ **usize**”h]”hŒusize”…”�”}”(hj« h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj£ ubhŒ < ”…”�”}”(hj£ h²hh³Nh´NubjŽ)�”}”(hŒ **ksize**”h]”hŒksize”…”�”}”(hj½ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj£ ubhŒc, then the userspace has passed an old struct to a newer kernel. The rest of the trailing bytes in ”…”�”}”(hj£ h²hh³Nh´NubjŽ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjÏ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj£ ubhŒ (”…”�”}”(hj£ h²hh³Nh´NubjŽ)�”}”(hŒ **ksize**”h]”hŒksize”…”�”}”(hjá h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj£ ubhŒ - ”…”�”}”(hj£ h²hh³Nh´NubjŽ)�”}”(hŒ **usize**”h]”hŒusize”…”�”}”(hjó h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj£ ubhŒ) are to be zero-filled.”…”�”}”(hj£ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M|hjŸ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj` ubjc)�”}”(hŒßIf **usize** > **ksize**, then the userspace has passed a new struct to an older kernel. The trailing bytes unknown to the kernel (**usize** - **ksize**) are checked to ensure they are zeroed, otherwise -E2BIG is returned. ”h]”jM)�”}”(hŒÞIf **usize** > **ksize**, then the userspace has passed a new struct to an older kernel. The trailing bytes unknown to the kernel (**usize** - **ksize**) are checked to ensure they are zeroed, otherwise -E2BIG is returned.”h]”(hŒIf ”…”�”}”(hjh²hh³Nh´NubjŽ)�”}”(hŒ **usize**”h]”hŒusize”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubhŒ > ”…”�”}”(hjh²hh³Nh´NubjŽ)�”}”(hŒ **ksize**”h]”hŒksize”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubhŒk, then the userspace has passed a new struct to an older kernel. The trailing bytes unknown to the kernel (”…”�”}”(hjh²hh³Nh´NubjŽ)�”}”(hŒ **usize**”h]”hŒusize”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubhŒ - ”…”�”}”(hjh²hh³Nh´NubjŽ)�”}”(hŒ **ksize**”h]”hŒksize”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubhŒF) are checked to ensure they are zeroed, otherwise -E2BIG is returned.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj` ubeh}”(h]”h ]”h"]”h$]”h&]”j‚juuh1j]h³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Œ³Returns (in all cases, some data may have been copied): * -E2BIG: (**usize** > **ksize**) and there are non-zero trailing bytes in **src**. * -EFAULT: access to userspace failed.”h]”(j¯)�”}”(hŒ7Returns (in all cases, some data may have been copied):”h]”hŒ7Returns (in all cases, some data may have been copied):”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M„hj…ubjÉ)�”}”(hhh]”j^)�”}”(hhh]”(jc)�”}”(hŒR-E2BIG: (**usize** > **ksize**) and there are non-zero trailing bytes in **src**.”h]”jM)�”}”(hj h]”(hŒ -E2BIG: (”…”�”}”(hj¢h²hh³Nh´NubjŽ)�”}”(hŒ **usize**”h]”hŒusize”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¢ubhŒ > ”…”�”}”(hj¢h²hh³Nh´NubjŽ)�”}”(hŒ **ksize**”h]”hŒksize”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¢ubhŒ+) and there are non-zero trailing bytes in ”…”�”}”(hj¢h²hh³Nh´NubjŽ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(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&]”uh1jbhj›ubjc)�”}”(hŒ$-EFAULT: access to userspace failed.”h]”jM)�”}”(hjíh]”hŒ$-EFAULT: access to userspace failed.”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M…hjëubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj›ubeh}”(h]”h ]”h"]”h$]”h&]”j‚juuh1j]h³j—h´M„hj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j—h´M„hjG ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjŒ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ copy_struct_to_user (C function)”Œc.copy_struct_to_user”hNt”auh1hÜhhËh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒoint copy_struct_to_user (void __user *dst, size_t usize, const void *src, size_t ksize, bool *ignored_trailing)”h]”hù)�”}”(hŒnint copy_struct_to_user(void __user *dst, size_t usize, const void *src, size_t ksize, bool *ignored_trailing)”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj7h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M¢ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj7h²hh³jIh´M¢ubhÿ)�”}”(hŒcopy_struct_to_user”h]”j)�”}”(hŒcopy_struct_to_user”h]”hŒcopy_struct_to_user”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjXubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj7h²hh³jIh´M¢ubj8)�”}”(hŒW(void __user *dst, size_t usize, const void *src, size_t ksize, bool *ignored_trailing)”h]”(j>)�”}”(hŒvoid __user *dst”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjtubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjtubhŒ__user”…”�”}”(hjth²hh³Nh´Nubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjtubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjtubj)�”}”(hŒdst”h]”hŒdst”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjtubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjpubj>)�”}”(hŒ size_t usize”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”jèŒ reftarget”jÑŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj^sbŒc.copy_struct_to_user”†”asbuh1hhjÈubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÈubj)�”}”(hŒusize”h]”hŒusize”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÈubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjpubj>)�”}”(hŒconst void *src”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œvoid”h]”hŒvoid”…”�”}”(hj1h²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òhjubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjubj)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjpubj>)�”}”(hŒ size_t ksize”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjsubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jxŒmodname”NŒ classname”Njìjï)�”}”jò]”jëŒc.copy_struct_to_user”†”asbuh1hhjoubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjoubj)�”}”(hŒksize”h]”hŒksize”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjoubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjpubj>)�”}”(hŒbool *ignored_trailing”h]”(já)�”}”(hŒbool”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·ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj·ubj)�”}”(hŒignored_trailing”h]”hŒignored_trailing”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj·ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjpubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj7h²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Œcopy a struct to userspace”h]”hŒcopy a struct to userspace”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”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²hhhËh³Nh´Nubj„)�”}”(hXM **Parameters** ``void __user *dst`` Destination address, in userspace. This buffer must be **ksize** bytes long. ``size_t usize`` (Alleged) size of **dst** struct. ``const void *src`` Source address, in kernel space. ``size_t ksize`` Size of **src** struct. ``bool *ignored_trailing`` Set to ``true`` if there was a non-zero byte in **src** that userspace cannot see because they are using an smaller struct. **Description** Copies a struct from kernel space to userspace, in a way that guarantees backwards-compatibility for struct syscall arguments (as long as future struct extensions are made such that all new fields are *appended* to the old struct, and zeroed-out new fields have the same meaning as the old struct). Some syscalls may wish to make sure that userspace knows about everything in the struct, and if there is a non-zero value that userspce doesn't know about, they want to return an error (such as -EMSGSIZE) or have some other fallback (such as adding a "you're missing some information" flag). If **ignored_trailing** is non-``NULL``, it will be set to ``true`` if there was a non-zero byte that could not be copied to userspace (ie. was past **usize**). While unconditionally returning an error in this case is the simplest solution, for maximum backward compatibility you should try to only return -EMSGSIZE if the user explicitly requested the data that couldn't be copied. Note that structure sizes can change due to header changes and simple recompilations without code changes(!), so if you care about **ignored_trailing** you probably want to make sure that any new field data is associated with a flag. Otherwise you might assume that a program knows about data it does not. **ksize** is just sizeof(*src), and **usize** should've been passed by userspace. The recommended usage is something like the following:: SYSCALL_DEFINE2(foobar, struct foo __user *, uarg, size_t, usize) { int err; bool ignored_trailing; struct foo karg = {}; if (usize > PAGE_SIZE) return -E2BIG; if (usize < FOO_SIZE_VER0) return -EINVAL; // ... modify karg somehow ... err = copy_struct_to_user(uarg, usize, &karg, sizeof(karg), &ignored_trailing); if (err) return err; if (ignored_trailing) return -EMSGSIZE: // ... } There are three cases to consider: * If **usize** == **ksize**, then it's copied verbatim. * If **usize** < **ksize**, then the kernel is trying to pass userspace a newer struct than it supports. Thus we only copy the interoperable portions (**usize**) and ignore the rest (but **ignored_trailing** is set to ``true`` if any of the trailing (**ksize** - **usize**) bytes are non-zero). * If **usize** > **ksize**, then the kernel is trying to pass userspace an older struct than userspace supports. In order to make sure the unknown-to-the-kernel fields don't contain garbage values, we zero the trailing (**usize** - **ksize**) bytes. Returns (in all cases, some data may have been copied): * -EFAULT: access to userspace failed.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj0h]”hŒ Parameters”…”�”}”(hj2h²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:11: ./include/linux/uaccess.h”h´M¦hj*ubj¤)�”}”(hhh]”(j©)�”}”(hŒb``void __user *dst`` Destination address, in userspace. This buffer must be **ksize** bytes long. ”h]”(j¯)�”}”(hŒ``void __user *dst``”h]”jS)�”}”(hjOh]”hŒvoid __user *dst”…”�”}”(hjQh²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:11: ./include/linux/uaccess.h”h´M¤hjIubjÉ)�”}”(hhh]”jM)�”}”(hŒLDestination address, in userspace. This buffer must be **ksize** bytes long.”h]”(hŒ7Destination address, in userspace. This buffer must be ”…”�”}”(hjhh²hh³Nh´NubjŽ)�”}”(hŒ **ksize**”h]”hŒksize”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjhubhŒ bytes long.”…”�”}”(hjhh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M£hjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjIubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jdh´M¤hjFubj©)�”}”(hŒ3``size_t usize`` (Alleged) size of **dst** struct. ”h]”(j¯)�”}”(hŒ``size_t usize``”h]”jS)�”}”(hj›h]”hŒ size_t usize”…”�”}”(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:11: ./include/linux/uaccess.h”h´M¥hj•ubjÉ)�”}”(hhh]”jM)�”}”(hŒ!(Alleged) size of **dst** struct.”h]”(hŒ(Alleged) size of ”…”�”}”(hj´h²hh³Nh´NubjŽ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj´ubhŒ struct.”…”�”}”(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¥hjFubj©)�”}”(hŒ5``const void *src`` Source address, in kernel space. ”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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M¦hjàubjÉ)�”}”(hhh]”jM)�”}”(hŒ Source address, in kernel space.”h]”hŒ Source address, in kernel 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¦hjFubj©)�”}”(hŒ)``size_t ksize`` Size of **src** struct. ”h]”(j¯)�”}”(hŒ``size_t ksize``”h]”jS)�”}”(hjh]”hŒ size_t ksize”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M§hjubjÉ)�”}”(hhh]”jM)�”}”(hŒSize of **src** struct.”h]”(hŒSize of ”…”�”}”(hj8h²hh³Nh´NubjŽ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj8ubhŒ struct.”…”�”}”(hj8h²hh³Nh´Nubeh}”(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§hjFubj©)�”}”(hŒ—``bool *ignored_trailing`` Set to ``true`` if there was a non-zero byte in **src** that userspace cannot see because they are using an smaller struct. ”h]”(j¯)�”}”(hŒ``bool *ignored_trailing``”h]”jS)�”}”(hjjh]”hŒbool *ignored_trailing”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M©hjdubjÉ)�”}”(hhh]”jM)�”}”(hŒ{Set to ``true`` if there was a non-zero byte in **src** that userspace cannot see because they are using an smaller struct.”h]”(hŒSet to ”…”�”}”(hjƒh²hh³Nh´NubjS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjƒubhŒ! if there was a non-zero byte in ”…”�”}”(hjƒh²hh³Nh´NubjŽ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjƒubhŒD that userspace cannot see because they are using an smaller struct.”…”�”}”(hjƒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M¨hj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjdubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jh´M©hjFubeh}”(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:11: ./include/linux/uaccess.h”h´M«hj*ubjM)�”}”(hX*Copies a struct from kernel space to userspace, in a way that guarantees backwards-compatibility for struct syscall arguments (as long as future struct extensions are made such that all new fields are *appended* to the old struct, and zeroed-out new fields have the same meaning as the old struct).”h]”(hŒÉCopies a struct from kernel space to userspace, in a way that guarantees backwards-compatibility for struct syscall arguments (as long as future struct extensions are made such that all new fields are ”…”�”}”(hjàh²hh³Nh´Nubjí )�”}”(hŒ *appended*”h]”hŒappended”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jì hjàubhŒW to the old struct, and zeroed-out new fields have the same meaning as the old struct).”…”�”}”(hjàh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´Mªhj*ubjM)�”}”(hXÄSome syscalls may wish to make sure that userspace knows about everything in the struct, and if there is a non-zero value that userspce doesn't know about, they want to return an error (such as -EMSGSIZE) or have some other fallback (such as adding a "you're missing some information" flag). If **ignored_trailing** is non-``NULL``, it will be set to ``true`` if there was a non-zero byte that could not be copied to userspace (ie. was past **usize**).”h]”(hX/Some syscalls may wish to make sure that userspace knows about everything in the struct, and if there is a non-zero value that userspce doesn’t know about, they want to return an error (such as -EMSGSIZE) or have some other fallback (such as adding a “you’re missing some informationâ€� flag). If ”…”�”}”(hjh²hh³Nh´NubjŽ)�”}”(hŒ**ignored_trailing**”h]”hŒignored_trailing”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubhŒ is non-”…”�”}”(hjh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubhŒ, it will be set to ”…”�”}”(hjh²hh³Nh´NubjS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubhŒR if there was a non-zero byte that could not be copied to userspace (ie. was past ”…”�”}”(hjh²hh³Nh´NubjŽ)�”}”(hŒ **usize**”h]”hŒusize”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubhŒ).”…”�”}”(hjh²hh³Nh´Nube•h}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M°hj*ubjM)�”}”(hXWhile unconditionally returning an error in this case is the simplest solution, for maximum backward compatibility you should try to only return -EMSGSIZE if the user explicitly requested the data that couldn't be copied. Note that structure sizes can change due to header changes and simple recompilations without code changes(!), so if you care about **ignored_trailing** you probably want to make sure that any new field data is associated with a flag. Otherwise you might assume that a program knows about data it does not.”h]”(hXcWhile unconditionally returning an error in this case is the simplest solution, for maximum backward compatibility you should try to only return -EMSGSIZE if the user explicitly requested the data that couldn’t be copied. Note that structure sizes can change due to header changes and simple recompilations without code changes(!), so if you care about ”…”�”}”(hjXh²hh³Nh´NubjŽ)�”}”(hŒ**ignored_trailing**”h]”hŒignored_trailing”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjXubhŒš you probably want to make sure that any new field data is associated with a flag. Otherwise you might assume that a program knows about data it does not.”…”�”}”(hjXh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M·hj*ubjM)�”}”(hŒ‰**ksize** is just sizeof(*src), and **usize** should've been passed by userspace. The recommended usage is something like the following::”h]”(jŽ)�”}”(hŒ **ksize**”h]”hŒksize”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjyubhŒ is just sizeof(”…”�”}”(hjyh²hh³Nh´Nubjí )�”}”(hŒ*src), and **usize**”h]”hŒsrc), and **usize*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jì hjyubhŒ] should’ve been passed by userspace. The recommended usage is something like the following:”…”�”}”(hjyh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MÀhj*ubj7 )�”}”(hXêSYSCALL_DEFINE2(foobar, struct foo __user *, uarg, size_t, usize) { int err; bool ignored_trailing; struct foo karg = {}; if (usize > PAGE_SIZE) return -E2BIG; if (usize < FOO_SIZE_VER0) return -EINVAL; // ... modify karg somehow ... err = copy_struct_to_user(uarg, usize, &karg, sizeof(karg), &ignored_trailing); if (err) return err; if (ignored_trailing) return -EMSGSIZE: // ... }”h]”hXêSYSCALL_DEFINE2(foobar, struct foo __user *, uarg, size_t, usize) { int err; bool ignored_trailing; struct foo karg = {}; if (usize > PAGE_SIZE) return -E2BIG; if (usize < FOO_SIZE_VER0) return -EINVAL; // ... modify karg somehow ... err = copy_struct_to_user(uarg, usize, &karg, sizeof(karg), &ignored_trailing); if (err) return err; if (ignored_trailing) return -EMSGSIZE: // ... }”…”�”}”hj¨sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j6 h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MÃhj*ubj¤)�”}”(hhh]”(j©)�”}”(hXˆThere are three cases to consider: * If **usize** == **ksize**, then it's copied verbatim. * If **usize** < **ksize**, then the kernel is trying to pass userspace a newer struct than it supports. Thus we only copy the interoperable portions (**usize**) and ignore the rest (but **ignored_trailing** is set to ``true`` if any of the trailing (**ksize** - **usize**) bytes are non-zero). * If **usize** > **ksize**, then the kernel is trying to pass userspace an older struct than userspace supports. In order to make sure the unknown-to-the-kernel fields don't contain garbage values, we zero the trailing (**usize** - **ksize**) bytes. ”h]”(j¯)�”}”(hŒ"There are three cases to consider:”h]”hŒ"There are three cases to consider:”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MãhjºubjÉ)�”}”(hhh]”j^)�”}”(hhh]”(jc)�”}”(hŒ5If **usize** == **ksize**, then it's copied verbatim.”h]”jM)�”}”(hjÕh]”(hŒIf ”…”�”}”(hj×h²hh³Nh´NubjŽ)�”}”(hŒ **usize**”h]”hŒusize”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj×ubhŒ == ”…”�”}”(hj×h²hh³Nh´NubjŽ)�”}”(hŒ **ksize**”h]”hŒksize”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj×ubhŒ, then it’s copied verbatim.”…”�”}”(hj×h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MÛhjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjÐubjc)�”}”(hX$If **usize** < **ksize**, then the kernel is trying to pass userspace a newer struct than it supports. Thus we only copy the interoperable portions (**usize**) and ignore the rest (but **ignored_trailing** is set to ``true`` if any of the trailing (**ksize** - **usize**) bytes are non-zero).”h]”jM)�”}”(hX$If **usize** < **ksize**, then the kernel is trying to pass userspace a newer struct than it supports. Thus we only copy the interoperable portions (**usize**) and ignore the rest (but **ignored_trailing** is set to ``true`` if any of the trailing (**ksize** - **usize**) bytes are non-zero).”h]”(hŒIf ”…”�”}”(hjh²hh³Nh´NubjŽ)�”}”(hŒ **usize**”h]”hŒusize”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubhŒ < ”…”�”}”(hjh²hh³Nh´NubjŽ)�”}”(hŒ **ksize**”h]”hŒksize”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubhŒ}, then the kernel is trying to pass userspace a newer struct than it supports. Thus we only copy the interoperable portions (”…”�”}”(hjh²hh³Nh´NubjŽ)�”}”(hŒ **usize**”h]”hŒusize”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubhŒ) and ignore the rest (but ”…”�”}”(hjh²hh³Nh´NubjŽ)�”}”(hŒ**ignored_trailing**”h]”hŒignored_trailing”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubhŒ is set to ”…”�”}”(hjh²hh³Nh´NubjS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubhŒ if any of the trailing (”…”�”}”(hjh²hh³Nh´NubjŽ)�”}”(hŒ **ksize**”h]”hŒksize”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubhŒ - ”…”�”}”(hjh²hh³Nh´NubjŽ)�”}”(hŒ **usize**”h]”hŒusize”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubhŒ) bytes are non-zero).”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MÜhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjÐubjc)�”}”(hŒøIf **usize** > **ksize**, then the kernel is trying to pass userspace an older struct than userspace supports. In order to make sure the unknown-to-the-kernel fields don't contain garbage values, we zero the trailing (**usize** - **ksize**) bytes. ”h]”jM)�”}”(hŒ÷If **usize** > **ksize**, then the kernel is trying to pass userspace an older struct than userspace supports. In order to make sure the unknown-to-the-kernel fields don't contain garbage values, we zero the trailing (**usize** - **ksize**) bytes.”h]”(hŒIf ”…”�”}”(hjªh²hh³Nh´NubjŽ)�”}”(hŒ **usize**”h]”hŒusize”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjªubhŒ > ”…”�”}”(hjªh²hh³Nh´NubjŽ)�”}”(hŒ **ksize**”h]”hŒksize”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjªubhŒÄ, then the kernel is trying to pass userspace an older struct than userspace supports. In order to make sure the unknown-to-the-kernel fields don’t contain garbage values, we zero the trailing (”…”�”}”(hjªh²hh³Nh´NubjŽ)�”}”(hŒ **usize**”h]”hŒusize”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjªubhŒ - ”…”�”}”(hjªh²hh³Nh´NubjŽ)�”}”(hŒ **ksize**”h]”hŒksize”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjªubhŒ) bytes.”…”�”}”(hjªh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´Màhj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjÐubeh}”(h]”h ]”h"]”h$]”h&]”j‚juuh1j]h³jh´MÛhjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjºubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÌh´Mãhj·ubj©)�”}”(hŒ^Returns (in all cases, some data may have been copied): * -EFAULT: access to userspace failed.”h]”(j¯)�”}”(hŒ7Returns (in all cases, some data may have been copied):”h]”hŒ7Returns (in all cases, some data may have been copied):”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MåhjubjÉ)�”}”(hhh]”j^)�”}”(hhh]”jc)�”}”(hŒ$-EFAULT: access to userspace failed.”h]”jM)�”}”(hj4h]”hŒ$-EFAULT: access to userspace failed.”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´Mæhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj/ubah}”(h]”h ]”h"]”h$]”h&]”j‚juuh1j]h³jCh´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£hj*ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒget_kernel_nofault (C macro)”Œc.get_kernel_nofault”hNt”auh1hÜhhËh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒget_kernel_nofault”h]”hù)�”}”(hŒget_kernel_nofault”h]”hÿ)�”}”(hŒget_kernel_nofault”h]”j)�”}”(hj|h]”hŒget_kernel_nofault”…”�”}”(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:11: ./include/linux/uaccess.h”h´M�ubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjzh²hh³j™h´M�ubah}”(h]”juah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j™h´M�hjwh²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hjwh²hh³j™h´M�ubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGj²jHj²jI‰jJ‰jK‰uh1híh²hhhËh³Nh´NubjM)�”}”(hŒ!``get_kernel_nofault (val, ptr)``”h]”jS)�”}”(hj¸h]”hŒget_kernel_nofault (val, ptr)”…”�”}”(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:11: ./include/linux/uaccess.h”h´MƒhhËh²hubji)�”}”(hŒ'safely attempt to read from a location ”h]”jM)�”}”(hŒ&safely attempt to read from a location”h]”hŒ&safely attempt to read from a location”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M�hjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jàh´M�hhËh²hubj„)�”}”(hŒ…**Parameters** ``val`` read into this variable ``ptr`` address to read from **Description** Returns 0 on success, or -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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M…hjçubj¤)�”}”(hhh]”(j©)�”}”(hŒ ``val`` read into this variable ”h]”(j¯)�”}”(hŒ``val``”h]”jS)�”}”(hj h]”hŒval”…”�”}”(hjh²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:11: ./include/linux/uaccess.h”h´M‚hjubjÉ)�”}”(hhh]”jM)�”}”(hŒread into this variable”h]”hŒread into this variable”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j!h´M‚hj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j!h´M‚hjubj©)�”}”(hŒ``ptr`` address to read from ”h]”(j¯)�”}”(hŒ``ptr``”h]”jS)�”}”(hjEh]”hŒptr”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´Mƒhj?ubjÉ)�”}”(hhh]”jM)�”}”(hŒaddress to read from”h]”hŒaddress to read from”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jZh´Mƒhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jZh´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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M…hjçubjM)�”}”(hŒ!Returns 0 on success, or -EFAULT.”h]”hŒ!Returns 0 on success, or -EFAULT.”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M„hjçubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$__scoped_user_access_begin (C macro)”Œc.__scoped_user_access_begin”hNt”auh1hÜhhËh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ__scoped_user_access_begin”h]”hù)�”}”(hŒ__scoped_user_access_begin”h]”hÿ)�”}”(hŒ__scoped_user_access_begin”h]”j)�”}”(hj¿h]”hŒ__scoped_user_access_begin”…”�”}”(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:11: ./include/linux/uaccess.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²hhhËh³Nh´NubjM)�”}”(hŒ7``__scoped_user_access_begin (mode, uptr, size, elbl)``”h]”jS)�”}”(hjûh]”hŒ3__scoped_user_access_begin (mode, uptr, size, elbl)”…”�”}”(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:11: ./include/linux/uaccess.h”h´MæhhËh²hubji)�”}”(hŒStart a scoped user access ”h]”jM)�”}”(hŒStart a scoped user access”h]”hŒStart a scoped user access”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´Mähjubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j#h´MähhËh²hubj„)�”}”(hX1**Parameters** ``mode`` The mode of the access class (read, write, rw) ``uptr`` The pointer to access user space memory ``size`` Size of the access ``elbl`` Error label to goto when the access region is rejected **Description** Internal helper for __scoped_user_access(). Don't use directly.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj0h]”hŒ Parameters”…”�”}”(hj2h²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:11: ./include/linux/uaccess.h”h´Mèhj*ubj¤)�”}”(hhh]”(j©)�”}”(hŒ8``mode`` The mode of the access class (read, write, rw) ”h]”(j¯)�”}”(hŒ``mode``”h]”jS)�”}”(hjOh]”hŒmode”…”�”}”(hjQh²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:11: ./include/linux/uaccess.h”h´MåhjIubjÉ)�”}”(hhh]”jM)�”}”(hŒ.The mode of the access class (read, write, rw)”h]”hŒ.The mode of the access class (read, write, rw)”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jdh´Måhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjIubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jdh´MåhjFubj©)�”}”(hŒ1``uptr`` The pointer to access user space memory ”h]”(j¯)�”}”(hŒ``uptr``”h]”jS)�”}”(hjˆh]”hŒuptr”…”�”}”(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:11: ./include/linux/uaccess.h”h´Mæhj‚ubjÉ)�”}”(hhh]”jM)�”}”(hŒ'The pointer to access user space memory”h]”hŒ'The pointer to access user space 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æhjFubj©)�”}”(hŒ``size`` Size of the access ”h]”(j¯)�”}”(hŒ``size``”h]”jS)�”}”(hjÁh]”hŒsize”…”�”}”(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:11: ./include/linux/uaccess.h”h´Mçhj»ubjÉ)�”}”(hhh]”jM)�”}”(hŒSize of the access”h]”hŒSize of the 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çhjFubj©)�”}”(hŒ@``elbl`` Error label to goto when the access region is rejected ”h]”(j¯)�”}”(hŒ``elbl``”h]”jS)�”}”(hjúh]”hŒelbl”…”�”}”(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:11: ./include/linux/uaccess.h”h´MèhjôubjÉ)�”}”(hhh]”jM)�”}”(hŒ6Error label to goto when the access region is rejected”h]”hŒ6Error label to goto when the access region is rejected”…”�”}”(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èhjFubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj*ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj5h]”hŒ Description”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´Mêhj*ubjM)�”}”(hŒ?Internal helper for __scoped_user_access(). Don't use directly.”h]”hŒAInternal helper for __scoped_user_access(). Don’t use directly.”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´Méhj*ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ__scoped_user_access (C macro)”Œc.__scoped_user_access”hNt”auh1hÜhhËh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ__scoped_user_access”h]”hù)�”}”(hŒ__scoped_user_access”h]”hÿ)�”}”(hŒ__scoped_user_access”h]”j)�”}”(hjth]”hŒ__scoped_user_access”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjzubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjvh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´Mûubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjrh²hh³j‘h´Mûubah}”(h]”jmah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j‘h´Mûhjoh²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hjoh²hh³j‘h´Mûubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGjªjHjªjI‰jJ‰jK‰uh1híh²hhhËh³Nh´NubjM)�”}”(hŒ1``__scoped_user_access (mode, uptr, size, elbl)``”h]”jS)�”}”(hj°h]”hŒ-__scoped_user_access (mode, uptr, size, elbl)”…”�”}”(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:11: ./include/linux/uaccess.h”h´MýhhËh²hubji)�”}”(hŒOpen a scope for user access ”h]”jM)�”}”(hŒOpen a scope for user access”h]”hŒOpen a scope for user access”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MûhjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jØh´MûhhËh²hubj„)�”}”(hXÞ**Parameters** ``mode`` The mode of the access class (read, write, rw) ``uptr`` The pointer to access user space memory ``size`` Size of the access ``elbl`` Error label to goto when the access region is rejected. It must be placed outside the scope **Description** If the user access function inside the scope requires a fault label, it can use **elbl** or a different label outside the scope, which requires that user access which is implemented with ASM GOTO has been properly wrapped. See unsafe_get_user() for reference:: scoped_user_rw_access(ptr, efault) { unsafe_get_user(rval, &ptr->rval, efault); unsafe_put_user(wval, &ptr->wval, efault); } return 0; efault: return -EFAULT; The scope is internally implemented as a autoterminating nested for() loop, which can be left with 'return', 'break' and 'goto' at any point. When the scope is left user_##**_mode**##_access_end() is automatically invoked. When the architecture supports masked user access and the access region which is determined by **uptr** and **size** is not a valid user space address, i.e. < TASK_SIZE, the scope sets the pointer to a faulting user space address and does not terminate early. This optimizes for the good case and lets the performance uncritical bad case go through the fault. The eventual modification of the pointer is limited to the scope. Outside of the scope the original pointer value is unmodified, so that the original pointer value is available for diagnostic purposes in an out of scope fault path. Nesting scoped user access into a user access scope is invalid and fails the build. Nesting into other guards, e.g. pagefault is safe. The masked variant does not check the size of the access and relies on a mapping hole (e.g. guard page) to catch an out of range pointer, the first access to user memory inside the scope has to be within **uptr** ... **uptr** + PAGE_SIZE - 1 Don't use directly. Use scoped_masked_user_$MODE_access() 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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´Mÿhjßubj¤)�”}”(hhh]”(j©)�”}”(hŒ8``mode`` The mode of the access class (read, write, rw) ”h]”(j¯)�”}”(hŒ``mode``”h]”jS)�”}”(hjh]”hŒmode”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MühjþubjÉ)�”}”(hhh]”jM)�”}”(hŒ.The mode of the access class (read, write, rw)”h]”hŒ.The mode of the access class (read, write, rw)”…”�”}”(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Œ1``uptr`` The pointer to access user space memory ”h]”(j¯)�”}”(hŒ``uptr``”h]”jS)�”}”(hj=h]”hŒuptr”…”�”}”(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:11: ./include/linux/uaccess.h”h´Mýhj7ubjÉ)�”}”(hhh]”jM)�”}”(hŒ'The pointer to access user space memory”h]”hŒ'The pointer to access user space memory”…”�”}”(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Œ``size`` Size of the access ”h]”(j¯)�”}”(hŒ``size``”h]”jS)�”}”(hjvh]”hŒsize”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjtubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MþhjpubjÉ)�”}”(hhh]”jM)�”}”(hŒSize of the access”h]”hŒSize of the access”…”�”}”(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ûubj©)�”}”(hŒe``elbl`` Error label to goto when the access region is rejected. It must be placed outside the scope ”h]”(j¯)�”}”(hŒ``elbl``”h]”jS)�”}”(hj¯h]”hŒelbl”…”�”}”(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:11: ./include/linux/uaccess.h”h´Mhj©ubjÉ)�”}”(hhh]”jM)�”}”(hŒ[Error label to goto when the access region is rejected. It must be placed outside the scope”h]”hŒ[Error label to goto when the access region is rejected. It must be placed outside the scope”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MÿhjÅ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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MhjßubjM)�”}”(hXIf the user access function inside the scope requires a fault label, it can use **elbl** or a different label outside the scope, which requires that user access which is implemented with ASM GOTO has been properly wrapped. See unsafe_get_user() for reference::”h]”(hŒPIf the user access function inside the scope requires a fault label, it can use ”…”�”}”(hjh²hh³Nh´NubjŽ)�”}”(hŒ**elbl**”h]”hŒelbl”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubhŒ« or a different label outside the scope, which requires that user access which is implemented with ASM GOTO has been properly wrapped. See unsafe_get_user() for reference:”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´Mhjßubj7 )�”}”(hŒÆ scoped_user_rw_access(ptr, efault) { unsafe_get_user(rval, &ptr->rval, efault); unsafe_put_user(wval, &ptr->wval, efault); } return 0; efault: return -EFAULT;”h]”hŒÆ scoped_user_rw_access(ptr, efault) { unsafe_get_user(rval, &ptr->rval, efault); unsafe_put_user(wval, &ptr->wval, efault); } return 0; efault: return -EFAULT;”…”�”}”hj"sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j6 h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MhjßubjM)�”}”(hŒ�The scope is internally implemented as a autoterminating nested for() loop, which can be left with 'return', 'break' and 'goto' at any point.”h]”hŒ™The scope is internally implemented as a autoterminating nested for() loop, which can be left with ‘return’, ‘break’ and ‘goto’ at any point.”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MhjßubjM)�”}”(hŒPWhen the scope is left user_##**_mode**##_access_end() is automatically invoked.”h]”hŒPWhen the scope is left user_##**_mode**##_access_end() is automatically invoked.”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MhjßubjM)�”}”(hXgWhen the architecture supports masked user access and the access region which is determined by **uptr** and **size** is not a valid user space address, i.e. < TASK_SIZE, the scope sets the pointer to a faulting user space address and does not terminate early. This optimizes for the good case and lets the performance uncritical bad case go through the fault.”h]”(hŒ_When the architecture supports masked user access and the access region which is determined by ”…”�”}”(hjOh²hh³Nh´NubjŽ)�”}”(hŒ**uptr**”h]”hŒuptr”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjOubhŒ and ”…”�”}”(hjOh²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjOubhŒó is not a valid user space address, i.e. < TASK_SIZE, the scope sets the pointer to a faulting user space address and does not terminate early. This optimizes for the good case and lets the performance uncritical bad case go through the fault.”…”�”}”(hjOh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MhjßubjM)�”}”(hŒçThe eventual modification of the pointer is limited to the scope. Outside of the scope the original pointer value is unmodified, so that the original pointer value is available for diagnostic purposes in an out of scope fault path.”h]”hŒçThe eventual modification of the pointer is limited to the scope. Outside of the scope the original pointer value is unmodified, so that the original pointer value is available for diagnostic purposes in an out of scope fault path.”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MhjßubjM)�”}”(hŒ†Nesting scoped user access into a user access scope is invalid and fails the build. Nesting into other guards, e.g. pagefault is safe.”h]”hŒ†Nesting scoped user access into a user access scope is invalid and fails the build. Nesting into other guards, e.g. pagefault is safe.”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M hjßubjM)�”}”(hŒñThe masked variant does not check the size of the access and relies on a mapping hole (e.g. guard page) to catch an out of range pointer, the first access to user memory inside the scope has to be within **uptr** ... **uptr** + PAGE_SIZE - 1”h]”(hŒÌThe masked variant does not check the size of the access and relies on a mapping hole (e.g. guard page) to catch an out of range pointer, the first access to user memory inside the scope has to be within ”…”�”}”(hj h²hh³Nh´NubjŽ)�”}”(hŒ**uptr**”h]”hŒuptr”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ubhŒ ... ”…”�”}”(hj h²hh³Nh´NubjŽ)�”}”(hŒ**uptr**”h]”hŒuptr”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ubhŒ + PAGE_SIZE - 1”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M#hjßubjM)�”}”(hŒBDon't use directly. Use scoped_masked_user_$MODE_access() instead.”h]”hŒDDon’t use directly. Use scoped_masked_user_$MODE_access() instead.”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M(hjßubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ&scoped_user_read_access_size (C macro)”Œc.scoped_user_read_access_size”hNt”auh1hÜhhËh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒscoped_user_read_access_size”h]”hù)�”}”(hŒscoped_user_read_access_size”h]”hÿ)�”}”(hŒscoped_user_read_access_size”h]”j)�”}”(hjüh]”hŒscoped_user_read_access_size”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjþh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M4ubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjúh²hh³jh´M4ubah}”(h]”jõah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jh´M4hj÷h²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hj÷h²hh³jh´M4ubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGj2jHj2jI‰jJ‰jK‰uh1híh²hhhËh³Nh´NubjM)�”}”(hŒ3``scoped_user_read_access_size (usrc, size, elbl)``”h]”jS)�”}”(hj8h]”hŒ/scoped_user_read_access_size (usrc, size, elbl)”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M6hhËh²hubji)�”}”(hŒ0Start a scoped user read access with given size ”h]”jM)�”}”(hŒ/Start a scoped user read access with given size”h]”hŒ/Start a scoped user read access with given size”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M4hjNubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j`h´M4hhËh²hubj„)�”}”(hX**Parameters** ``usrc`` Pointer to the user space address to read from ``size`` Size of the access starting from **usrc** ``elbl`` Error label to goto when the access region is rejected **Description** For further information see __scoped_user_access() above.”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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M8hjgubj¤)�”}”(hhh]”(j©)�”}”(hŒ8``usrc`` Pointer to the user space address to read from ”h]”(j¯)�”}”(hŒ``usrc``”h]”jS)�”}”(hjŒh]”hŒusrc”…”�”}”(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:11: ./include/linux/uaccess.h”h´M5hj†ubjÉ)�”}”(hhh]”jM)�”}”(hŒ.Pointer to the user space address to read from”h]”hŒ.Pointer to the user space address to read from”…”�”}”(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Œ3``size`` Size of the access starting from **usrc** ”h]”(j¯)�”}”(hŒ``size``”h]”jS)�”}”(hjÅh]”hŒsize”…”�”}”(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:11: ./include/linux/uaccess.h”h´M6hj¿ubjÉ)�”}”(hhh]”jM)�”}”(hŒ)Size of the access starting from **usrc**”h]”(hŒ!Size of the access starting from ”…”�”}”(hjÞh²hh³Nh´NubjŽ)�”}”(hŒ**usrc**”h]”hŒusrc”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÚh´M6hjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÚh´M6hjƒubj©)�”}”(hŒ@``elbl`` Error label to goto when the access region is rejected ”h]”(j¯)�”}”(hŒ``elbl``”h]”jS)�”}”(hj h]”hŒelbl”…”�”}”(hjh²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:11: ./include/linux/uaccess.h”h´M7hjubjÉ)�”}”(hhh]”jM)�”}”(hŒ6Error label to goto when the access region is rejected”h]”hŒ6Error label to goto when the access region is rejected”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j!h´M7hj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j!h´M7hjƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjgubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjGh]”hŒ Description”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjEubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M9hjgubjM)�”}”(hŒ9For further information see __scoped_user_access() above.”h]”hŒ9For further information see __scoped_user_access() above.”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M8hjgubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!scoped_user_read_access (C macro)”Œc.scoped_user_read_access”hNt”auh1hÜhhËh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒscoped_user_read_access”h]”hù)�”}”(hŒscoped_user_read_access”h]”hÿ)�”}”(hŒscoped_user_read_access”h]”j)�”}”(hj†h]”hŒscoped_user_read_access”…”�”}”(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:11: ./include/linux/uaccess.h”h´M?ubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj„h²hh³j£h´M?ubah}”(h]”jah ]”(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²hhhËh³Nh´NubjM)�”}”(hŒ(``scoped_user_read_access (usrc, elbl)``”h]”jS)�”}”(hjÂh]”hŒ$scoped_user_read_access (usrc, elbl)”…”�”}”(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:11: ./include/linux/uaccess.h”h´MAhhËh²hubji)�”}”(hŒ Start a scoped user read access ”h]”jM)�”}”(hŒStart a scoped user read access”h]”hŒStart a scoped user read access”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M?hjØubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jêh´M?hhËh²hubj„)�”}”(hX-**Parameters** ``usrc`` Pointer to the user space address to read from ``elbl`` Error label to goto when the access region is rejected **Description** The size of the access starting from **usrc** is determined via sizeof(***usrc**)). For further information see __scoped_user_access() above.”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:11: ./include/linux/uaccess.h”h´MChjñubj¤)�”}”(hhh]”(j©)�”}”(hŒ8``usrc`` Pointer to the user space address to read from ”h]”(j¯)�”}”(hŒ``usrc``”h]”jS)�”}”(hjh]”hŒusrc”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M@hjubjÉ)�”}”(hhh]”jM)�”}”(hŒ.Pointer to the user space address to read from”h]”hŒ.Pointer to the user space address 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Èhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j+h´M@hj ubj©)�”}”(hŒ@``elbl`` Error label to goto when the access region is rejected ”h]”(j¯)�”}”(hŒ``elbl``”h]”jS)�”}”(hjOh]”hŒelbl”…”�”}”(hjQh²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:11: ./include/linux/uaccess.h”h´MAhjIubjÉ)�”}”(hhh]”jM)�”}”(hŒ6Error label to goto when the access region is rejected”h]”hŒ6Error label to goto when the access region is rejected”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jdh´MAhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjIubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jdh´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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MChjñubjM)�”}”(hŒSThe size of the access starting from **usrc** is determined via sizeof(***usrc**)).”h]”(hŒ%The size of the access starting from ”…”�”}”(hj h²hh³Nh´NubjŽ)�”}”(hŒ**usrc**”h]”hŒusrc”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ubhŒ is determined via sizeof(”…”�”}”(hj h²hh³Nh´NubjŽ)�”}”(hŒ ***usrc**”h]”hŒ*usrc”…”�”}”(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:11: ./include/linux/uaccess.h”h´MBhjñubjM)�”}”(hŒ9For further information see __scoped_user_access() above.”h]”hŒ9For further information see __scoped_user_access() above.”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MDhjñubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ'scoped_user_write_access_size (C macro)”Œc.scoped_user_write_access_size”hNt”auh1hÜhhËh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒscoped_user_write_access_size”h]”hù)�”}”(hŒscoped_user_write_access_size”h]”hÿ)�”}”(hŒscoped_user_write_access_size”h]”j)�”}”(hjüh]”hŒscoped_user_write_access_size”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjþh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MKubah}”(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]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hj÷h²hh³jh´MKubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGj2jHj2jI‰jJ‰jK‰uh1híh²hhhËh³Nh´NubjM)�”}”(hŒ4``scoped_user_write_access_size (udst, size, elbl)``”h]”jS)�”}”(hj8h]”hŒ0scoped_user_write_access_size (udst, size, elbl)”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MMhhËh²hubji)�”}”(hŒ1Start a scoped user write access with given size ”h]”jM)�”}”(hŒ0Start a scoped user write access with given size”h]”hŒ0Start a scoped user write access with given size”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MKhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j`h´MKhhËh²hubj„)�”}”(hX **Parameters** ``udst`` Pointer to the user space address to write to ``size`` Size of the access starting from **udst** ``elbl`` Error label to goto when the access region is rejected **Description** For further information see __scoped_user_access() above.”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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MOhjgubj¤)�”}”(hhh]”(j©)�”}”(hŒ7``udst`` Pointer to the user space address to write to ”h]”(j¯)�”}”(hŒ``udst``”h]”jS)�”}”(hjŒh]”hŒudst”…”�”}”(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:11: ./include/linux/uaccess.h”h´MLhj†ubjÉ)�”}”(hhh]”jM)�”}”(hŒ-Pointer to the user space address to write to”h]”hŒ-Pointer to the user space address to write to”…”�”}”(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Œ3``size`` Size of the access starting from **udst** ”h]”(j¯)�”}”(hŒ``size``”h]”jS)�”}”(hjÅh]”hŒsize”…”�”}”(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:11: ./include/linux/uaccess.h”h´MMhj¿ubjÉ)�”}”(hhh]”jM)�”}”(hŒ)Size of the access starting from **udst**”h]”(hŒ!Size of the access starting from ”…”�”}”(hjÞh²hh³Nh´NubjŽ)�”}”(hŒ**udst**”h]”hŒudst”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÞubeh}”(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Œ@``elbl`` Error label to goto when the access region is rejected ”h]”(j¯)�”}”(hŒ``elbl``”h]”jS)�”}”(hj h]”hŒelbl”…”�”}”(hjh²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:11: ./include/linux/uaccess.h”h´MNhjubjÉ)�”}”(hhh]”jM)�”}”(hŒ6Error label to goto when the access region is rejected”h]”hŒ6Error label to goto when the access region is rejected”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j!h´MNhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j!h´MNhjƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjgubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjGh]”hŒ Description”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjEubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MPhjgubjM)�”}”(hŒ9For further information see __scoped_user_access() above.”h]”hŒ9For further information see __scoped_user_access() above.”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MOhjgubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"scoped_user_write_access (C macro)”Œc.scoped_user_write_access”hNt”auh1hÜhhËh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒscoped_user_write_access”h]”hù)�”}”(hŒscoped_user_write_access”h]”hÿ)�”}”(hŒscoped_user_write_access”h]”j)�”}”(hj†h]”hŒscoped_user_write_access”…”�”}”(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:11: ./include/linux/uaccess.h”h´MVubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj„h²hh³j£h´MVubah}”(h]”jah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j£h´MVhj�h²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hj�h²hh³j£h´MVubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGj¼jHj¼jI‰jJ‰jK‰uh1híh²hhhËh³Nh´NubjM)�”}”(hŒ)``scoped_user_write_access (udst, elbl)``”h]”jS)�”}”(hjÂh]”hŒ%scoped_user_write_access (udst, elbl)”…”�”}”(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:11: ./include/linux/uaccess.h”h´MXhhËh²hubji)�”}”(hŒ!Start a scoped user write access ”h]”jM)�”}”(hŒ Start a scoped user write access”h]”hŒ Start a scoped user write access”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MVhjØubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jêh´MVhhËh²hubj„)�”}”(hX,**Parameters** ``udst`` Pointer to the user space address to write to ``elbl`` Error label to goto when the access region is rejected **Description** The size of the access starting from **udst** is determined via sizeof(***udst**)). For further information see __scoped_user_access() above.”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:11: ./include/linux/uaccess.h”h´MZhjñubj¤)�”}”(hhh]”(j©)�”}”(hŒ7``udst`` Pointer to the user space address to write to ”h]”(j¯)�”}”(hŒ``udst``”h]”jS)�”}”(hj h]”hŒudst”…”�”}”(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:11: ./include/linux/uaccess.h”h´MWhj ubjÉ)�”}”(hhh]”jM)�”}”(hŒ-Pointer to the user space address to write to”h]”hŒ-Pointer to the user space address to write to”…”�”}”(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´MWhj ubj©)�”}”(hŒ@``elbl`` Error label to goto when the access region is rejected ”h]”(j¯)�”}”(hŒ``elbl``”h]”jS)�”}”(hjO h]”hŒelbl”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjM ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MXhjI ubjÉ)�”}”(hhh]”jM)�”}”(hŒ6Error label to goto when the access region is rejected”h]”hŒ6Error label to goto when the access region is rejected”…”�”}”(hjh h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jd h´MXhje ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjI ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jd h´MXhj 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:11: ./include/linux/uaccess.h”h´MZhjñubjM)�”}”(hŒSThe size of the access starting from **udst** is determined via sizeof(***udst**)).”h]”(hŒ%The size of the access starting from ”…”�”}”(hj  h²hh³Nh´NubjŽ)�”}”(hŒ**udst**”h]”hŒudst”…”�”}”(hj¨ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj  ubhŒ is determined via sizeof(”…”�”}”(hj  h²hh³Nh´NubjŽ)�”}”(hŒ ***udst**”h]”hŒ*udst”…”�”}”(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:11: ./include/linux/uaccess.h”h´MYhjñubjM)�”}”(hŒ9For further information see __scoped_user_access() above.”h]”hŒ9For further information see __scoped_user_access() above.”…”�”}”(hjÓ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M[hjñubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$scoped_user_rw_access_size (C macro)”Œc.scoped_user_rw_access_size”hNt”auh1hÜhhËh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒscoped_user_rw_access_size”h]”hù)�”}”(hŒscoped_user_rw_access_size”h]”hÿ)�”}”(hŒscoped_user_rw_access_size”h]”j)�”}”(hjü h]”hŒscoped_user_rw_access_size”…”�”}”(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:11: ./include/linux/uaccess.h”h´Mbubah}”(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]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hj÷ h²hh³j!h´Mbubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGj2!jHj2!jI‰jJ‰jK‰uh1híh²hhhËh³Nh´NubjM)�”}”(hŒ1``scoped_user_rw_access_size (uptr, size, elbl)``”h]”jS)�”}”(hj8!h]”hŒ-scoped_user_rw_access_size (uptr, size, elbl)”…”�”}”(hj:!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj6!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MdhhËh²hubji)�”}”(hŒ6Start a scoped user read/write access with given size ”h]”jM)�”}”(hŒ5Start a scoped user read/write access with given size”h]”hŒ5Start a scoped user read/write access with given size”…”�”}”(hjR!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MbhjN!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j`!h´MbhhËh²hubj„)�”}”(hX**Parameters** ``uptr`` Pointer to the user space address to read from and write to ``size`` Size of the access starting from **uptr** ``elbl`` Error label to goto when the access region is rejected **Description** For further information see __scoped_user_access() above.”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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´Mfhjg!ubj¤)�”}”(hhh]”(j©)�”}”(hŒE``uptr`` Pointer to the user space address to read from and write to ”h]”(j¯)�”}”(hŒ``uptr``”h]”jS)�”}”(hjŒ!h]”hŒuptr”…”�”}”(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:11: ./include/linux/uaccess.h”h´Mchj†!ubjÉ)�”}”(hhh]”jM)�”}”(hŒ;Pointer to the user space address to read from and write to”h]”hŒ;Pointer to the user space address to read from and write to”…”�”}”(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Œ3``size`` Size of the access starting from **uptr** ”h]”(j¯)�”}”(hŒ``size``”h]”jS)�”}”(hjÅ!h]”hŒsize”…”�”}”(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:11: ./include/linux/uaccess.h”h´Mdhj¿!ubjÉ)�”}”(hhh]”jM)�”}”(hŒ)Size of the access starting from **uptr**”h]”(hŒ!Size of the access starting from ”…”�”}”(hjÞ!h²hh³Nh´NubjŽ)�”}”(hŒ**uptr**”h]”hŒuptr”…”�”}”(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Œ@``elbl`` Error label to goto when the access region is rejected ”h]”(j¯)�”}”(hŒ``elbl``”h]”jS)�”}”(hj "h]”hŒelbl”…”�”}”(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:11: ./include/linux/uaccess.h”h´Mehj"ubjÉ)�”}”(hhh]”jM)�”}”(hŒ6Error label to goto when the access region is rejected”h]”hŒ6Error label to goto when the access region is rejected”…”�”}”(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ƒ!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjg!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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´Mghjg!ubjM)�”}”(hŒ9For further information see __scoped_user_access() above.”h]”hŒ9For further information see __scoped_user_access() above.”…”�”}”(hj]"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´Mfhjg!ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒscoped_user_rw_access (C macro)”Œc.scoped_user_rw_access”hNt”auh1hÜhhËh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒscoped_user_rw_access”h]”hù)�”}”(hŒscoped_user_rw_access”h]”hÿ)�”}”(hŒscoped_user_rw_access”h]”j)�”}”(hj†"h]”hŒscoped_user_rw_access”…”�”}”(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:11: ./include/linux/uaccess.h”h´Mmubah}”(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]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hj�"h²hh³j£"h´Mmubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGj¼"jHj¼"jI‰jJ‰jK‰uh1híh²hhhËh³Nh´NubjM)�”}”(hŒ&``scoped_user_rw_access (uptr, elbl)``”h]”jS)�”}”(hjÂ"h]”hŒ"scoped_user_rw_access (uptr, elbl)”…”�”}”(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:11: ./include/linux/uaccess.h”h´MohhËh²hubji)�”}”(hŒ&Start a scoped user read/write access ”h]”jM)�”}”(hŒ%Start a scoped user read/write access”h]”hŒ%Start a scoped user read/write access”…”�”}”(hjÜ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MmhjØ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jê"h´MmhhËh²hubj„)�”}”(hX:**Parameters** ``uptr`` Pointer to the user space address to read from and write to ``elbl`` Error label to goto when the access region is rejected **Description** The size of the access starting from **uptr** is determined via sizeof(***uptr**)). For further information see __scoped_user_access() above.”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:11: ./include/linux/uaccess.h”h´Mqhjñ"ubj¤)�”}”(hhh]”(j©)�”}”(hŒE``uptr`` Pointer to the user space address to read from and write to ”h]”(j¯)�”}”(hŒ``uptr``”h]”jS)�”}”(hj#h]”hŒuptr”…”�”}”(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:11: ./include/linux/uaccess.h”h´Mnhj#ubjÉ)�”}”(hhh]”jM)�”}”(hŒ;Pointer to the user space address to read from and write to”h]”hŒ;Pointer to the user space address to read from and write to”…”�”}”(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Œ@``elbl`` Error label to goto when the access region is rejected ”h]”(j¯)�”}”(hŒ``elbl``”h]”jS)�”}”(hjO#h]”hŒelbl”…”�”}”(hjQ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjM#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MohjI#ubjÉ)�”}”(hhh]”jM)�”}”(hŒ6Error label to goto when the access region is rejected”h]”hŒ6Error label to goto when the access region is rejected”…”�”}”(hjh#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jd#h´Mohje#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjI#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jd#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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´Mqhjñ"ubjM)�”}”(hŒSThe size of the access starting from **uptr** is determined via sizeof(***uptr**)).”h]”(hŒ%The size of the access starting from ”…”�”}”(hj #h²hh³Nh´NubjŽ)�”}”(hŒ**uptr**”h]”hŒuptr”…”�”}”(hj¨#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj #ubhŒ is determined via sizeof(”…”�”}”(hj #h²hh³Nh´NubjŽ)�”}”(hŒ ***uptr**”h]”hŒ*uptr”…”�”}”(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:11: ./include/linux/uaccess.h”h´Mphjñ"ubjM)�”}”(hŒ9For further information see __scoped_user_access() above.”h]”hŒ9For further information see __scoped_user_access() above.”…”�”}”(hjÓ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´Mrhjñ"ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒget_user_inline (C macro)”Œc.get_user_inline”hNt”auh1hÜhhËh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒget_user_inline”h]”hù)�”}”(hŒget_user_inline”h]”hÿ)�”}”(hŒget_user_inline”h]”j)�”}”(hjü#h]”hŒget_user_inline”…”�”}”(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:11: ./include/linux/uaccess.h”h´Myubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjú#h²hh³j$h´Myubah}”(h]”jõ#ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j$h´Myhj÷#h²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hj÷#h²hh³j$h´Myubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGj2$jHj2$jI‰jJ‰jK‰uh1híh²hhhËh³Nh´NubjM)�”}”(hŒ``get_user_inline (val, usrc)``”h]”jS)�”}”(hj8$h]”hŒget_user_inline (val, usrc)”…”�”}”(hj:$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj6$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M{hhËh²hubji)�”}”(hŒRead user data inlined ”h]”jM)�”}”(hŒRead user data inlined”h]”hŒRead user data inlined”…”�”}”(hjR$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´MyhjN$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j`$h´MyhhËh²hubj„)�”}”(hX'**Parameters** ``val`` The variable to store the value read from user memory ``usrc`` Pointer to the user space memory to read from **Return** 0 if successful, -EFAULT when faulted **Description** Inlined variant of get_user(). Only use when there is a demonstrable performance reason.”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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M}hjg$ubj¤)�”}”(hhh]”(j©)�”}”(hŒ>``val`` The variable to store the value read from user memory ”h]”(j¯)�”}”(hŒ``val``”h]”jS)�”}”(hjŒ$h]”hŒval”…”�”}”(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:11: ./include/linux/uaccess.h”h´Mzhj†$ubjÉ)�”}”(hhh]”jM)�”}”(hŒ5The variable to store the value read from user memory”h]”hŒ5The variable to store the value read from user memory”…”�”}”(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Œ7``usrc`` Pointer to the user space memory to read from ”h]”(j¯)�”}”(hŒ``usrc``”h]”jS)�”}”(hjÅ$h]”hŒusrc”…”�”}”(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:11: ./include/linux/uaccess.h”h´M{hj¿$ubjÉ)�”}”(hhh]”jM•)�”}”(hŒ-Pointer to the user space memory to read from”h]”hŒ-Pointer to the user space memory 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ƒ$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjg$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:11: ./include/linux/uaccess.h”h´M}hjg$ubjM)�”}”(hŒ%0 if successful, -EFAULT when faulted”h]”hŒ%0 if successful, -EFAULT when faulted”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M}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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´Mhjg$ubjM)�”}”(hŒXInlined variant of get_user(). Only use when there is a demonstrable performance reason.”h]”hŒXInlined variant of get_user(). Only use when there is a demonstrable performance reason.”…”�”}”(hj=%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M~hjg$ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhhËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒput_user_inline (C macro)”Œc.put_user_inline”hNt”auh1hÜhhËh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒput_user_inline”h]”hù)�”}”(hŒput_user_inline”h]”hÿ)�”}”(hŒput_user_inline”h]”j)�”}”(hjf%h]”hŒput_user_inline”…”�”}”(hjp%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjl%ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjh%h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M’ubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjd%h²hh³jƒ%h´M’ubah}”(h]”j_%ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jƒ%h´M’hja%h²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hja%h²hh³jƒ%h´M’ubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGjœ%jHjœ%jI‰jJ‰jK‰uh1híh²hhhËh³Nh´NubjM)�”}”(hŒ``put_user_inline (val, udst)``”h]”jS)�”}”(hj¢%h]”hŒput_user_inline (val, udst)”…”�”}”(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:11: ./include/linux/uaccess.h”h´M”hhËh²hubji)�”}”(hŒWrite to user memory inlined ”h]”jM)�”}”(hŒWrite to user memory inlined”h]”hŒWrite to user memory inlined”…”�”}”(hj¼%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M’hj¸%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jÊ%h´M’hhËh²hubj„)�”}”(hX**Parameters** ``val`` The value to write ``udst`` Pointer to the user space memory to write to **Return** 0 if successful, -EFAULT when faulted **Description** Inlined variant of put_user(). Only use when there is a demonstrable performance reason.”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:11: ./include/linux/uaccess.h”h´M–hjÑ%ubj¤)�”}”(hhh]”(j©)�”}”(hŒ``val`` The value to write ”h]”(j¯)�”}”(hŒ``val``”h]”jS)�”}”(hjö%h]”hŒval”…”�”}”(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:11: ./include/linux/uaccess.h”h´M“hjð%ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe value to write”h]”hŒThe value 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Œ6``udst`` Pointer to the user space memory to write to ”h]”(j¯)�”}”(hŒ``udst``”h]”jS)�”}”(hj/&h]”hŒudst”…”�”}”(hj1&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:11: ./include/linux/uaccess.h”h´M”hj)&ubjÉ)�”}”(hhh]”jM)�”}”(hŒ,Pointer to the user space memory to write to”h]”hŒ,Pointer to the user space memory to write to”…”�”}”(hjH&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jD&h´M”hjE&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj)&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jD&h´M”hjí%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÑ%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:11: ./include/linux/uaccess.h”h´M–hjÑ%ubjM)�”}”(hŒ%0 if successful, -EFAULT when faulted”h]”hŒ%0 if successful, -EFAULT when faulted”…”�”}”(hj€&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M–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:11: ./include/linux/uaccess.h”h´M˜hjÑ%ubjM)�”}”(hŒXInlined variant of put_user(). Only use when there is a demonstrable performance reason.”h]”hŒXInlined variant of put_user(). Only use when there is a demonstrable performance reason.”…”�”}”(hj§&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:11: ./include/linux/uaccess.h”h´M—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Œ:unsigned long clear_user(void __user *to, unsigned long n)”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÖ&h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÒ&h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./arch/x86/lib/usercopy_32.c”h´K4ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjå&h²hh³Nh´Nubah}”(h]”h ]”jÿ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´K4ubj8)�”}”(hŒ"(void __user *to, unsigned long n)”h]”(j>)�”}”(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Œ ”…”�”}”(hjO'h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj+'ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj]'h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj+'ubj)�”}”(hŒto”h]”hŒto”…”�”}”(hjj'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”…”�”}”(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)�”}”(hjh]”hŒn”…”�”}”(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&]”jjuh1j7hjÒ&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:14: ./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:14: ./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:14: ./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)�”}”(hj^(h]”hŒunsigned long n”…”�”}”(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:14: ./arch/x86/lib/usercopy_32.c”h´K6hjX(ubjÉ)�”}”(hhh]”jM)�”}”(hŒNumber of bytes to zero.”h]”hŒNumber of bytes to zero.”…”�”}”(hjw(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³js(h´K6hjt(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjX(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³js(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:14: ./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:14: ./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:14: ./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:14: ./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 ]”(jjeh"]”h$]”h&]”jjuh1hþhj)h²hh³j)h´KHubj8)�”}”(hŒ"(void __user *to, unsigned long n)”h]”(j>)�”}”(hŒvoid __user *to”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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)ubhŒ__user”…”�”}”(hjZ)h²hh³Nh´Nubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~)h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjZ)ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjŒ)h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjZ)ubj)�”}”(hŒto”h]”hŒto”…”�”}”(hj™)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjZ)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjV)ubj>)�”}”(hŒunsigned long n”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)�”}”(hjh]”hŒn”…”�”}”(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&]”jjuh1j7hj)h²hh³j)h´KHubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjý(h²hh³j)h´KHubah}”(h]”jø(ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j)h´KHhjú(h²hubj4)�”}”(hhh]”jM)�”}”(hŒ9Zero a block of memory in user space, with less checking.”h]”hŒ9Zero a block of memory in user space, with less checking.”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./arch/x86/lib/usercopy_32.c”h´KHhj*h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjú(h²hh³j)h´KHubeh}”(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. Caller must check the specified block with access_ok() before calling this function. **Return** number of bytes that could not be cleared. On success, this will be zero.”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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./arch/x86/lib/usercopy_32.c”h´KLhj/*ubj¤)�”}”(hhh]”(j©)�”}”(hŒ8``void __user *to`` Destination address, in user space. ”h]”(j¯)�”}”(hŒ``void __user *to``”h]”jS)�”}”(hjT*h]”hŒvoid __user *to”…”�”}”(hjV*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjR*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:14: ./arch/x86/lib/usercopy_32.c”h´KIhjN*ubjÉ)�”}”(hhh]”jM)�”}”(hŒ#Destination address, in user space.”h]”hŒ#Destination address, in user space.”…”�”}”(hjm*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ji*h´KIhjj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjN*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³ji*h´KIhjK*ubj©)�”}”(hŒ-``unsigned long n`` Number of bytes to zero. ”h]”(j¯)�”}”(hŒ``unsigned long n``”h]”jS)�”}”(hj�*h]”hŒunsigned long n”…”�”}”(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:14: ./arch/x86/lib/usercopy_32.c”h´KJhj‡*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Èhj‡*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¢*h´KJhjK*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:14: ./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:14: ./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:14: ./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:14: ./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”…”�”}”(hj4+h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj0+h²hh³ŒH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:17: ./mm/gup.c”h´MÖ ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjC+h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj0+h²hh³jB+h´MÖ ubhÿ)�”}”(hŒget_user_pages_fast”h]”j)�”}”(hŒget_user_pages_fast”h]”hŒget_user_pages_fast”…”�”}”(hjU+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjQ+ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj0+h²hh³jB+h´MÖ ubj8)�”}”(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”…”�”}”(hjq+h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjm+ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjm+ubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj�+h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjm+ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›+h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjm+ubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj©+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjm+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hji+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=hji+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”…”�”}”(hj/,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjó+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hji+ubj>)�”}”(hŒstruct page **pages”h]”(jœ)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(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,ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjg,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjd,ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”ji,Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjW+sbŒc.get_user_pages_fast”†”asbuh1hhjD,ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡,h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjD,ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj•,h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjD,ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¢,h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjD,ubj)�”}”(hŒpages”h]”hŒpages”…”�”}”(hj¯,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjD,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hji+ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj0+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Œ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:17: ./mm/gup.c”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²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:17: ./mm/gup.c”h´MÚ hjõ,ubj¤)�”}”(hhh]”(j©)�”}”(hŒ.``unsigned long start`` starting user address ”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³ŒH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:17: ./mm/gup.c”h´M× hj-ubjÉ)�”}”(hhh]”jM)�”}”(hŒstarting user address”h]”hŒstarting user address”…”�”}”(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Œ3``int nr_pages`` number of pages from start to pin ”h]”(j¯)�”}”(hŒ``int nr_pages``”h]”jS)�”}”(hjS-h]”hŒ int nr_pages”…”�”}”(hjU-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjQ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:17: ./mm/gup.c”h´MØ hjM-ubjÉ)�”}”(hhh]”jM)�”}”(hŒ!number of pages from start to pin”h]”hŒ!number of pages from start to pin”…”�”}”(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Œ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:17: ./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Ù hj-ubj©)�”}”(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:17: ./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:17: ./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Û 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³ŒH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:17: ./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().”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:17: ./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.”…”�”}”(hj&.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒH/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:17: ./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”uh1j<.h´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”…”�”}”(hjU.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjR.h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ!Page mobility and placement hints”h]”hŒ!Page mobility and placement hints”…”�”}”(hjf.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjc.h³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.”…”�”}”(hjt.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:25: ./include/linux/gfp_types.h”h´Kthjc.ubjM)�”}”(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&]”uh1jRhjƒ.ubhŒ| (also a zone modifier) indicates that the page can be moved by page migration during memory compaction or can be reclaimed.”…”�”}”(hjƒ.h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:25: ./include/linux/gfp_types.h”h´Kxhjc.ubjM)�”}”(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:25: ./include/linux/gfp_types.h”h´K{hjc.ubjM)�”}”(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:25: ./include/linux/gfp_types.h”h´K~hjc.ubjM)�”}”(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:25: ./include/linux/gfp_types.h”h´K‚hjc.ubjM)�”}”(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:25: ./include/linux/gfp_types.h”h´K„hjc.ubjM)�”}”(hŒU``__GFP_ACCOUNT`` causes the allocation to be accounted to the active cgroup context.”h]”(jS)�”}”(hŒ``__GFP_ACCOUNT``”h]”hŒ __GFP_ACCOUNT”…”�”}”(hj/h²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:25: ./include/linux/gfp_types.h”h´K‡hjc.ubeh}”(h]”Œ!page-mobility-and-placement-hints”ah ]”h"]”Œ!page mobility and placement hints”ah$]”h&]”uh1hµhjR.h²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�0h²hh³Nh´NubjS)�”}”(hŒ``PAGE_ALLOC_COSTLY_ORDER``”h]”hŒPAGE_ALLOC_COSTLY_ORDER”…”�”}”(hj˜0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�0ubhX­). !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�0h²hh³Nh´NubjS)�”}”(hŒ``__GFP_DIRECT_RECLAIM``”h]”hŒ__GFP_DIRECT_RECLAIM”…”�”}”(hjª0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�0ubhŒ flag.”…”�”}”(hj�0h²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´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Ç0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÃ0ubhX: 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Ã0h²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´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ä0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjà0ubhXˆ: 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à0h²hh³Nh´NubjS)�”}”(hŒ``__GFP_NORETRY``”h]”hŒ __GFP_NORETRY”…”�”}”(hjö0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjà0ubhX. 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à0h²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´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 discouraged. Please consider using kvmalloc() instead if possible.”h]”(jS)�”}”(hŒ``__GFP_NOFAIL``”h]”hŒ __GFP_NOFAIL”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj1ubhX¥: 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 discouraged. Please consider using kvmalloc() instead if possible.”…”�”}”(hj1h²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´Kêhj»/ubeh}”(h]”Œreclaim-modifiers”ah ]”h"]”Œreclaim modifiers”ah$]”h&]”uh1hµhjR.h²hh³Nh´Nubh¶)�”}”(hhh]”(h»)�”}”(hŒUseful GFP flag combinations”h]”hŒUseful GFP flag combinations”…”�”}”(hj71h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj41h³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 ”…”�”}”(hjE1h²hh³Nh´NubjS)�”}”(hŒ ``__GFP_FOO``”h]”hŒ __GFP_FOO”…”�”}”(hjM1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjE1ubhŒ flags as necessary.”…”�”}”(hjE1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:34: ./include/linux/gfp_types.h”h´M,hj41ubjM)�”}”(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”…”�”}”(hjj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjf1ubhXƒ 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.”…”�”}”(hjf1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:34: ./include/linux/gfp_types.h”h´M0hj41ubjM)�”}”(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‡1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjƒ1ubhŒA is typical for kernel-internal allocations. The caller requires ”…”�”}”(hjƒ1h²hh³Nh´NubjS)�”}”(hŒ``ZONE_NORMAL``”h]”hŒ ZONE_NORMAL”…”�”}”(hj™1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjƒ1ubhŒ: or a lower zone for direct access but can direct reclaim.”…”�”}”(hjƒ1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:34: ./include/linux/gfp_types.h”h´M7hj41ubjM)�”}”(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¶1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj²1ubhŒ\ is the same as GFP_KERNEL, except the allocation is accounted to the active cgroup context.”…”�”}”(hj²1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:34: ./include/linux/gfp_types.h”h´M:hj41ubjM)�”}”(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Ó1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÏ1ubhŒþ 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Ï1h²hh³Nh´NubjS)�”}”(hŒ``GFP_ATOMIC``”h]”hŒ GFP_ATOMIC”…”�”}”(hjå1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÏ1ubhŒ.”…”�”}”(hjÏ1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:34: ./include/linux/gfp_types.h”h´M=hj41ubjM)�”}”(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”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjþ1ubhXX 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þ1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:34: ./include/linux/gfp_types.h”h´MBhj41ubjM)�”}”(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”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj2ubhXA 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.”…”�”}”(hj2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:34: ./include/linux/gfp_types.h”h´MIhj41ubjM)�”}”(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”…”�”}”(hj<2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj82ubhX 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.”…”�”}”(hj82h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:34: ./include/linux/gfp_types.h”h´MOhj41ubjM)�”}”(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”…”�”}”(hjY2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjU2ubhŒ� exists for historical reasons and should be avoided where possible. The flags indicates that the caller requires that the lowest zone be used (”…”�”}”(hjU2h²hh³Nh´NubjS)�”}”(hŒ ``ZONE_DMA``”h]”hŒZONE_DMA”…”�”}”(hjk2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjU2ubhŒ­ 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 ”…”�”}”(hjU2h²hh³Nh´NubjS)�”}”(hŒ ``ZONE_DMA``”h]”hŒZONE_DMA”…”�”}”(hj}2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjU2ubhŒ: and treat the lowest zone as a type of emergency reserve.”…”�”}”(hjU2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:34: ./include/linux/gfp_types.h”h´MThj41ubjM)�”}”(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š2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj–2ubhŒ is similar to ”…”�”}”(hj–2h²hh³Nh´NubjS)�”}”(hŒ ``GFP_DMA``”h]”hŒGFP_DMA”…”�”}”(hj¬2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj–2ubhŒÖ 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–2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:34: ./include/linux/gfp_types.h”h´M[hj41ubjM)�”}”(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É2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÅ2ubhX 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Å2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:34: ./include/linux/gfp_types.h”h´M`hj41ubjM)�”}”(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æ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjâ2ubhŒö 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â2h²hh³Nh´NubjS)�”}”(hŒ``GFP_HIGHUSER_MOVABLE``”h]”hŒGFP_HIGHUSER_MOVABLE”…”�”}”(hjø2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjâ2ubhŒ.”…”�”}”(hjâ2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:34: ./include/linux/gfp_types.h”h´Mehj41ubjM)�”}”(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”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj3ubhŒ and ”…”�”}”(hj3h²hh³Nh´NubjS)�”}”(hŒ``GFP_TRANSHUGE_LIGHT``”h]”hŒGFP_TRANSHUGE_LIGHT”…”�”}”(hj'3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj3ubhX; 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.”…”�”}”(hj3h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:34: ./include/linux/gfp_types.h”h´Mjhj41ubeh}”(h]”Œuseful-gfp-flag-combinations”ah ]”h"]”Œuseful gfp flag combinations”ah$]”h&]”uh1hµhjR.h²hh³Nh´Nubeh}”(h]”(Œmemory-allocation-controls”jI.eh ]”h"]”(Œmemory allocation controls”Œmm-api-gfp-flags”eh$]”h&]”uh1hµhh·h²hh³hÊh´KŒexpect_referenced_by_name”}”jN3j>.sŒexpect_referenced_by_id”}”jI.j>.subh¶)�”}”(hhh]”(h»)�”}”(hŒThe Slab Cache”h]”hŒThe Slab Cache”…”�”}”(hjX3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjU3h²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ÜhjU3h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒSLAB_HWCACHE_ALIGN”h]”hù)�”}”(hŒSLAB_HWCACHE_ALIGN”h]”hÿ)�”}”(hŒSLAB_HWCACHE_ALIGN”h]”j)�”}”(hjy3h]”hŒSLAB_HWCACHE_ALIGN”…”�”}”(hjƒ3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj{3h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´KXubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjw3h²hh³j–3h´KXubah}”(h]”jr3ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j–3h´KXhjt3h²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hjt3h²hh³j–3h´KXubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGj¯3jHj¯3jI‰jJ‰jK‰uh1híh²hhjU3h³Nh´NubjM)�”}”(hŒ``SLAB_HWCACHE_ALIGN``”h]”jS)�”}”(hjµ3h]”hŒSLAB_HWCACHE_ALIGN”…”�”}”(hj·3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj³3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´KZhjU3h²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Ó3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´KXhjÏ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³já3h´KXhjË3ubjM)�”}”(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³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´KZhjË3ubjM)�”}”(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.”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´KYhjË3ubjM)�”}”(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 ”…”�”}”(hj4h²hh³Nh´Nubh)�”}”(hŒ2:c:type:`struct kmem_cache_args `”h]”jS)�”}”(hj4h]”hŒstruct kmem_cache_args”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”(Œxref”jAŒc-type”eh"]”h$]”h&]”uh1jRhj4ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œcore-api/mm-api”Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jìjï)�”}”jò]”sbŒ reftarget”Œkmem_cache_args”uh1hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´K^hj4ubhŒ5 field, the greater of both is alignments is applied.”…”�”}”(hj4h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j<4h´K^hjË3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³já3h´KXhjU3h²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒSLAB_TYPESAFE_BY_RCU (C macro)”Œc.SLAB_TYPESAFE_BY_RCU”hNt”auh1hÜhjU3h²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)�”}”(hj`4h]”hŒSLAB_TYPESAFE_BY_RCU”…”�”}”(hjj4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjf4ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjb4h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Klubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj^4h²hh³j}4h´Klubah}”(h]”jY4ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j}4h´Klhj[4h²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hj[4h²hh³j}4h´Klubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGj–4jHj–4jI‰jJ‰• jK‰uh1híh²hhjU3h³Nh´NubjM)�”}”(hŒ``SLAB_TYPESAFE_BY_RCU``”h]”jS)�”}”(hjœ4h]”hŒSLAB_TYPESAFE_BY_RCU”…”�”}”(hjž4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjš4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´KnhjU3h²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¾4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjº4ubhŒ READ THIS!”…”�”}”(hjº4h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Klhj¶4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jÖ4h´Klhj²4ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjß4h]”hŒ Description”…”�”}”(hjá4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÝ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Knhj²4ubjM)�”}”(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õ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Kmhj²4ubjM)�”}”(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:”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Krhj²4ubj7 )�”}”(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();”…”�”}”hj5sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j6 h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Kxhj²4ubjM)�”}”(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).”…”�”}”(hj"5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Kˆhj²4ubjM)�”}”(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.”…”�”}”(hj15h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´KŽhj²4ubjM)�”}”(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 ”…”�”}”(hj@5h²hh³Nh´Nubjí )�”}”(hŒ*after*”h]”hŒafter”…”�”}”(hjH5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jì hj@5ubhŒÑ 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 ”…”�”}”(hj@5h²hh³Nh´Nubjí )�”}”(hŒ*before*”h]”hŒbefore”…”�”}”(hjZ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jì hj@5ubhŒü 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.”…”�”}”(hj@5h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´K‘hj²4ubjM)�”}”(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.”…”�”}”(hjs5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Kšhj²4ubjM)�”}”(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‚5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´K¥hj²4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jÖ4h´KlhjU3h²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒSLAB_ACCOUNT (C macro)”Œc.SLAB_ACCOUNT”hNt”auh1hÜhjU3h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ SLAB_ACCOUNT”h]”hù)�”}”(hŒ SLAB_ACCOUNT”h]”hÿ)�”}”(hŒ SLAB_ACCOUNT”h]”j)�”}”(hjª5h]”hŒ SLAB_ACCOUNT”…”�”}”(hj´5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj°5ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¬5h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´KÉubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¨5h²hh³jÇ5h´KÉubah}”(h]”j£5ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÇ5h´KÉhj¥5h²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¥5h²hh³jÇ5h´KÉubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGjà5jHjà5jI‰jJ‰jK‰uh1híh²hhjU3h³Nh´NubjM)�”}”(hŒ``SLAB_ACCOUNT``”h]”jS)�”}”(hjæ5h]”hŒ SLAB_ACCOUNT”…”�”}”(hjè5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjä5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´KËhjU3h²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.”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´KÉhj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j6h´KÉhjü5ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj6h]”hŒ Description”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´KËhjü5ubjM)�”}”(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.”…”�”}”(hj16h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´KÊhjü5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j6h´KÉhjU3h²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒSLAB_RECLAIM_ACCOUNT (C macro)”Œc.SLAB_RECLAIM_ACCOUNT”hNt”auh1hÜhjU3h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒSLAB_RECLAIM_ACCOUNT”h]”hù)�”}”(hŒSLAB_RECLAIM_ACCOUNT”h]”hÿ)�”}”(hŒSLAB_RECLAIM_ACCOUNT”h]”j)�”}”(hjY6h]”hŒSLAB_RECLAIM_ACCOUNT”…”�”}”(hjc6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj_6ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj[6h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Këubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjW6h²hh³jv6h´Këubah}”(h]”jR6ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jv6h´KëhjT6h²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hjT6h²hh³jv6h´Këubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGj�6jHj�6jI‰jJ‰jK‰uh1híh²hhjU3h³Nh´NubjM)�”}”(hŒ``SLAB_RECLAIM_ACCOUNT``”h]”jS)�”}”(hj•6h]”hŒSLAB_RECLAIM_ACCOUNT”…”�”}”(hj—6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj“6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´KíhjU3h²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³6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Këhj¯6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jÁ6h´Këhj«6ubjM)�”}”(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³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Kíhj«6ubjM)�”}”(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à6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Kìhj«6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jÁ6h´KëhjU3h²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmem_cache_args (C struct)”Œc.kmem_cache_args”hNt”auh1hÜhjU3h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒkmem_cache_args”h]”hù)�”}”(hŒstruct kmem_cache_args”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj 7h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Kóubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj 7h²hh³j7h´Kóubhÿ)�”}”(hŒkmem_cache_args”h]”j)�”}”(hj7h]”hŒkmem_cache_args”…”�”}”(hj.7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj*7ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj 7h²hh³j7h´Kóubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj7h²hh³j7h´Kóubah}”(h]”j7ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j7h´Kóhj7h²hubj4)�”}”(hhh]”jM)�”}”(hŒ-Less common arguments for kmem_cache_create()”h]”hŒ-Less common arguments for kmem_cache_create()”…”�”}”(hjP7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MhjM7h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj7h²hh³j7h´Kóubeh}”(h]”h ]”(jAŒstruct”eh"]”h$]”h&]”jFjAjGjh7jHjh7jI‰jJ‰jK‰uh1híh²hhjU3h³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”…”�”}”(hjt7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjp7ubhŒ:”…”�”}”(hjp7h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M"hjl7ubj7 )�”}”(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�7sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j6 h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M$hjl7ubjM)�”}”(hŒ **Members**”h]”jŽ)�”}”(hjž7h]”hŒMembers”…”�”}”(hj 7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjœ7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M.hjl7ubj¤)�”}”(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½7h]”hŒalign”…”�”}”(hj¿7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj»7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M.hj·7ubjÉ)�”}”(hhh]”(jM)�”}”(hŒ'The required alignment for the objects.”h]”hŒ'The required alignment for the objects.”…”�”}”(hjÖ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M,hjÓ7ubjM)�”}”(hŒ/``0`` means no specific alignment is requested.”h]”(jS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hjé7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjå7ubhŒ* means no specific alignment is requested.”…”�”}”(hjå7h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÒ7h´M.hjÓ7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj·7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÒ7h´M.hj´7ubj©)�”}”(hŒ```useroffset`` Usercopy region offset. ``0`` is a valid offset, when **usersize** is non-``0`` ”h]”(j¯)�”}”(hŒ``useroffset``”h]”jS)�”}”(hj8h]”hŒ useroffset”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M4hj 8ubjÉ)�”}”(hhh]”(jM)�”}”(hŒUsercopy region offset.”h]”hŒUsercopy region offset.”…”�”}”(hj,8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M2hj)8ubjM)�”}”(hŒ7``0`` is a valid offset, when **usersize** is non-``0``”h]”(jS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hj?8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj;8ubhŒ is a valid offset, when ”…”�”}”(hj;8h²hh³Nh´NubjŽ)�”}”(hŒ **usersize**”h]”hŒusersize”…”�”}”(hjQ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj;8ubhŒ is non-”…”�”}”(hj;8h²hh³Nh´NubjS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hjc8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj;8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j(8h´M4hj)8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj 8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j(8h´M4hj´7ubj©)�”}”(hŒQ``usersize`` Usercopy region size. ``0`` means no usercopy region is specified. ”h]”(j¯)�”}”(hŒ ``usersize``”h]”jS)�”}”(hj‰8h]”hŒusersize”…”�”}”(hj‹8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‡8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M:hjƒ8ubjÉ)�”}”(hhh]”(jM)�”}”(hŒUsercopy region size.”h]”hŒUsercopy region size.”…”�”}”(hj¢8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M8hjŸ8ubjM)�”}”(hŒ,``0`` means no usercopy region is specified.”h]”(jS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hjµ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj±8ubhŒ' means no usercopy region is specified.”…”�”}”(hj±8h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jž8h´M:hjŸ8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjƒ8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jž8h´M:hj´7ubj©)�”}”(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ß8h]”hŒfreeptr_offset”…”�”}”(hjá8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÝ8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MRhjÙ8ubjÉ)�”}”(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ø8h²hh³Nh´Nubh)�”}”(hŒ:c:type:`SLAB_TYPESAFE_BY_RCU`”h]”jS)�”}”(hj9h]”hŒSLAB_TYPESAFE_BY_RCU”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”(j%4jAŒc-type”eh"]”h$]”h&]”uh1jRhj9ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j14Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jìj74j:4ŒSLAB_TYPESAFE_BY_RCU”uh1hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M>hjø8ubhŒ or ”…”�”}”(hjø8h²hh³Nh´NubjŽ)�”}”(hŒ**ctor**”h]”hŒctor”…”�”}”(hj$9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjø8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j9h´M>hjõ8ubjM)�”}”(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, ”…”�”}”(hj89h²hh³Nh´Nubh)�”}”(hŒ:c:type:`SLAB_TYPESAFE_BY_RCU`”h]”jS)�”}”(hjB9h]”hŒSLAB_TYPESAFE_BY_RCU”…”�”}”(hjD9h²hh³Nh´Nubah}”(h]”h ]”(j%4jAŒc-type”eh"]”h$]”h&]”uh1jRhj@9ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j14Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jìj74j:4ŒSLAB_TYPESAFE_BY_RCU”uh1hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MAhj89ubhŒ and ”…”�”}”(hj89h²hh³Nh´NubjŽ)�”}”(hŒ**ctor**”h]”hŒctor”…”�”}”(hjd9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj89ubhŒú 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.”…”�”}”(hj89h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j_9h´MAhjõ8ubjM)�”}”(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 ”…”�”}”(hj|9h²hh³Nh´Nubh)�”}”(hŒ:c:type:`SLAB_TYPESAFE_BY_RCU`”h]”jS)�”}”(hj†9h]”hŒSLAB_TYPESAFE_BY_RCU”…”�”}”(hjˆ9h²hh³Nh´Nubah}”(h]”h ]”(j%4jAŒc-type”eh"]”h$]”h&]”uh1jRhj„9ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j14Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jìj74j:4ŒSLAB_TYPESAFE_BY_RCU”uh1hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MGhj|9ubhŒw, the caller must ensure that the free pointer does not overlay fields required to guard against object recycling (See ”…”�”}”(hj|9h²hh³Nh´Nubh)�”}”(hŒ:c:type:`SLAB_TYPESAFE_BY_RCU`”h]”jS)�”}”(hjª9h]”hŒSLAB_TYPESAFE_BY_RCU”…”�”}”(hj¬9h²hh³Nh´Nubah}”(h]”h ]”(j%4jAŒc-type”eh"]”h$]”h&]”uh1jRhj¨9ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j14Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jìj74j:4ŒSLAB_TYPESAFE_BY_RCU”uh1hh³j£9h´MGhj|9ubhŒ for details).”…”�”}”(hj|9h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j£9h´MGhjõ8ubjM)�”}”(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Ñ9h²hh³Nh´NubjŽ)�”}”(hŒ**ctor**”h]”hŒctor”…”�”}”(hjÙ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÑ9ubhŒf, the caller must ensure that the free pointer does not overlay fields initialized by the constructor.”…”�”}”(hjÑ9h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MKhjõ8ubjM)�”}”(hŒfCurrently, only caches with :c:type:`SLAB_TYPESAFE_BY_RCU` or **ctor** may specify **freeptr_offset**.”h]”(hŒCurrently, only caches with ”…”�”}”(hjò9h²hh³Nh´Nubh)�”}”(hŒ:c:type:`SLAB_TYPESAFE_BY_RCU`”h]”jS)�”}”(hjü9h]”hŒSLAB_TYPESAFE_BY_RCU”…”�”}”(hjþ9h²hh³Nh´Nubah}”(h]”h ]”(j%4jAŒc-type”eh"]”h$]”h&]”uh1jRhjú9ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j14Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jìj74j:4ŒSLAB_TYPESAFE_BY_RCU”uh1hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MNhjò9ubhŒ or ”…”�”}”(hjò9h²hh³Nh´NubjŽ)�”}”(hŒ**ctor**”h]”hŒctor”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjò9ubhŒ may specify ”…”�”}”(hjò9h²hh³Nh´NubjŽ)�”}”(hŒ**freeptr_offset**”h]”hŒfreeptr_offset”…”�”}”(hj0:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjò9ubhŒ.”…”�”}”(hjò9h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j:h´MNhjõ8ubjM)�”}”(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 ”…”�”}”(hjH:h²hh³Nh´NubjS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hjP:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjH:ubhŒ as a value for ”…”�”}”(hjH:h²hh³Nh´NubjŽ)�”}”(hŒ**freeptr_offset**”h]”hŒfreeptr_offset”…”�”}”(hjb:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjH:ubhŒ is valid. If ”…”�”}”(hjH:h²hh³Nh´NubjŽ)�”}”(hŒ**freeptr_offset**”h]”hŒfreeptr_offset”…”�”}”(hjt:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjH:ubhŒ is specified, ”…”�”}”(hjH:h²hh³Nh´NubjŽ)�”}”(hŒ**use_freeptr_offset**”h]”hŒuse_freeptr_offset”…”�”}”(hj†:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjH:ubhŒ must be set ”…”�”}”(hjH:h²hh³Nh´NubjS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj˜:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjH:ubhŒ.”…”�”}”(hjH:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MQhjõ8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÙ8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jô8h´MRhj´7ubj©)�”}”(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:40: ./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´7ubj©)�”}”(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&]”uh1jRhj ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Mbhj;ubjÉ)�”}”(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:40: ./include/linux/slab.h”h´MZhj$;ubjM)�”}”(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.”…”�”}”(hj6;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M\hj$;ubjM)�”}”(hŒ``NULL`` means no constructor.”h]”(jS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjI;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjE;ubhŒ means no constructor.”…”�”}”(hjE;h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j#;h´Mbhj$;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j#;h´Mbhj´7ubj©)�”}”(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)�”}”(hjs;h]”hŒsheaf_capacity”…”�”}”(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:40: ./include/linux/slab.h”h´M€hjm;ubjÉ)�”}”(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:40: ./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:40: ./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:40: ./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:40: ./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:40: ./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:40: ./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:40: ./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:40: ./include/linux/slab.h”h´M�hj‰;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjm;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jˆ;h´M€hj´7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjl7ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjU3h²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:40: ./include/linux/slab.h”h´M„hjU3h²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 ”…”�”}”(hjC<h²hh³Nh´NubjŽ)�”}”(hŒ**freeptr_offset**”h]”hŒfreeptr_offset”…”�”}”(hjK<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjC<ubhŒ where ”…”�”}”(hjC<h²hh³Nh´NubjS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hj]<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjC<ubhŒ is a valid value, so ”…”�”}”(hjC<h²hh³Nh´NubjŽ)�”}”(hŒ**use_freeptr_offset**”h]”hŒuse_freeptr_offset”…”�”}”(hjo<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjC<ubhŒ must be also set to ”…”�”}”(hjC<h²hh³Nh´NubjS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj�<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjC<ubhŒ. in order to interpret the field as used. For ”…”�”}”(hjC<h²hh³Nh´NubjŽ)�”}”(hŒ**useroffset**”h]”hŒ useroffset”…”�”}”(hj“<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjC<ubhŒ ”…”�”}”(hjC<h²hh³Nh´NubjS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hj¥<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjC<ubhŒ" is also valid, but only with non-”…”�”}”(hjC<h²hh³Nh´NubjS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hj·<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjC<ubhŒ ”…”�”}”(hjC<h²hh³Nh´NubjŽ)�”}”(hŒ **usersize**”h]”hŒusersize”…”�”}”(hjÉ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjC<ubhŒ.”…”�”}”(hjC<h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MhjU3h²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:40: ./include/linux/slab.h”h´M%hjU3h²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ'kmem_cache_create_usercopy (C function)”Œc.kmem_cache_create_usercopy”hNt”auh1hÜhjU3h²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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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:40: ./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)�”}”(hhh]”j)�”}”(hŒ kmem_cache”h]”hŒ kmem_cache”…”�”}”(hj;=h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj8=ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j==Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒkmem_cache_create_usercopy”sbŒc.kmem_cache_create_usercopy”†”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–ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjj=h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj=h²hh³j)=h´M–ubhÿ)�”}”(hŒkmem_cache_create_usercopy”h]”j)�”}”(hjY=h]”hŒkmem_cache_create_usercopy”…”�”}”(hj{=h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjw=ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj=h²hh³j)=h´M–ubj8)�”}”(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]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œ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’=ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÍ=h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj’=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”…”�”}”(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Œint”h]”hŒint”…”�”}”(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Œalign”h]”hŒalign”…”�”}”(hj|>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”jèŒ reftarget”jš>Œmodname”NŒ classname”Njìjï)�”}”jò]”jW=Œ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Œ ”…”�”}”(hj)�”}”(hŒvoid (*ctor)(void*)”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{?ubjr)�”}”(hŒ(”h]”hŒ(”…”�”}”(hj›?h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj{?ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj©?h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj{?ubj)�”}”(hŒctor”h]”hŒctor”…”�”}”(hj¶?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj{?ubjr)�”}”(hŒ)”h]”hŒ)”…”�”}”(hjÄ?h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj{?ubjr)�”}”(hj�?h]”hŒ(”…”�”}”(hjÒ?h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj{?ubjá)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjß?h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj{?ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjí?h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj{?ubjr)�”}”(hjÆ?h]”hŒ)”…”�”}”(hjú?h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj{?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjŽ=ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj=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Œ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:40: ./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²hhjU3h³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Ž)�”}”(hjE@h]”hŒ Parameters”…”�”}”(hjG@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjC@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./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)�”}”(hjd@h]”hŒconst char *name”…”�”}”(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:40: ./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.”…”�”}”(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Œ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:40: ./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™hj[@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:40: ./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šhj[@ubj©)�”}”(hŒ"``slab_flags_t flags`` SLAB flags ”h]”(j¯)�”}”(hŒ``slab_flags_t flags``”h]”jS)�”}”(hjAh]”hŒslab_flags_t flags”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj Aubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M›hj AubjÉ)�”}”(hhh]”jM)�”}”(hŒ SLAB flags”h]”hŒ SLAB flags”…”�”}”(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[@ubj©)�”}”(hŒ3``unsigned int useroffset`` Usercopy region offset ”h]”(j¯)�”}”(hŒ``unsigned int useroffset``”h]”jS)�”}”(hjHAh]”hŒunsigned int useroffset”…”�”}”(hjJAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjFAubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MœhjBAubjÉ)�”}”(hhh]”jM)�”}”(hŒUsercopy region offset”h]”hŒUsercopy region offset”…”�”}”(hjaAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j]Ah´Mœhj^Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjBAubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j]Ah´Mœhj[@ubj©)�”}”(hŒ/``unsigned int usersize`` Usercopy region size ”h]”(j¯)�”}”(hŒ``unsigned int usersize``”h]”jS)�”}”(hj�Ah]”hŒunsigned int usersize”…”�”}”(hjƒAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M�hj{AubjÉ)�”}”(hhh]”jM)�”}”(hŒUsercopy region size”h]”hŒUsercopy region size”…”�”}”(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[@ubj©)�”}”(hŒE``void (*ctor)(void *)`` A constructor for the objects, or ``NULL``. ”h]”(j¯)�”}”(hŒ``void (*ctor)(void *)``”h]”jS)�”}”(hjºAh]”hŒvoid (*ctor)(void *)”…”�”}”(hj¼Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¸Aubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Mžhj´AubjÉ)�”}”(hhh]”jM)�”}”(hŒ+A constructor for the objects, or ``NULL``.”h]”(hŒ"A constructor for the objects, or ”…”�”}”(hjÓAh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjÛAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÓAubhŒ.”…”�”}”(hjÓAh²hh³Nh´Nubeh}”(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[@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj?@ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjBh]”hŒ Description”…”�”}”(hj Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./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 ”…”�”}”(hjBh²hh³Nh´Nubh)�”}”(hŒ2:c:type:`struct kmem_cache_args `”h]”jS)�”}”(hj'Bh]”hŒstruct kmem_cache_args”…”�”}”(hj)Bh²hh³Nh´Nubah}”(h]”h ]”(j%4jAŒc-type”eh"]”h$]”h&]”uh1jRhj%Bubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j14Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jìj74j:4Œkmem_cache_args”uh1hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MŸhjBubhŒ)”…”�”}”(hjBh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jDBh´MŸhj?@ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjQBh]”hŒReturn”…”�”}”(hjSBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjOBubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./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.”…”�”}”(hjgBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M¥hj?@ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjU3h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmem_cache_create (C macro)”Œc.kmem_cache_create”hNt”auh1hÜhjU3h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒkmem_cache_create”h]”hù)�”}”(hŒkmem_cache_create”h]”hÿ)�”}”(hŒkmem_cache_create”h]”j)�”}”(hj�Bh]”hŒkmem_cache_create”…”�”}”(hjšBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj–Bubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj’Bh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MÇubah}”(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]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hj‹Bh²hh³j­Bh´MÇubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGjÆBjHjÆBjI‰jJ‰jK‰uh1híh²hhjU3h³Nh´NubjM)�”}”(hŒ:``kmem_cache_create (__name, __object_size, __args, ...)``”h]”jS)�”}”(hjÌBh]”hŒ6kmem_cache_create (__name, __object_size, __args, ...)”…”�”}”(hjÎBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÊBubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MÉhjU3h²hubji)�”}”(hŒCreate a kmem cache. ”h]”jM)�”}”(hŒCreate a kmem cache.”h]”hŒCreate a kmem cache.”…”�”}”(hjæBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MÇhjâBubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jôBh´MÇhjU3h²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Ž)�”}”(hjCh]”hŒ Parameters”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÿBubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MËhjûBubj¤)�”}”(hhh]”(j©)�”}”(hŒL``__name`` A string which is used in /proc/slabinfo to identify this cache. ”h]”(j¯)�”}”(hŒ ``__name``”h]”jS)�”}”(hj Ch]”hŒ__name”…”�”}”(hj"Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MÈhjCubjÉ)�”}”(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.”…”�”}”(hj9Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j5Ch´MÈhj6Cubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjCubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j5Ch´MÈhjCubj©)�”}”(hŒC``__object_size`` The size of objects to be created in this cache. ”h]”(j¯)�”}”(hŒ``__object_size``”h]”jS)�”}”(hjYCh]”hŒ __object_size”…”�”}”(hj[Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjWCubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MÉhjSCubjÉ)�”}”(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.”…”�”}”(hjrCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jnCh´MÉhjoCubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjSCubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jnCh´MÉhjCubj©)�”}”(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’Ch]”hŒ__args”…”�”}”(hj”Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�Cubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MËhjŒCubjÉ)�”}”(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«Ch²hh³Nh´Nubh)�”}”(hŒ2:c:type:`struct kmem_cache_args `”h]”jS)�”}”(hjµCh]”hŒstruct kmem_cache_args”…”�”}”(hj·Ch²hh³Nh´Nubah}”(h]”h ]”(j%4jAŒc-type”eh"]”h$]”h&]”uh1jRhj³Cubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j14Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jìj74j:4Œkmem_cache_args”uh1hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MÊhj«CubhŒ . Passing ”…”�”}”(hj«Ch²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj×Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj«CubhŒ3 means defaults will be used for all the arguments.”…”�”}”(hj«Ch²hh³Nh´Nubeh}”(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ËhjCubj©)�”}”(hŒ``...`` variable arguments ”h]”(j¯)�”}”(hŒ``...``”h]”jS)�”}”(hjDh]”hŒ...”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÿCubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”•h´KhjûCubjÉ)�”}”(hhh]”jM)�”}”(hŒvariable arguments”h]”hŒvariable arguments”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jDh´KhjDubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjûCubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jDh´KhjCubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjûBubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj:Dubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´KhjûBubjM)�”}”(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 ”…”�”}”(hjRDh²hh³Nh´NubjS)�”}”(hŒ``_Generic()``”h]”hŒ _Generic()”…”�”}”(hjZDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjRDubhŒA to call either the new variant of the function, or a legacy one.”…”�”}”(hjRDh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MÌhjûBubjM)�”}”(hŒWThe new variant has 4 parameters: ``kmem_cache_create(name, object_size, args, flags)``”h]”(hŒ"The new variant has 4 parameters: ”…”�”}”(hjsDh²hh³Nh´NubjS)�”}”(hŒ5``kmem_cache_create(name, object_size, args, flags)``”h]”hŒ1kmem_cache_create(name, object_size, args, flags)”…”�”}”(hj{Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjsDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MÏhjûBubjM)�”}”(hŒ5See __kmem_cache_create_args() which implements this.”h]”hŒ5See __kmem_cache_create_args() which implements this.”…”�”}”(hj�Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MÒhjûBubjM)�”}”(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ŸDh²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§Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjŸDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MÔhjûBubjM)�”}”(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¼Dh²hh³Nh´Nubh)�”}”(hŒ2:c:type:`struct kmem_cache_args `”h]”jS)�”}”(hjÆDh]”hŒstruct kmem_cache_args”…”�”}”(hjÈDh²hh³Nh´Nubah}”(h]”h ]”(j%4jAŒc-type”eh"]”h$]”h&]”uh1jRhjÄDubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j14Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jìj74j:4Œkmem_cache_args”uh1hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M×hj¼Dubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jãDh´M×hjûBubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjìDh]”hŒContext”…”�”}”(hjîDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjêDubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MÚhjûBubjM)�”}”(hŒ)�”}”(hŒ const void *p”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hj¢Eh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjžEubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯Eh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjžEubjá)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj½Eh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjžEubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËEh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjžEubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÙEh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjžEubj)�”}”(hj~h]”hŒp”…”�”}”(hjæEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjžEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjšEubj>)�”}”(hŒsize_t new_size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjþEubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jFŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjˆEsbŒc.krealloc_node_align”†”asbuh1hhjúEubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!Fh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjúEubj)�”}”(hŒnew_size”h]”hŒnew_size”…”�”}”(hj/Fh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjúEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjšEubj>)�”}”(hŒunsigned long align”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjHFh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjDFubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjVFh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjDFubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjdFh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjDFubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrFh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjDFubj)�”}”(hŒalign”h]”hŒalign”…”�”}”(hj€Fh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjDFubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjšEubj>)�”}”(hŒ gfp_t flags”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjœFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™Fubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jžFŒmodname”NŒ classname”Njìjï)�”}”jò]”jFŒc.krealloc_node_align”†”asbuh1hhj•Fubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºFh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj•Fubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjÈFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj•Fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjšEubj>)�”}”(hŒint nid”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Œnid”h]”hŒnid”…”�”}”(hjýFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÝFubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjšEubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjTEh²hh³jfEh´M'ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjPEh²hh³jfEh´M'ubah}”(h]”jKEah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jfEh´M'hjMEh²hubj4)�”}”(hhh]”jM)�”}”(hŒ6reallocate memory. The contents will remain unchanged.”h]”hŒ6reallocate memory. The contents will remain unchanged.”…”�”}”(hj'Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M'hj$Gh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjMEh²hh³jfEh´M'ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj?GjHj?GjI‰jJ‰jK‰uh1híh²hhjU3h³Nh´Nubj„)�”}”(hX+**Parameters** ``const void *p`` object to reallocate memory for. ``size_t new_size`` how many bytes of memory are required. ``unsigned long align`` desired alignment. ``gfp_t flags`` the type of memory to allocate. ``int nid`` NUMA node or NUMA_NO_NODE **Description** If **p** is ``NULL``, krealloc() behaves exactly like kmalloc(). If **new_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. When slub_debug_orig_size() is off, krealloc() only knows about the bucket size of an allocation (but not the exact size it was allocated with) and hence implements the following semantics for shrinking and growing buffers with __GFP_ZERO:: new bucket 0 size size |--------|----------------| | keep | zero | Otherwise, the original allocation size 'orig_size' could be used to precisely clear the requested size, and the new size will also be stored as the new 'orig_size'. In any case, the contents of the object pointed to are preserved up to the lesser of the new and old sizes. **Return** pointer to the allocated memory or ``NULL`` in case of error”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjIGh]”hŒ Parameters”…”�”}”(hjKGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjGGubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M+hjCGubj¤)�”}”(hhh]”(j©)�”}”(hŒ3``const void *p`` object to reallocate memory for. ”h]”(j¯)�”}”(hŒ``const void *p``”h]”jS)�”}”(hjhGh]”hŒ const void *p”…”�”}”(hjjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjfGubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M(hjbGubjÉ)�”}”(hhh]”jM)�”}”(hŒ object to reallocate memory for.”h]”hŒ object to reallocate memory for.”…”�”}”(hj�Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j}Gh´M(hj~Gubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjbGubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j}Gh´M(hj_Gubj©)�”}”(hŒ;``size_t new_size`` how many bytes of memory are required. ”h]”(j¯)�”}”(hŒ``size_t new_size``”h]”jS)�”}”(hj¡Gh]”hŒsize_t new_size”…”�”}”(hj£Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjŸGubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M)hj›GubjÉ)�”}”(hhh]”jM)�”}”(hŒ&how many bytes of memory are required.”h]”hŒ&how many bytes of memory are required.”…”�”}”(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Œ+``unsigned long align`` desired alignment. ”h]”(j¯)�”}”(hŒ``unsigned long align``”h]”jS)�”}”(hjÚGh]”hŒunsigned long align”…”�”}”(hjÜGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjØGubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M*hjÔGubjÉ)�”}”(hhh]”jM)�”}”(hŒdesired alignment.”h]”hŒdesired alignment.”…”�”}”(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Œ0``gfp_t flags`` the type of memory to allocate. ”h]”(j¯)�”}”(hŒ``gfp_t flags``”h]”jS)�”}”(hjHh]”hŒ gfp_t flags”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjHubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M+hj HubjÉ)�”}”(hhh]”jM)�”}”(hŒthe type of memory to allocate.”h]”hŒthe type of memory 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_Gubj©)�”}”(hŒ&``int nid`` NUMA node or NUMA_NO_NODE ”h]”(j¯)�”}”(hŒ ``int nid``”h]”jS)�”}”(hjLHh]”hŒint nid”…”�”}”(hjNHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjJHubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M,hjFHubjÉ)�”}”(hhh]”jM)�”}”(hŒNUMA node or NUMA_NO_NODE”h]”hŒNUMA node or NUMA_NO_NODE”…”�”}”(hjeHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jaHh´M,hjbHubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjFHubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jaHh´M,hj_Gubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjCGubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj‡Hh]”hŒ Description”…”�”}”(hj‰Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj…Hubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M.hjCGubjM)�”}”(hŒ›If **p** is ``NULL``, krealloc() behaves exactly like kmalloc(). If **new_size** is 0 and **p** is not a ``NULL`` pointer, the object pointed to is freed.”h]”(hŒIf ”…”�”}”(hj�Hh²hh³Nh´NubjŽ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj¥Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�HubhŒ is ”…”�”}”(hj�Hh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj·Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�HubhŒ1, krealloc() behaves exactly like kmalloc(). If ”…”�”}”(hj�Hh²hh³Nh´NubjŽ)�”}”(hŒ **new_size**”h]”hŒnew_size”…”�”}”(hjÉHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�HubhŒ is 0 and ”…”�”}”(hj�Hh²hh³Nh´NubjŽ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjÛHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�HubhŒ is not a ”…”�”}”(hj�Hh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjíHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�HubhŒ) pointer, the object pointed to is freed.”…”�”}”(hj�Hh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M-hjCGubjM)�”}”(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.”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M0hjCGubjM)�”}”(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.”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M3hjCGubjM)�”}”(hŒðWhen slub_debug_orig_size() is off, krealloc() only knows about the bucket size of an allocation (but not the exact size it was allocated with) and hence implements the following semantics for shrinking and growing buffers with __GFP_ZERO::”h]”hŒïWhen slub_debug_orig_size() is off, krealloc() only knows about the bucket size of an allocation (but not the exact size it was allocated with) and hence implements the following semantics for shrinking and growing buffers with __GFP_ZERO:”…”�”}”(hj$Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M8hjCGubj7 )�”}”(hŒt new bucket 0 size size |--------|----------------| | keep | zero |”h]”hŒt new bucket 0 size size |--------|----------------| | keep | zero |”…”�”}”hj3Isbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j6 h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M=hjCGubjM)�”}”(hŒ¥Otherwise, the original allocation size 'orig_size' could be used to precisely clear the requested size, and the new size will also be stored as the new 'orig_size'.”h]”hŒ­Otherwise, the original allocation size ‘orig_size’ could be used to precisely clear the requested size, and the new size will also be stored as the new ‘orig_size’.”…”�”}”(hjBIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MBhjCGubjM)�”}”(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.”…”�”}”(hjQIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MFhjCGubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjbIh]”hŒReturn”…”�”}”(hjdIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj`Iubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MIhjCGubjM)�”}”(hŒvoid *kmem_cache_alloc(struct kmem_cache *cachep, gfp_t flags)”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¹Ih²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjµIh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MMubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈIh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjµIh²hh³jÇIh´MMubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÖIh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjµIh²hh³jÇIh´MMubhÿ)�”}”(hŒkmem_cache_alloc”h]”j)�”}”(hŒkmem_cache_alloc”h]”hŒkmem_cache_alloc”…”�”}”(hjçIh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjãIubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjµIh²hh³jÇIh´MMubj8)�”}”(hŒ((struct kmem_cache *cachep, gfp_t flags)”h]”(j>)�”}”(hŒstruct kmem_cache *cachep”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÿIubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÿIubh)�”}”(hhh]”j)�”}”(hŒ kmem_cache”h]”hŒ kmem_cache”…”�”}”(hj!Jh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjJubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j#JŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjéIsbŒc.kmem_cache_alloc”†”asbuh1hhjÿIubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAJh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÿIubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjOJh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÿIubj)�”}”(hŒcachep”h]”hŒcachep”…”�”}”(hj\Jh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÿIubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjûIubj>)�”}”(hŒ gfp_t flags”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjxJh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjuJubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jzJŒmodname”NŒ classname”Njìjï)�”}”jò]”j=JŒc.kmem_cache_alloc”†”asbuh1hhjqJubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–Jh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjqJubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj¤Jh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjqJubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjûIubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjµIh²hh³jÇIh´MMubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj±Ih²hh³jÇIh´MMubah}”(h]”j¬Iah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÇIh´MMhj®Ih²hubj4)�”}”(hhh]”jM)�”}”(hŒAllocate an object”h]”hŒAllocate an object”…”�”}”(hjÎJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MMhjËJh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj®Ih²hh³jÇIh´MMubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjæJjHjæJjI‰jJ‰jK‰uh1híh²hhjU3h³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ðJh]”hŒ Parameters”…”�”}”(hjòJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjîJubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MQhjêJubj¤)�”}”(hhh]”(j©)�”}”(hŒ:``struct kmem_cache *cachep`` The cache to allocate from. ”h]”(j¯)�”}”(hŒ``struct kmem_cache *cachep``”h]”jS)�”}”(hjKh]”hŒstruct kmem_cache *cachep”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj Kubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MNhj KubjÉ)�”}”(hhh]”jM)�”}”(hŒThe cache to allocate from.”h]”hŒThe cache to allocate from.”…”�”}”(hj(Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j$Kh´MNhj%Kubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j$Kh´MNhjKubj©)�”}”(hŒ``gfp_t flags`` See kmalloc(). ”h]”(j¯)�”}”(hŒ``gfp_t flags``”h]”jS)�”}”(hjHKh]”hŒ gfp_t flags”…”�”}”(hjJKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjFKubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MOhjBKubjÉ)�”}”(hhh]”jM)�”}”(hŒSee kmalloc().”h]”hŒSee kmalloc().”…”�”}”(hjaKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j]Kh´MOhj^Kubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjBKubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j]Kh´MOhjKubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjêJubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjƒKh]”hŒ Description”…”�”}”(hj…Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�Kubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MQhjêJubjM)�”}”(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™Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MPhjê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:40: ./include/linux/slab.h”h´MShjêJubjM)�”}”(hŒ6pointer to the new object or ``NULL`` in case of error”h]”(hŒpointer to the new object or ”…”�”}”(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 error”…”�”}”(hjÀKh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MThjêJubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjU3h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmem_cache_charge (C function)”Œc.kmem_cache_charge”hNt”auh1hÜhjU3h²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á)�”}”(hj½h]”hŒbool”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjýKh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M_ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjýKh²hh³jLh´M_ubhÿ)�”}”(hŒkmem_cache_charge”h]”j)�”}”(hŒkmem_cache_charge”h]”hŒkmem_cache_charge”…”�”}”(hj!Lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjLubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjýKh²hh³jLh´M_ubj8)�”}”(hŒ(void *objp, gfp_t gfpflags)”h]”(j>)�”}”(hŒ void *objp”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj=Lh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj9Lubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKLh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj9Lubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjYLh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj9Lubj)�”}”(hŒobjp”h]”hŒobjp”…”�”}”(hjfLh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj9Lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj5Lubj>)�”}”(hŒgfp_t gfpflags”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj‚Lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjLubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j„LŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj#LsbŒc.kmem_cache_charge”†”asbuh1hhj{Lubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢Lh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj{Lubj)�”}”(hŒgfpflags”h]”hŒgfpflags”…”�”}”(hj°Lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj{Lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj5Lubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjýKh²hh³jLh´M_ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjùKh²hh³jLh´M_ubah}”(h]”jôKah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jLh´M_hjöKh²hubj4)�”}”(hhh]”jM)�”}”(hŒ-memcg charge an already allocated slab memory”h]”hŒ-memcg charge an already allocated slab memory”…”�”}”(hjÚLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M_hj×Lh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjöKh²hh³jLh´M_ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjòLjHjòLjI‰jJ‰jK‰uh1híh²hhjU3h³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üLh]”hŒ Parameters”…”�”}”(hjþLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjúLubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MchjöLubj¤)�”}”(hhh]”(j©)�”}”(hŒ:``void *objp`` address of the slab object to memcg charge ”h]”(j¯)�”}”(hŒ``void *objp``”h]”jS)�”}”(hjMh]”hŒ void *objp”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M`hjMubjÉ)�”}”(hhh]”jM)�”}”(hŒ*address of the slab object to memcg charge”h]”hŒ*address of the slab object to memcg charge”…”�”}”(hj4Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j0Mh´M`hj1Mubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjMubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j0Mh´M`hjMubj©)�”}”(hŒ3``gfp_t gfpflags`` describe the allocation context ”h]”(j¯)�”}”(hŒ``gfp_t gfpflags``”h]”jS)�”}”(hjTMh]”hŒgfp_t gfpflags”…”�”}”(hjVMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjRMubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MahjNMubjÉ)�”}”(hhh]”jM)�”}”(hŒdescribe the allocation context”h]”hŒdescribe the allocation context”…”�”}”(hjmMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jiMh´MahjjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjNMubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jiMh´MahjMubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjöLubjM)�”}”(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³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MchjöLubjM)�”}”(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¥Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MbhjöLubjM)�”}”(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´Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MfhjöLubjM)�”}”(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ÃMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MmhjöLubhŒenumerated_list”“”)�”}”(hhh]”(jc)�”}”(hŒ3For !CONFIG_MEMCG or cgroup_disable=memory systems.”h]”jM)�”}”(hjÙMh]”hŒ3For !CONFIG_MEMCG or cgroup_disable=memory systems.”…”�”}”(hjÛMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Mqhj×Mubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjÔMubjc)�”}”(hŒAlready charged slab objects.”h]”jM)�”}”(hjñMh]”hŒAlready charged slab objects.”…”�”}”(hjóMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MrhjïMubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjÔMubjc)�”}”(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 Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MshjNubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjÔMubjc)�”}”(hŒ(Allocating internal metadata has failed ”h]”jM)�”}”(hŒ'Allocating internal metadata has failed”h]”hŒ'Allocating internal metadata has failed”…”�”}”(hj$Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Muhj Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjÔMubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1jÒMhjöLubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjFNh]”hŒReturn”…”�”}”(hjHNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjDNubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MwhjöLubjM)�”}”(hŒ.true if charge was successful otherwise false.”h]”hŒ.true if charge was successful otherwise false.”…”�”}”(hj\Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MxhjöLubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjU3h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmalloc (C function)”Œ c.kmalloc”hNt”auh1hÜhjU3h²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‹Nh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj‡Nh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Mèubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšNh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‡Nh²hh³j™Nh´Mèubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¨Nh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj‡Nh²hh³j™Nh´Mèubhÿ)�”}”(hŒkmalloc”h]”j)�”}”(hŒkmalloc”h]”hŒkmalloc”…”�”}”(hj¹Nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjµNubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj‡Nh²hh³j™Nh´Mèubj8)�”}”(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ØNh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕNubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÚNŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj»NsbŒ c.kmalloc”†”asbuh1hhjÑNubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjøNh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÑNubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÑNubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÍNubj>)�”}”(hŒ gfp_t flags”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj"Oh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjOubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j$OŒmodname”NŒ classname”Njìjï)�”}”jò]”jôNŒ c.kmalloc”†”asbuh1hhjOubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@Oh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjOubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjNOh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjOubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÍNubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj‡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Œallocate kernel memory”h]”hŒallocate kernel memory”…”�”}”(hjxOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MèhjuOh²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²hhjU3h³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šOh]”hŒ Parameters”…”�”}”(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:40: ./include/linux/slab.h”h´Mìhj”Oubj¤)�”}”(hhh]”(j©)�”}”(hŒ7``size_t size`` how many bytes of memory are required. ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hj¹Oh]”hŒ size_t size”…”�”}”(hj»Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj·Oubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Méhj³OubjÉ)�”}”(hhh]”jM)�”}”(hŒ&how many bytes of memory are required.”h]”hŒ&how many bytes of memory are required.”…”�”}”(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°Oubj©)�”}”(hŒ0``gfp_t flags`` describe the allocation context ”h]”(j¯)�”}”(hŒ``gfp_t flags``”h]”jS)�”}”(hjòOh]”hŒ gfp_t flags”…”�”}”(hjôOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjðOubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MêhjìOubjÉ)�”}”(hhh]”jM)�”}”(hŒdescribe the allocation context”h]”hŒdescribe the allocation context”…”�”}”(hj Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jPh´MêhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjìOubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jPh´Mêhj°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³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Mìhj”OubjM)�”}”(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.”…”�”}”(hjCPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Mëhj”OubjM)�”}”(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 ”…”�”}”(hjRPh²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjZPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjRPubhŒµ 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 ”…”�”}”(hjRPh²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjlPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjRPubhŒ.”…”�”}”(hjRPh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Mîhj”OubjM)�”}”(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…Ph²hh³Nh´NubjŽ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hj�Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj…PubhŒ\ argument may be one of the GFP flags defined at include/linux/gfp_types.h and described at ”…”�”}”(hj…Ph²hh³Nh´Nubh)�”}”(hŒ;:ref:`Documentation/core-api/mm-api.rst `”h]”hŒinline”“”)�”}”(hj¡Ph]”hŒ!Documentation/core-api/mm-api.rst”…”�”}”(hj¥Ph²hh³Nh´Nubah}”(h]”h ]”(j%4Œstd”Œstd-ref”eh"]”h$]”h&]”uh1j£PhjŸPubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j14Œ refdomain”j¯PŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj:4Œmm-api-gfp-flags”uh1hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Móhj…Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÁPh´Móhj”OubjM)�”}”(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ÈPh²hh³Nh´NubjŽ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hjÐPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÈPubhŒ is described at ”…”�”}”(hjÈPh²hh³Nh´Nubh)�”}”(hŒG:ref:`Documentation/core-api/memory-allocation.rst `”h]”j¤P)�”}”(hjäPh]”hŒ,Documentation/core-api/memory-allocation.rst”…”�”}”(hjæPh²hh³Nh´Nubah}”(h]”h ]”(j%4Œstd”Œstd-ref”eh"]”h$]”h&]”uh1j£PhjâPubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j14Œ refdomain”jðPŒreftype”Œref”Œ refexplicit”ˆŒrefwarn”ˆj:4Œmemory_allocation”uh1hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M÷hjÈPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jQh´M÷hj”OubjM)�”}”(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”…”�”}”(hj Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Múhj”Oubj¤)�”}”(hhh]”(j©)�”}”(hŒ6``GFP_KERNEL`` Allocate normal kernel ram. May sleep. ”h]”(j¯)�”}”(hŒ``GFP_KERNEL``”h]”jS)�”}”(hj!Qh]”hŒ GFP_KERNEL”…”�”}”(hj#Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MýhjQubjÉ)�”}”(hhh]”jM)�”}”(hŒ&Allocate normal kernel ram. May sleep.”h]”hŒ&Allocate normal kernel ram. May sleep.”…”�”}”(hj:Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j6Qh´Mýhj7Qubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjQubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j6Qh´MýhjQubj©)�”}”(hŒ*``GFP_NOWAIT`` Allocation will not sleep. ”h]”(j¯)�”}”(hŒ``GFP_NOWAIT``”h]”jS)�”}”(hjZQh]”hŒ GFP_NOWAIT”…”�”}”(hj\Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjXQubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MhjTQubjÉ)�”}”(hhh]”jM)�”}”(hŒAllocation will not sleep.”h]”hŒAllocation will not sleep.”…”�”}”(hjsQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³joQh´MhjpQubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjTQubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³joQh´MhjQubj©)�”}”(hŒD``GFP_ATOMIC`` Allocation will not sleep. May use emergency pools. ”h]”(j¯)�”}”(hŒ``GFP_ATOMIC``”h]”jS)�”}”(hj“Qh]”hŒ GFP_ATOMIC”…”�”}”(hj•Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‘Qubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Mhj�QubjÉ)�”}”(hhh]”jM)�”}”(hŒ4Allocation will not sleep. May use emergency pools.”h]”hŒ4Allocation will not sleep. May use emergency pools.”…”�”}”(hj¬Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¨Qh´Mhj©Qubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�Qubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¨Qh´MhjQubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj”OubjM)�”}”(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ÌQh²hh³Nh´NubjŽ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hjÔQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÌQubhŒ:”…”�”}”(hjÌQh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Mhj”Oubj¤)�”}”(hhh]”(j©)�”}”(hŒO``__GFP_ZERO`` Zero the allocated memory before returning. Also see kzalloc(). ”h]”(j¯)�”}”(hŒ``__GFP_ZERO``”h]”jS)�”}”(hjöQh]”hŒ __GFP_ZERO”…”�”}”(hjøQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjôQubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M hjðQubjÉ)�”}”(hhh]”jM)�”}”(hŒ?Zero the allocated memory before returning. Also see kzalloc().”h]”hŒ?Zero the allocated memory before returning. Also see kzalloc().”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j Rh´M hj Rubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjðQubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j Rh´M hjíQubj©)�”}”(hŒN``__GFP_HIGH`` This allocation has high priority and may use emergency pools. ”h]”(j¯)�”}”(hŒ``__GFP_HIGH``”h]”jS)�”}”(hj/Rh]”hŒ __GFP_HIGH”…”�”}”(hj1Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj-Rubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M hj)RubjÉ)�”}”(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.”…”�”}”(hjHRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jDRh´M hjERubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj)Rubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jDRh´M hjíQubj©)�”}”(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)�”}”(hjhRh]”hŒ __GFP_NOFAIL”…”�”}”(hjjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjfRubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MhjbRubjÉ)�”}”(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�Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Mhj~Rubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjbRubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j}Rh´MhjíQubj©)�”}”(hŒP``__GFP_NORETRY`` If memory is not immediately available, then give up at once. ”h]”(j¯)�”}”(hŒ``__GFP_NORETRY``”h]”jS)�”}”(hj¢Rh]”hŒ __GFP_NORETRY”…”�”}”(hj¤Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj Rubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MhjœRubjÉ)�”}”(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»Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Mhj¸Rubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjœRubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j·Rh´MhjíQubj©)�”}”(hŒ@``__GFP_NOWARN`` If allocation fails, don't issue any warnings. ”h]”(j¯)�”}”(hŒ``__GFP_NOWARN``”h]”jS)�”}”(hjÜRh]”hŒ __GFP_NOWARN”…”�”}”(hjÞRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÚRubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MhjÖRubjÉ)�”}”(hhh]”jM)�”}”(hŒ.If allocation fails, don't issue any warnings.”h]”hŒ0If allocation fails, don’t issue any warnings.”…”�”}”(hjõRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jñRh´MhjòRubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÖRubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jñRh´MhjíQubj©)�”}”(hŒV``__GFP_RETRY_MAYFAIL`` Try really hard to succeed the allocation but fail eventually.”h]”(j¯)�”}”(hŒ``__GFP_RETRY_MAYFAIL``”h]”jS)�”}”(hjSh]”hŒ__GFP_RETRY_MAYFAIL”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjSubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MhjSubjÉ)�”}”(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.Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j*Sh´Mhj+Subah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjSubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j*Sh´MhjíQubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj”Oubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjU3h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmalloc_nolock (C function)”Œc.kmalloc_nolock”hNt”auh1hÜhjU3h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ>void * kmalloc_nolock (size_t size, gfp_t gfp_flags, int node)”h]”hù)�”}”(hŒ)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj»Sh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¸Subah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j½SŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjžSsbŒc.kmalloc_nolock”†”asbuh1hhj´Subjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛSh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj´Subj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjéSh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj´Subeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj°Subj>)�”}”(hŒgfp_t gfp_flags”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjTubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jTŒmodname”NŒ classname”Njìjï)�”}”jò]”j×SŒc.kmalloc_nolock”†”asbuh1hhjþSubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#Th²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjþSubj)�”}”(hŒ gfp_flags”h]”hŒ gfp_flags”…”�”}”(hj1Th²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjþSubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj°Subj>)�”}”(hŒint node”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjJTh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjFTubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXTh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjFTubj)�”}”(hŒnode”h]”hŒnode”…”�”}”(hjfTh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjFTubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj°Subeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjjSh²hh³j|Sh´M&ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjfSh²hh³j|Sh´M&ubah}”(h]”jaSah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j|Sh´M&hjcSh²hubj4)�”}”(hhh]”jM)�”}”(hŒ2Allocate an object of given size from any context.”h]”hŒ2Allocate an object of given size from any context.”…”�”}”(hj�Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M&hj�Th²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjcSh²hh³j|Sh´M&ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¨TjHj¨TjI‰jJ‰jK‰uh1híh²hhjU3h³Nh´Nubj„)�”}”(hX¼**Parameters** ``size_t size`` size to allocate ``gfp_t gfp_flags`` GFP flags. Only __GFP_ACCOUNT and __GFP_ZERO allowed. Also __GFP_NOWARN and __GFP_NOMEMALLOC are allowed but added internally thus not necessary. ``int node`` node number of the target node. **Return** pointer to the new object or NULL in case of error. 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²Th]”hŒ Parameters”…”�”}”(hj´Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj°Tubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M*hj¬Tubj¤)�”}”(hhh]”(j©)�”}”(hŒ!``size_t size`` size to allocate ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hjÑTh]”hŒ size_t size”…”�”}”(hjÓTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÏTubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M'hjËTubjÉ)�”}”(hhh]”jM)�”}”(hŒsize to allocate”h]”hŒsize to allocate”…”�”}”(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'hjÈTubj©)�”}”(hŒ§``gfp_t gfp_flags`` GFP flags. Only __GFP_ACCOUNT and __GFP_ZERO allowed. Also __GFP_NOWARN and __GFP_NOMEMALLOC are allowed but added internally thus not necessary. ”h]”(j¯)�”}”(hŒ``gfp_t gfp_flags``”h]”jS)�”}”(hj Uh]”hŒgfp_t gfp_flags”…”�”}”(hj Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjUubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M*hjUubjÉ)�”}”(hhh]”jM)�”}”(hŒ’GFP flags. Only __GFP_ACCOUNT and __GFP_ZERO allowed. Also __GFP_NOWARN and __GFP_NOMEMALLOC are allowed but added internally thus not necessary.”h]”hŒ’GFP flags. Only __GFP_ACCOUNT and __GFP_ZERO allowed. Also __GFP_NOWARN and __GFP_NOMEMALLOC are allowed but added internally thus not necessary.”…”�”}”(hj#Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M(hj Uubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjUubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jUh´M*hjÈTubj©)�”}”(hŒ-``int node`` node number of the target node. ”h]”(j¯)�”}”(hŒ ``int node``”h]”jS)�”}”(hjDUh]”hŒint node”…”�”}”(hjFUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjBUubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M+hj>UubjÉ)�”}”(hhh]”jM)�”}”(hŒnode number of the target node.”h]”hŒnode number of the target node.”…”�”}”(hj]Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jYUh´M+hjZUubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj>Uubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jYUh´M+hjÈTubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¬TubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjUh]”hŒReturn”…”�”}”(hj�Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj}Uubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M-hj¬TubjM)�”}”(hŒžpointer to the new object or NULL in case of error. NULL does not mean EBUSY or EAGAIN. It means ENOMEM. There is no reason to call it again and expect !NULL.”h]”hŒžpointer to the new object or NULL in case of error. NULL does not mean EBUSY or EAGAIN. It means ENOMEM. There is no reason to call it again and expect !NULL.”…”�”}”(hj•Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M-hj¬Tubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjU3h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ__alloc_objs (C macro)”Œc.__alloc_objs”hNt”auh1hÜhjU3h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ __alloc_objs”h]”hù)�”}”(hŒ __alloc_objs”h]”hÿ)�”}”(hŒ __alloc_objs”h]”j)�”}”(hj¾Uh]”hŒ __alloc_objs”…”�”}”(hjÈUh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÄUubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÀUh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M6ubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¼Uh²hh³jÛUh´M6ubah}”(h]”j·Uah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÛUh´M6hj¹Uh²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¹Uh²hh³jÛUh´M6ubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGjôUjHjôUjI‰jJ‰jK‰uh1híh²hhjU3h³Nh´NubjM)�”}”(hŒ,``__alloc_objs (KMALLOC, GFP, TYPE, COUNT)``”h]”jS)�”}”(hjúUh]”hŒ(__alloc_objs (KMALLOC, GFP, TYPE, COUNT)”…”�”}”(hjüUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjøUubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M8hjU3h²hubji)�”}”(hŒ'Allocate objects of a given type using ”h]”jM)�”}”(hŒ&Allocate objects of a given type using”h]”hŒ&Allocate objects of a given type using”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M6hjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j"Vh´M6hjU3h²hubj„)�”}”(hXP**Parameters** ``KMALLOC`` which size-based kmalloc wrapper to allocate with. ``GFP`` GFP flags for the allocation. ``TYPE`` type to allocate space for. ``COUNT`` how many **TYPE** objects to allocate. **Return** Newly allocated pointer to (first) **TYPE** of **COUNT**-many allocated **TYPE** objects, or NULL on failure.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj/Vh]”hŒ Parameters”…”�”}”(hj1Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj-Vubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M:hj)Vubj¤)�”}”(hhh]”(j©)�”}”(hŒ?``KMALLOC`` which size-based kmalloc wrapper to allocate with. ”h]”(j¯)�”}”(hŒ ``KMALLOC``”h]”jS)�”}”(hjNVh]”hŒKMALLOC”…”�”}”(hjPVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjLVubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M7hjHVubjÉ)�”}”(hhh]”jM)�”}”(hŒ2which size-based kmalloc wrapper to allocate with.”h]”hŒ2which size-based kmalloc wrapper to allocate with.”…”�”}”(hjgVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jcVh´M7hjdVubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjHVubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jcVh´M7hjEVubj©)�”}”(hŒ&``GFP`` GFP flags for the allocation. ”h]”(j¯)�”}”(hŒ``GFP``”h]”jS)�”}”(hj‡Vh]”hŒGFP”…”�”}”(hj‰Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj…Vubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M8hj�VubjÉ)�”}”(hhh]”jM)�”}”(hŒGFP flags for the allocation.”h]”hŒGFP flags for the allocation.”…”�”}”(hj Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jœVh´M8hj�Vubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�Vubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jœVh´M8hjEVubj©)�”}”(hŒ%``TYPE`` type to allocate space for. ”h]”(j¯)�”}”(hŒ``TYPE``”h]”jS)�”}”(hjÀVh]”hŒTYPE”…”�”}”(hjÂVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¾Vubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M9hjºVubjÉ)�”}”(hhh]”jM)�”}”(hŒtype to allocate space for.”h]”hŒtype to allocate space for.”…”�”}”(hjÙVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÕVh´M9hjÖVubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjºVubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÕVh´M9hjEVubj©)�”}”(hŒ1``COUNT`` how many **TYPE** objects to allocate. ”•’h]”(j¯)�”}”(hŒ ``COUNT``”h]”jS)�”}”(hjùVh]”hŒCOUNT”…”�”}”(hjûVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj÷Vubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M:hjóVubjÉ)�”}”(hhh]”jM)�”}”(hŒ&how many **TYPE** objects to allocate.”h]”(hŒ how many ”…”�”}”(hjWh²hh³Nh´NubjŽ)�”}”(hŒ**TYPE**”h]”hŒTYPE”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjWubhŒ objects to allocate.”…”�”}”(hjWh²hh³Nh´Nubeh}”(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:hjEVubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj)VubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjFWh]”hŒReturn”…”�”}”(hjHWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjDWubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M<hj)VubjM)�”}”(hŒmNewly allocated pointer to (first) **TYPE** of **COUNT**-many allocated **TYPE** objects, or NULL on failure.”h]”(hŒ#Newly allocated pointer to (first) ”…”�”}”(hj\Wh²hh³Nh´NubjŽ)�”}”(hŒ**TYPE**”h]”hŒTYPE”…”�”}”(hjdWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj\WubhŒ of ”…”�”}”(hj\Wh²hh³Nh´NubjŽ)�”}”(hŒ **COUNT**”h]”hŒCOUNT”…”�”}”(hjvWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj\WubhŒ-many allocated ”…”�”}”(hj\Wh²hh³Nh´NubjŽ)�”}”(hŒ**TYPE**”h]”hŒTYPE”…”�”}”(hjˆWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj\WubhŒ objects, or NULL on failure.”…”�”}”(hj\Wh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M<hj)Vubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjU3h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ__alloc_flex (C macro)”Œc.__alloc_flex”hNt”auh1hÜhjU3h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ __alloc_flex”h]”hù)�”}”(hŒ __alloc_flex”h]”hÿ)�”}”(hŒ __alloc_flex”h]”j)�”}”(hj»Wh]”hŒ __alloc_flex”…”�”}”(hjÅWh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÁWubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj½Wh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MFubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¹Wh²hh³jØWh´MFubah}”(h]”j´Wah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jØWh´MFhj¶Wh²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¶Wh²hh³jØWh´MFubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGjñWjHjñWjI‰jJ‰jK‰uh1híh²hhjU3h³Nh´NubjM)�”}”(hŒ1``__alloc_flex (KMALLOC, GFP, TYPE, FAM, COUNT)``”h]”jS)�”}”(hj÷Wh]”hŒ-__alloc_flex (KMALLOC, GFP, TYPE, FAM, COUNT)”…”�”}”(hjùWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjõWubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MHhjU3h²hubji)�”}”(hŒ6Allocate an object that has a trailing flexible array ”h]”jM)�”}”(hŒ5Allocate an object that has a trailing flexible array”h]”hŒ5Allocate an object that has a trailing flexible array”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MFhj Xubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jXh´MFhjU3h²hubj„)�”}”(hX%**Parameters** ``KMALLOC`` kmalloc wrapper function to use for allocation. ``GFP`` GFP flags for the allocation. ``TYPE`` type of structure to allocate space for. ``FAM`` The name of the flexible array member of **TYPE** structure. ``COUNT`` how many **FAM** elements to allocate space for. **Return** 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]”(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³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MJhj&Xubj¤)�”}”(hhh]”(j©)�”}”(hŒ<``KMALLOC`` kmalloc wrapper function to use for allocation. ”h]”(j¯)�”}”(hŒ ``KMALLOC``”h]”jS)�”}”(hjKXh]”hŒKMALLOC”…”�”}”(hjMXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjIXubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MGhjEXubjÉ)�”}”(hhh]”jM)�”}”(hŒ/kmalloc wrapper function to use for allocation.”h]”hŒ/kmalloc wrapper function to use for allocation.”…”�”}”(hjdXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j`Xh´MGhjaXubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjEXubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j`Xh´MGhjBXubj©)�”}”(hŒ&``GFP`` GFP flags for the allocation. ”h]”(j¯)�”}”(hŒ``GFP``”h]”jS)�”}”(hj„Xh]”hŒGFP”…”�”}”(hj†Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‚Xubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MHhj~XubjÉ)�”}”(hhh]”jM)�”}”(hŒGFP flags for the allocation.”h]”hŒGFP flags for the allocation.”…”�”}”(hj�Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j™Xh´MHhjšXubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj~Xubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j™Xh´MHhjBXubj©)�”}”(hŒ2``TYPE`` type of structure to allocate space for. ”h]”(j¯)�”}”(hŒ``TYPE``”h]”jS)�”}”(hj½Xh]”hŒTYPE”…”�”}”(hj¿Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj»Xubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MIhj·XubjÉ)�”}”(hhh]”jM)�”}”(hŒ(type of structure to allocate space for.”h]”hŒ(type of structure to allocate space for.”…”�”}”(hjÖXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÒXh´MIhjÓXubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj·Xubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÒXh´MIhjBXubj©)�”}”(hŒE``FAM`` The name of the flexible array member of **TYPE** structure. ”h]”(j¯)�”}”(hŒ``FAM``”h]”jS)�”}”(hjöXh]”hŒFAM”…”�”}”(hjøXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjôXubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MJhjðXubjÉ)�”}”(hhh]”jM)�”}”(hŒ)�”}”(hŒsize_t n”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjZ_h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjW_ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j\_Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj=_sbŒc.kmalloc_array”†”asbuh1hhjS_ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjz_h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjS_ubj)�”}”(hjh]”hŒn”…”�”}”(hjˆ_h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjS_ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjO_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”jèŒ reftarget”j¥_Œmodname”NŒ classname”Njìjï)�”}”jò]”jv_Œc.kmalloc_array”†”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=hjO_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”jèŒ reftarget”jí_Œmodname”NŒ classname”Njìjï)�”}”jò]”jv_Œc.kmalloc_array”†”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=hjO_ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj _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 for an array.”h]”hŒallocate memory for an array.”…”�”}”(hjA`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./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&]”jFjAjGjY`jHjY`jI‰jJ‰jK‰uh1híh²hhjU3h³Nh´Nubj„)�”}”(hŒ”**Parameters** ``size_t n`` number of elements. ``size_t size`` element size. ``gfp_t flags`` the type of memory to allocate (see kmalloc).”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:40: ./include/linux/slab.h”h´MÄhj]`ubj¤)�”}”(hhh]”(j©)�”}”(hŒ!``size_t n`` number of elements. ”h]”(j¯)�”}”(hŒ ``size_t n``”h]”jS)�”}”(hj‚`h]”hŒsize_t n”…”�”}”(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:40: ./include/linux/slab.h”h´MÁhj|`ubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of elements.”h]”hŒnumber of elements.”…”�”}”(hj›`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j—`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Œ``size_t size`` element size. ”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³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MÂhjµ`ubjÉ)�”}”(hhh]”jM)�”}”(hŒ element size.”h]”hŒ element 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Âhjy`ubj©)�”}”(hŒ=``gfp_t flags`` the type of memory to allocate (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³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MÄhjî`ubjÉ)�”}”(hhh]”jM)�”}”(hŒ-the type of memory to allocate (see kmalloc).”h]”hŒ-the type of memory to allocate (see kmalloc).”…”�”}”(hj ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MÃhj aubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjî`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j ah´MÄhjy`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj]`ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjU3h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkrealloc_array (C function)”Œc.krealloc_array”hNt”auh1hÜhjU3h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒKvoid * krealloc_array (void *p, size_t new_n, size_t new_size, gfp_t flags)”h]”hù)�”}”(hŒIvoid *krealloc_array(void *p, size_t new_n, size_t new_size, gfp_t flags)”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjNah²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjJah²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MØubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]ah²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjJah²hh³j\ah´MØubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjkah²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjJah²hh³j\ah´MØubhÿ)�”}”(hŒkrealloc_array”h]”j)�”}”(hŒkrealloc_array”h]”hŒkrealloc_array”…”�”}”(hj|ah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjxaubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjJah²hh³j\ah´MØubj8)�”}”(hŒ5(void *p, size_t new_n, size_t new_size, gfp_t flags)”h]”(j>)�”}”(hŒvoid *p”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”aubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj´ah²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj”aubj)�”}”(hj~h]”hŒp”…”�”}”(hjÁah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj”aubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj�aubj>)�”}”(hŒ size_t new_n”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÜah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙaubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÞaŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj~asbŒc.krealloc_array”†”asbuh1hhjÕaubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüah²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÕaubj)�”}”(hŒnew_n”h]”hŒnew_n”…”�”}”(hj bh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕaubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj�aubj>)�”}”(hŒsize_t new_size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj&bh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj#bubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j(bŒmodname”NŒ classname”Njìjï)�”}”jò]”jøaŒc.krealloc_array”†”asbuh1hhjbubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDbh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjbubj)�”}”(hŒnew_size”h]”hŒnew_size”…”�”}”(hjRbh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjbubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj�aubj>)�”}”(hŒ gfp_t flags”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjnbh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjkbubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jpbŒmodname”NŒ classname”Njìjï)�”}”jò]”jøaŒc.krealloc_array”†”asbuh1hhjgbubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒbh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjgbubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjšbh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjgbubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj�aubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjJah²hh³j\ah´MØubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjFah²hh³j\ah´MØubah}”(h]”jAaah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j\ah´MØhjCah²hubj4)�”}”(hhh]”jM)�”}”(hŒreallocate memory for an array.”h]”hŒreallocate memory for an array.”…”�”}”(hjÄbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MØhjÁbh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjCah²hh³j\ah´MØubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÜbjHjÜbjI‰jJ‰jK‰uh1híh²hhjU3h³Nh´Nubj„)�”}”(hX¸**Parameters** ``void *p`` pointer to the memory chunk to reallocate ``size_t new_n`` new number of elements to alloc ``size_t new_size`` new size of a single member of the array ``gfp_t flags`` the type of memory to allocate (see kmalloc) **Description** 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. See krealloc_noprof() for further details. In any case, the contents of the object pointed to are preserved up to the lesser of the new and old sizes.”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³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MÜhjàbubj¤)�”}”(hhh]”(j©)�”}”(hŒ6``void *p`` pointer to the memory chunk to reallocate ”h]”(j¯)�”}”(hŒ ``void *p``”h]”jS)�”}”(hjch]”hŒvoid *p”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjcubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MÙhjÿbubjÉ)�”}”(hhh]”jM)�”}”(hŒ)pointer to the memory chunk to reallocate”h]”hŒ)pointer to the memory chunk to reallocate”…”�”}”(hjch²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Œ1``size_t new_n`` new number of elements to alloc ”h]”(j¯)�”}”(hŒ``size_t new_n``”h]”jS)�”}”(hj>ch]”hŒ size_t new_n”…”�”}”(hj@ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjñeh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjîeubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jóeŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÔesbŒ c.kzalloc”†”asbuh1hhjêeubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjêeubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjêeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjæeubj>)�”}”(hŒ gfp_t flags”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj;fh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj8fubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j=fŒmodname”NŒ classname”Njìjï)�”}”jò]”j fŒ c.kzalloc”†”asbuh1hhj4fubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYfh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj4fubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjgfh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjæeubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj eh²hh³j²eh´M%ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjœeh²hh³j²eh´M%ubah}”(h]”j—eah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j²eh´M%hj™eh²hubj4)�”}”(hhh]”jM)�”}”(hŒ+allocate memory. The memory is set to zero.”h]”hŒ+allocate memory. The memory is set to zero.”…”�”}”(hj‘fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M%hjŽfh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj™eh²hh³j²eh´M%ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj©fjHj©fjI‰jJ‰jK‰uh1híh²hhjU3h³Nh´Nubj„)�”}”(hŒ‰**Parameters** ``size_t size`` how many bytes of memory are required. ``gfp_t flags`` the type of memory to allocate (see kmalloc).”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³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M)hj­fubj¤)�”}”(hhh]”(j©)�”}”(hŒ7``size_t size`` how many bytes of memory are required. ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hjÒfh]”hŒ size_t size”…”�”}”(hjÔfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÐfubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M&hjÌfubjÉ)�”}”(hhh]”jM)�”}”(hŒ&how many bytes of memory are required.”h]”hŒ&how many bytes of memory are required.”…”�”}”(hjëfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jçfh´M&hjèfubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÌfubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jçfh´M&hjÉfubj©)�”}”(hŒ=``gfp_t flags`` the type of memory to allocate (see kmalloc).”h]”(j¯)�”}”(hŒ``gfp_t flags``”h]”jS)�”}”(hj gh]”hŒ gfp_t flags”…”�”}”(hj gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj gubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M(hjgubjÉ)�”}”(hhh]”jM)�”}”(hŒ-the type of memory to allocate (see kmalloc).”h]”hŒ-the type of memory to allocate (see kmalloc).”…”�”}”(hj$gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M'hj!gubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j gh´M(hjÉfubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj­fubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjU3h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkvmalloc_node (C function)”Œc.kvmalloc_node”hNt”auh1hÜhjU3h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ9void * kvmalloc_node (size_t size, gfp_t flags, int node)”h]”hù)�”}”(hŒ7void *kvmalloc_node(size_t size, gfp_t flags, int node)”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjegh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjagh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M6ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtgh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjagh²hh³jsgh´M6ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj‚gh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjagh²hh³jsgh´M6ubhÿ)�”}”(hŒ kvmalloc_node”h]”j)�”}”(hŒ kvmalloc_node”h]”hŒ kvmalloc_node”…”�”}”(hj“gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�gubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjagh²hh³jsgh´M6ubj8)�”}”(hŒ$(size_t size, gfp_t flags, int node)”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”jèŒ reftarget”j´gŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj•gsbŒc.kvmalloc_node”†”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 flags”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjügh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjùgubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jþgŒmodname”NŒ classname”Njìjï)�”}”jò]”jÎgŒc.kvmalloc_node”†”asbuh1hhjõgubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjõgubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj(hh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjõgubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj§gubj>)�”}”(hŒint node”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjAhh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj=hubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOhh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj=hubj)�”}”(hŒnode”h]”hŒnode”…”�”}”(hj]hh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj=hubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj§gubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjagh²hh³jsgh´M6ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj]gh²hh³jsgh´M6ubah}”(h]”jXgah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jsgh´M6hjZgh²hubj4)�”}”(hhh]”jM)�”}”(hŒuattempt to allocate physically contiguous memory, but upon failure, fall back to non-contiguous (vmalloc) allocation.”h]”hŒuattempt to allocate physically contiguous memory, but upon failure, fall back to non-contiguous (vmalloc) allocation.”…”�”}”(hj‡hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M6hj„hh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjZgh²hh³jsgh´M6ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjŸhjHjŸhjI‰jJ‰jK‰uh1híh²hhjU3h³Nh´Nubj„)�”}”(hX**Parameters** ``size_t size`` size of the request. ``gfp_t flags`` gfp mask for the allocation - must be compatible (superset) with GFP_KERNEL. ``int node`` numa node to allocate from **Description** Only alignments up to those guaranteed by kmalloc() will be honored. Please see Documentation/core-api/memory-allocation.rst for more details. Uses kmalloc to get the memory but if the allocation fails then falls back to the vmalloc allocator. Use kvfree for freeing the memory. 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. **Return** pointer to the allocated memory of ``NULL`` in case of failure”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³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M:hj£hubj¤)�”}”(hhh]”(j©)�”}”(hŒ%``size_t size`` size of the request. ”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³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M8hjÂhubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of the request.”h]”hŒsize of the request.”…”�”}”(hjáhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÝhh´M8hjÞhubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÂhubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÝhh´M8hj¿hubj©)�”}”(hŒ]``gfp_t flags`` gfp mask for the allocation - must be compatible (superset) with GFP_KERNEL. ”h]”(j¯)�”}”(hŒ``gfp_t flags``”h]”jS)�”}”(hjih]”hŒ gfp_t flags”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÿhubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M9hjûhubjÉ)�”}”(hhh]”jM)�”}”(hŒLgfp mask for the allocation - must be compatible (superset) with GFP_KERNEL.”h]”hŒLgfp mask for the allocation - must be compatible (superset) with GFP_KERNEL.”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jih´M9hjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjûhubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jih´M9hj¿hubj©)�”}”(hŒ(``int node`` numa node to allocate from ”h]”(j¯)�”}”(hŒ ``int node``”h]”jS)�”}”(hj:ih]”hŒint node”…”�”}”(hjhj£hubjM)�”}”(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©ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MAhj£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³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MEhj£hubjM)�”}”(hŒ>pointer to the allocated memory of ``NULL`` in case of failure”h]”(hŒ#pointer to the allocated memory of ”…”�”}”(hjÐih²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjØih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÐiubhŒ in case of failure”…”�”}”(hjÐih²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MFhj£hubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjU3h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!kvrealloc_node_align (C function)”Œc.kvrealloc_node_align”hNt”auh1hÜhjU3h²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”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj jh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Mmubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj jh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj jh²hh³jjh´Mmubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj.jh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj jh²hh³jjh´Mmubhÿ)�”}”(hŒkvrealloc_node_align”h]”j)�”}”(hŒkvrealloc_node_align”h]”hŒkvrealloc_node_align”…”�”}”(hj?jh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj;jubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj jh²hh³jjh´Mmubj8)�”}”(hŒG(const void *p, size_t size, unsigned long align, gfp_t flags, int nid)”h]”(j>)�”}”(hŒ const void *p”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hj[jh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjWjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjWjubjá)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjvjh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjWjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„jh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjWjubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj’jh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjWjubj)�”}”(hj~h]”hŒp”…”�”}”(hjŸjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjWjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjSjubj>)�”}”(hŒ size_t size”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”jèŒ reftarget”j¼jŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjAjsbŒc.kvrealloc_node_align”†”asbuh1hhj³jubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj³jubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjèjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj³jubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjSjubj>)�”}”(hŒunsigned long align”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjýjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjýjubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjkh²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Œalign”h]”hŒalign”…”�”}”(hj9kh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjýjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjSjubj>)�”}”(hŒ gfp_t flags”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjUkh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjRkubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jWkŒmodname”NŒ classname”Njìjï)�”}”jò]”jÖjŒc.kvrealloc_node_align”†”asbuh1hhjNkubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjskh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjNkubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj�kh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjNkubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjSjubj>)�”}”(hŒint nid”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Œnid”h]”hŒnid”…”�”}”(hj¶kh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj–kubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjSjubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj jh²hh³jjh´Mmubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj jh²hh³jjh´Mmubah}”(h]”jjah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jjh´Mmhjjh²hubj4)�”}”(hhh]”jM)�”}”(hŒ,reallocate memory; contents remain unchanged”h]”hŒ,reallocate memory; contents remain unchanged”…”�”}”(hjàkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MmhjÝkh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjjh²hh³jjh´Mmubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjøkjHjøkjI‰jJ‰jK‰uh1híh²hhjU3h³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Ž)�”}”(hjlh]”hŒ Parameters”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Mqhjükubj¤)�”}”(hhh]”(j©)�”}”(hŒ2``const void *p`` object to reallocate memory for ”h]”(j¯)�”}”(hŒ``const void *p``”h]”jS)�”}”(hj!lh]”hŒ const void *p”…”�”}”(hj#lh²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:40: ./include/linux/slab.h”h´MnhjlubjÉ)�”}”(hhh]”jM)�”}”(hŒobject to reallocate memory for”h]”hŒobject to reallocate memory for”…”�”}”(hj:lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j6lh´Mnhj7lubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjlubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j6lh´Mnhjlubj©)�”}”(hŒ'``size_t size`` the size to reallocate ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hjZlh]”hŒ size_t size”…”�”}”(hj\lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjXlubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MohjTlubjÉ)�”}”(hhh]”jM)�”}”(hŒthe size to reallocate”h]”hŒthe size to reallocate”…”�”}”(hjslh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jolh´Mohjplubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjTlubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jolh´Mohjlubj©)�”}”(hŒ*``unsigned long align`` desired alignment ”h]”(j¯)�”}”(hŒ``unsigned long align``”h]”jS)�”}”(hj“lh]”hŒunsigned long align”…”�”}”(hj•lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‘lubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´Mphj�lubjÉ)�”}”(hhh]”jM)�”}”(hŒdesired alignment”h]”hŒdesired alignment”…”�”}”(hj¬lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¨lh´Mphj©lubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�lubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¨lh´Mphjlubj©)�”}”(hŒ7``gfp_t flags`` the flags for the page level allocator ”h]”(j¯)�”}”(hŒ``gfp_t flags``”h]”jS)�”}”(hjÌlh]”hŒ gfp_t flags”…”�”}”(hjÎlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÊlubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MqhjÆlubjÉ)�”}”(hhh]”jM)�”}”(hŒ&the flags for the page level allocator”h]”hŒ&the flags for the page level allocator”…”�”}”(hjålh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jálh´Mqhjâlubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÆlubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jálh´Mqhjlubj©)�”}”(hŒ``int nid`` NUMA node id ”h]”(j¯)�”}”(hŒ ``int nid``”h]”jS)�”}”(hjmh]”hŒint nid”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjmubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MrhjÿlubjÉ)�”}”(hhh]”jM)�”}”(hŒ NUMA node id”h]”hŒ NUMA node id”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jmh´Mrhjmubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÿlubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jmh´Mrhjlubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjükubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj@mh]”hŒ Description”…”�”}”(hjBmh²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:40: ./include/linux/slab.h”h´MthjükubjM)�”}”(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 ”…”�”}”(hjVmh²hh³Nh´NubjŽ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj^mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjVmubhŒ is ”…”�”}”(hjVmh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjpmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjVmubhŒ2, kvrealloc() behaves exactly like kvmalloc(). If ”…”�”}”(hjVmh²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj‚mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjVmubhŒ is 0 and ”…”�”}”(hjVmh²hh³Nh´NubjŽ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj”mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjVmubhŒ is not a ”…”�”}”(hjVmh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj¦mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjVmubhŒ) pointer, the object pointed to is freed.”…”�”}”(hjVmh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MshjükubjM)�”}”(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¿mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MvhjükubjM)�”}”(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Îmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´MyhjükubjM)�”}”(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Ýmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M~hjükubjM)�”}”(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ìmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M�hjükubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjýmh]”hŒReturn”…”�”}”(hjÿmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjûmubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M„hjükubjM)�”}”(hŒ)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj©nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦nubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j«nŒmodname”NŒ classname”Njìjï)�”}”jò]”jsnŒc.kmalloc_size_roundup”†”asbuh1hhj¢nubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇnh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¢nubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(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&]”jjuh1j7hjPnh²hh³jxnh´M£ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjLnh²hh³jxnh´M£ubah}”(h]”jGnah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jxnh´M£hjInh²hubj4)�”}”(hhh]”jM)�”}”(hŒ0Report allocation bucket size for the given size”h]”hŒ0Report allocation bucket size for the given size”…”�”}”(hjÿnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M£hjünh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjInh²hh³jxnh´M£ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjojHjojI‰jJ‰jK‰uh1híh²hhjU3h³Nh´Nubj„)�”}”(hX!**Parameters** ``size_t size`` Number of bytes to round up from. **Description** This returns the number of bytes that would be available in a kmalloc() allocation of **size** bytes. For example, a 126 byte request would be rounded up to the next sized kmalloc bucket, 128 bytes. (This is strictly for the general-purpose kmalloc()-based allocations, and is not for the pre-sized kmem_cache_alloc()-based allocations.) Use this to kmalloc() the full bucket size ahead of time instead of using ksize() to query the size after an allocation.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj!oh]”hŒ Parameters”…”�”}”(hj#oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjoubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M§hjoubj¤)�”}”(hhh]”j©)�”}”(hŒ2``size_t size`` Number of bytes to round up from. ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hj@oh]”hŒ size_t size”…”�”}”(hjBoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj>oubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M¥hj:oubjÉ)�”}”(hhh]”jM)�”}”(hŒ!Number of bytes to round up from.”h]”hŒ!Number of bytes to round up from.”…”�”}”(hjYoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jUoh´M¥hjVoubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj:oubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jUoh´M¥hj7oubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjoubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj{oh]”hŒ Description”…”�”}”(hj}oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjyoubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M§hjoubjM)�”}”(hXQThis returns the number of bytes that would be available in a kmalloc() allocation of **size** bytes. For example, a 126 byte request would be rounded up to the next sized kmalloc bucket, 128 bytes. (This is strictly for the general-purpose kmalloc()-based allocations, and is not for the pre-sized kmem_cache_alloc()-based allocations.)”h]”(hŒVThis returns the number of bytes that would be available in a kmalloc() allocation 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. For example, a 126 byte request would be rounded up to the next sized kmalloc bucket, 128 bytes. (This is strictly for the general-purpose kmalloc()-based allocations, and is not for the pre-sized kmem_cache_alloc()-based allocations.)”…”�”}”(hj‘oh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M¦hjoubjM)�”}”(hŒxUse this to kmalloc() the full bucket size ahead of time instead of using ksize() to query the size after an allocation.”h]”hŒxUse this to kmalloc() the full bucket size ahead of time instead of using ksize() to query the size after an allocation.”…”�”}”(hj²oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:40: ./include/linux/slab.h”h´M¬hjoubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjU3h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"kmem_cache_alloc_node (C function)”Œc.kmem_cache_alloc_node”hNt”auh1hÜhjU3h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒMvoid * kmem_cache_alloc_node (struct kmem_cache *s, gfp_t gfpflags, int node)”h]”hù)�”}”(hŒKvoid *kmem_cache_alloc_node(struct kmem_cache *s, gfp_t gfpflags, int node)”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjáoh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÝoh²hh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´MÜubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðoh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÝoh²hh³jïoh´MÜubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjþoh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÝoh²hh³jïoh´MÜubhÿ)�”}”(hŒkmem_cache_alloc_node”h]”j)�”}”(hŒkmem_cache_alloc_node”h]”hŒkmem_cache_alloc_node”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj pubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÝoh²hh³jïoh´MÜubj8)�”}”(hŒ0(struct kmem_cache *s, gfp_t gfpflags, int node)”h]”(j>)�”}”(hŒstruct kmem_cache *s”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj+ph²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj'pubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8ph²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj'pubh)�”}”(hhh]”j)�”}”(hŒ kmem_cache”h]”hŒ kmem_cache”…”�”}”(hjIph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjFpubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jKpŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjpsbŒc.kmem_cache_alloc_node”†”asbuh1hhj'pubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjiph²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj'pubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjwph²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj'pubj)�”}”(hŒs”h]”hŒs”…”�”}”(hj„ph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj'pubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj#pubj>)�”}”(hŒgfp_t gfpflags”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj ph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�pubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j¢pŒmodname”NŒ classname”Njìjï)�”}”jò]”jepŒc.kmem_cache_alloc_node”†”asbuh1hhj™pubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾ph²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj™pubj)�”}”(hŒgfpflags”h]”hŒgfpflags”…”�”}”(hjÌph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™pubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj#pubj>)�”}”(hŒint node”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(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Œnode”h]”hŒnode”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjápubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj#pubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÝ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Œ(Allocate an object on the specified node”h]”hŒ(Allocate an object on the specified node”…”�”}”(hj+qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´MÜhj(qh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÖoh²hh³jïoh´MÜubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjCqjHjCqjI‰jJ‰jK‰uh1híh²hhjU3h³Nh´Nubj„)�”}”(hX¼**Parameters** ``struct kmem_cache *s`` The cache to allocate from. ``gfp_t gfpflags`` See kmalloc(). ``int node`` node number of the target node. **Description** Identical to kmem_cache_alloc but it will allocate memory on the given node, which can improve the performance for cpu bound structures. Fallback to other node is possible if __GFP_THISNODE is not set. **Return** pointer to the new object or ``NULL`` in case of error”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjMqh]”hŒ Parameters”…”�”}”(hjOqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjKqubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´MàhjGqubj¤)�”}”(hhh]”(j©)�”}”(hŒ5``struct kmem_cache *s`` The cache to allocate from. ”h]”(j¯)�”}”(hŒ``struct kmem_cache *s``”h]”jS)�”}”(hjlqh]”hŒstruct kmem_cache *s”…”�”}”(hjnqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjjqubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´MÝhjfqubjÉ)�”}”(hhh]”jM)�”}”(hŒThe cache to allocate from.”h]”hŒThe cache to allocate from.”…”�”}”(hj…qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�qh´MÝhj‚qubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjfqubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�qh´MÝhjcqubj©)�”}”(hŒ"``gfp_t gfpflags`` See kmalloc(). ”h]”(j¯)�”}”(hŒ``gfp_t gfpflags``”h]”jS)�”}”(hj¥qh]”hŒgfp_t gfpflags”…”�”}”(hj§qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj£qubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´MÞhjŸqubjÉ)�”}”(hhh]”jM)�”}”(hŒSee kmalloc().”h]”hŒSee kmalloc().”…”�”}”(hj¾qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jºqh´MÞhj»qubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjŸqubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jºqh´MÞhjcqubj©)�”}”(hŒ-``int node`` node number of the target node. ”h]”(j¯)�”}”(hŒ ``int node``”h]”jS)�”}”(hjÞqh]”hŒint node”…”�”}”(hjàqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÜqubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´MßhjØqubjÉ)�”}”(hhh]”jM)�”}”(hŒnode number of the target node.”h]”hŒnode number of the target node.”…”�”}”(hj÷qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jóqh´Mßhjôqubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjØqubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jóqh´Mßhjcqubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjGqubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjrh]”hŒ Description”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjrubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´MáhjGqubjM)�”}”(hŒˆIdentical to kmem_cache_alloc but it will allocate memory on the given node, which can improve the performance for cpu bound structures.”h]”hŒˆIdentical to kmem_cache_alloc but it will allocate memory on the given node, which can improve the performance for cpu bound structures.”…”�”}”(hj/rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´MàhjGqubjM)�”}”(hŒ@Fallback to other node is possible if __GFP_THISNODE is not set.”h]”hŒ@Fallback to other node is possible if __GFP_THISNODE is not set.”…”�”}”(hj>rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´MãhjGqubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjOrh]”hŒReturn”…”�”}”(hjQrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjMrubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´MåhjGqubjM)�”}”(hŒ6pointer to the new object or ``NULL`` in case of error”h]”(hŒpointer to the new object or ”…”�”}”(hjerh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjmrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjerubhŒ in case of error”…”�”}”(hjerh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´MæhjGqubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjU3h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmem_cache_free (C function)”Œc.kmem_cache_free”hNt”auh1hÜhjU3h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ4void kmem_cache_free (struct kmem_cache *s, void *x)”h]”hù)�”}”(hŒ3void kmem_cache_free(struct kmem_cache *s, void *x)”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¦rh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj¢rh²hh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´MJubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµrh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¢rh²hh³j´rh´MJubhÿ)�”}”(hŒkmem_cache_free”h]”j)�”}”(hŒkmem_cache_free”h]”hŒkmem_cache_free”…”�”}”(hjÇrh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÃrubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¢rh²hh³j´rh´MJubj8)�”}”(hŒ(struct kmem_cache *s, void *x)”h]”(j>)�”}”(hŒstruct kmem_cache *s”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjãrh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjßrubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðrh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjßrubh)�”}”(hhh]”j)�”}”(hŒ kmem_cache”h]”hŒ kmem_cache”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjþrubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jsŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÉrsbŒc.kmem_cache_free”†”asbuh1hhjßrubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!sh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjßrubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj/sh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjßrubj)�”}”(hj†ph]”hŒs”…”�”}”(hj)�”}”(hŒvoid *x”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjTsh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjPsubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbsh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjPsubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjpsh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjPsubj)�”}”(hŒx”h]”hŒx”…”�”}”(hj}sh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjPsubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÛrubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj¢rh²hh³j´rh´MJubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjžrh²hh³j´rh´MJubah}”(h]”j™rah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j´rh´MJhj›rh²hubj4)�”}”(hhh]”jM)�”}”(hŒDeallocate an object”h]”hŒDeallocate an object”…”�”}”(hj§sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´MJhj¤sh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj›rh²hh³j´rh´MJubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¿sjHj¿sjI‰jJ‰jK‰uh1híh²hhjU3h³Nh´Nubj„)�”}”(hŒÎ**Parameters** ``struct kmem_cache *s`` The cache the allocation was from. ``void *x`` The previously allocated object. **Description** Free an object which was previously allocated from this cache.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÉsh]”hŒ Parameters”…”�”}”(hjËsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÇsubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´MNhjÃsubj¤)�”}”(hhh]”(j©)�”}”(hŒ<``struct kmem_cache *s`` The cache the allocation was from. ”h]”(j¯)�”}”(hŒ``struct kmem_cache *s``”h]”jS)�”}”(hjèsh]”hŒstruct kmem_cache *s”…”�”}”(hjêsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjæsubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´MKhjâsubjÉ)�”}”(hhh]”jM)�”}”(hŒ"The cache the allocation was from.”h]”hŒ"The cache the allocation was from.”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jýsh´MKhjþsubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjâsubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jýsh´MKhjßsubj©)�”}”(hŒ-``void *x`` The previously allocated object. ”h]”(j¯)�”}”(hŒ ``void *x``”h]”jS)�”}”(hj!th]”hŒvoid *x”…”�”}”(hj#th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjtubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´MLhjtubjÉ)�”}”(hhh]”jM)�”}”(hŒ The previously allocated object.”h]”hŒ The previously allocated object.”…”�”}”(hj:th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j6th´MLhj7tubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjtubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j6th´MLhjßsubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÃsubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj\th]”hŒ Description”…”�”}”(hj^th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjZtubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´MNhjÃsubjM)�”}”(hŒ>Free an object which was previously allocated from this cache.”h]”hŒ>Free an object which was previously allocated from this cache.”…”�”}”(hjrth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´MMhjÃsubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjU3h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒksize (C function)”Œc.ksize”hNt”auh1hÜhjU3h²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¤th²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¡tubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j¦tŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒksize”sbŒc.ksize”†”asbuh1hhj�th²hh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´M ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆth²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�th²hh³jÅth´M ubhÿ)�”}”(hŒksize”h]”j)�”}”(hjÂth]”hŒksize”…”�”}”(hjØth²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÔtubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj�th²hh³jÅth´M ubj8)�”}”(hŒ(const void *objp)”h]”j>)�”}”(hŒconst void *objp”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjóth²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjïtubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjïtubjá)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjïtubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjïtubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj*uh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjïtubj)�”}”(hŒobjp”h]”hŒobjp”…”�”}”(hj7uh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjïtubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjëtubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj�th²hh³jÅth´M ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj™th²hh³jÅth´M ubah}”(h]”j”tah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÅth´M hj–th²hubj4)�”}”(hhh]”j^)�”}”(hhh]”jc)�”}”(hŒ)Report full size of underlying allocation”h]”jM)�”}”(hjfuh]”hŒ)Report full size of underlying allocation”…”�”}”(hjhuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´M hjduubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjauh²hh³juuh´Nubah}”(h]”h ]”h"]”h$]”h&]”j‚jƒuh1j]h³juuh´M hj^uh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj–th²hh³jÅth´M ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj‹ujHj‹ujI‰jJ‰jK‰uh1híh²hhjU3h³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•uh]”hŒ Parameters”…”�”}”(hj—uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj“uubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´M¤hj�uubj¤)�”}”(hhh]”j©)�”}”(hŒ+``const void *objp`` pointer to the object ”h]”(j¯)�”}”(hŒ``const void *objp``”h]”jS)�”}”(hj´uh]”hŒconst void *objp”…”�”}”(hj¶uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj²uubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´M¡hj®uubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to the object”h]”hŒpointer to the object”…”�”}”(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¡hj«uubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj�uubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjïuh]”hŒ Description”…”�”}”(hjñuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjíuubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´M£hj�uubjM)�”}”(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.”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´M¢hj�uubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjvh]”hŒReturn”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjvubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´M¨hj�uubjM)�”}”(hŒ3size of the actual memory used by **objp** in bytes”h]”(hŒ"size of the actual memory used by ”…”�”}”(hj,vh²hh³Nh´NubjŽ)�”}”(hŒ**objp**”h]”hŒobjp”…”�”}”(hj4vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj,vubhŒ in bytes”…”�”}”(hj,vh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´M©hj�uubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjU3h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkfree (C function)”Œc.kfree”hNt”auh1hÜhjU3h²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”…”�”}”(hjmvh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjivh²hh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´Mñubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|vh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjivh²hh³j{vh´Mñubhÿ)�”}”(hŒkfree”h]”j)�”}”(hŒkfree”h]”hŒkfree”…”�”}”(hjŽvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŠvubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjivh²hh³j{vh´Mñubj8)�”}”(hŒ(const void *object)”h]”j>)�”}”(hŒconst void *object”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjªvh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¦vubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·vh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¦vubjá)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÅvh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj¦vubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓvh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¦vubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjávh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¦vubj)�”}”(hŒobject”h]”hŒobject”…”�”}”(hjîvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦vubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¢vubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjivh²hh³j{vh´Mñubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjevh²hh³j{vh´Mñubah}”(h]”j`vah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j{vh´Mñhjbvh²hubj4)�”}”(hhh]”jM)�”}”(hŒ free previously allocated memory”h]”hŒ free previously allocated memory”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´Mñhjwh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjbvh²hh³j{vh´Mñubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj0wjHj0wjI‰jJ‰jK‰uh1híh²hhjU3h³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:wh]”hŒ Parameters”…”�”}”(hj)�”}”(hŒconst void *addr”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hj(xh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj$xubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5xh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj$xubjá)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjCxh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj$xubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQxh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj$xubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj_xh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj$xubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjlxh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj$xubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj xubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjçwh²hh³jùwh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjãwh²hh³jùwh´Mubah}”(h]”jÞwah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jùwh´Mhjàwh²hubj4)�”}”(hhh]”jM)�”}”(hŒ Free memory.”h]”hŒ Free memory.”…”�”}”(hj–xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´Mhj“xh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjàwh²hh³jùwh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj®xjHj®xjI‰jJ‰jK‰uh1híh²hhjU3h³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¸xh]”hŒ Parameters”…”�”}”(hjºxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¶xubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´Mhj²xubj¤)�”}”(hhh]”j©)�”}”(hŒ2``const void *addr`` Pointer to allocated memory. ”h]”(j¯)�”}”(hŒ``const void *addr``”h]”jS)�”}”(hj×xh]”hŒconst void *addr”…”�”}”(hjÙxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÕxubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´MhjÑxubjÉ)�”}”(hhh]”jM)�”}”(hŒPointer to allocated memory.”h]”hŒPointer to allocated memory.”…”�”}”(hjðxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jìxh´Mhjíxubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÑxubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jìxh´MhjÎxubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj²xubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjyh]”hŒ Description”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´Mhj²xubjM)�”}”(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(yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´Mhj²xubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hj9yh]”hŒContext”…”�”}”(hj;yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj7yubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´M hj²xubjM)�”}”(hŒ5Either preemptible task context or not-NMI interrupt.”h]”hŒ5Either preemptible task context or not-NMI interrupt.”…”�”}”(hjOyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´M hj²xubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjU3h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkvfree_atomic (C function)”Œc.kvfree_atomic”hNt”auh1hÜhjU3h²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~yh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjzyh²hh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�yh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjzyh²hh³jŒyh´Mubhÿ)�”}”(hŒ kvfree_atomic”h]”j)�”}”(hŒ kvfree_atomic”h]”hŒ kvfree_atomic”…”�”}”(hjŸyh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj›yubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjzyh²hh³jŒyh´Mubj8)�”}”(hŒ(const void *addr)”h]”j>)�”}”(hŒconst void *addr”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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·yubjá)�”}”(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·yubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjòyh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj·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=hj³yubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjzyh²hh³jŒyh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjvyh²hh³jŒyh´Mubah}”(h]”jqyah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jŒyh´Mhjsyh²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:43: ./mm/slub.c”h´Mhj&zh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjsyh²hh³jŒyh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjAzjHjAzjI‰jJ‰jK‰uh1híh²hhjU3h³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Ž)�”}”(hjKzh]”hŒ Parameters”…”�”}”(hjMzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjIzubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´MhjEzubj¤)�”}”(hhh]”j©)�”}”(hŒ2``const void *addr`` Pointer to allocated memory. ”h]”(j¯)�”}”(hŒ``const void *addr``”h]”jS)�”}”(hjjzh]”hŒconst void *addr”…”�”}”(hjlzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjhzubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´MhjdzubjÉ)�”}”(hhh]”jM)�”}”(hŒPointer to allocated memory.”h]”hŒPointer to allocated memory.”…”�”}”(hjƒzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jzh´Mhj€zubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjdzubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jzh´Mhjazubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjEzubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj¥zh]”hŒ Description”…”�”}”(hj§zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj£zubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´MhjEzubjM)�”}”(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»zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´MhjEzubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjU3h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkvfree_sensitive (C function)”Œc.kvfree_sensitive”hNt”auh1hÜhjU3h²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êzh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjæzh²hh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´M&ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùzh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjæzh²hh³jøzh´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æzh²hh³jøzh´M&ubj8)�”}”(hŒ(const void *addr, size_t len)”h]”(j>)�”}”(hŒconst void *addr”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œ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#{ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj^{h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj#{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Œ 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”jèŒ reftarget”j‰{Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj {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&]”jjuh1j7hjæzh²hh³jøzh´M&ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjâzh²hh³jøzh´M&ubah}”(h]”jÝzah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jøzh´M&hjßzh²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:43: ./mm/slub.c”h´M&hjÜ{h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjßzh²hh³jøzh´M&ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj÷{jHj÷{jI‰jJ‰jK‰uh1híh²hhjU3h³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:43: ./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:43: ./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.”…”�”}”(hj9|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j5|h´M'hj6|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j5|h´M'hj|ubj©)�”}”(hŒ*``size_t len`` length of the data object. ”h]”(j¯)�”}”(hŒ``size_t len``”h]”jS)�”}”(hjY|h]”hŒ size_t len”…”�”}”(hj[|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjW|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´M(hjS|ubjÉ)�”}”(hhh]”jM)�”}”(hŒlength of the data object.”h]”hŒlength of the data object.”…”�”}”(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(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:43: ./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:43: ./mm/slub.c”h´M)hjû{ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjU3h²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ÜhjU3h²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:43: ./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¥ubj8)�”}”(hŒ:(struct kmem_cache *s, gfp_t flags, size_t size, void **p)”h]”(j>)�”}”(hŒstruct kmem_cache *s”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj}ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"}h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj}ubh)�”}”(hhh]”j)�”}”(hŒ kmem_cache”h]”hŒ kmem_cache”…”�”}”(hj3}h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj0}ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j5}Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjû|sbŒc.kmem_cache_alloc_bulk”†”asbuh1hhj}ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjS}h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj}ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hja}h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj}ubj)�”}”(hj†ph]”hŒs”…”�”}”(hjn}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”jèŒ reftarget”j‹}Œmodname”NŒ classname”Njìjï)�”}”jò]”jO}Œ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”jèŒ reftarget”jÓ}Œmodname”NŒ classname”Njìjï)�”}”jò]”jO}Œ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~ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj2~h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj~ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj?~h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj~ubj)�”}”(hj~h]”hŒp”…”�”}”(hjL~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&]”jjuh1j7hjÕ|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”…”�”}”(hju~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´M¥hjr~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²hhjU3h³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:43: ./mm/slub.c”h´M©hj‘~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:43: ./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:43: ./mm/slub.c”h´M§hjé~ubjÉ)�”}”(hhh]”jM)�”}”(hŒGFP_* flags. See kmalloc().”h]”hŒGFP_* flags. See kmalloc().”…”�”}”(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Œ.``size_t size`` Number of objects 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³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´M¨hj"ubjÉ)�”}”(hhh]”jM)�”}”(hŒNumber of objects to allocate”h]”hŒNumber of objects to allocate”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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 **p`` Array of allocated objects ”h]”(j¯)�”}”(hŒ ``void **p``”h]”jS)�”}”(hjah]”hŒvoid **p”…”�”}”(hjch²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:43: ./mm/slub.c”h´M©hj[ubjÉ)�”}”(hhh]”jM)�”}”(hŒArray of allocated objects”h]”hŒArray of allocated objects”…”�”}”(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©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:43: ./mm/slub.c”h´M«hj‘~ubjM)�”}”(hŒaAllocate **size** objects from **s** and places them into **p**. **size** must be larger than 0.”h]”(hŒ Allocate ”…”�”}”(hj²h²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj²ubhŒ objects from ”…”�”}”(hj²h²hh³Nh´NubjŽ)�”}”(hŒ**s**”h]”hŒs”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj²ubhŒ and places them into ”…”�”}”(hj²h²hh³Nh´NubjŽ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj²ubhŒ. ”…”�”}”(hj²h²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj²ubhŒ must be larger than 0.”…”�”}”(hj²h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´Mªhj‘~ubjM)�”}”(hŒ6Interrupts must be enabled when calling this function.”h]”hŒ6Interrupts must be enabled when calling this function.”…”�”}”(hj €h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´M­hj‘~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 ”…”�”}”(hj€h²hh³Nh´NubjŽ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj €h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj€ubhŒ/, and thus the caller does not need to zero it.”…”�”}”(hj€h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”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³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´M²hj‘~ubjM)�”}”(hŒ@``true`` if the allocation succeeded, or ``false`` if it failed.”h]”(jS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjU€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjQ€ubhŒ! if the allocation succeeded, or ”…”�”}”(hjQ€h²hh³Nh´NubjS)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjg€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjQ€ubhŒ if it failed.”…”�”}”(hjQ€h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:43: ./mm/slub.c”h´M³hj‘~ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjU3h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%__kmem_cache_create_args (C function)”Œc.__kmem_cache_create_args”hNt”auh1hÜhjU3h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ‹struct kmem_cache * __kmem_cache_create_args (const char *name, unsigned int object_size, struct kmem_cache_args *args, slab_flags_t flags)”h]”hù)�”}”(hŒ‰struct kmem_cache *__kmem_cache_create_args(const char *name, unsigned int object_size, struct kmem_cache_args *args, slab_flags_t flags)”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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:46: ./mm/slab_common.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Œ 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”jèŒ reftarget”jÁ€Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒ__kmem_cache_create_args”sbŒc.__kmem_cache_create_args”†”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$ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjî€h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjœ€h²hh³j­€h´M$ubhÿ)�”}”(hŒ__kmem_cache_create_args”h]”j)�”}”(hjÝ€h]”hŒ__kmem_cache_create_args”…”�”}”(hjÿ€h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjû€ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjœ€h²hh³j­€h´M$ubj8)�”}”(hŒ^(const char *name, unsigned int object_size, struct kmem_cache_args *args, slab_flags_t flags)”h]”(j>)�”}”(hŒconst char *name”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj�ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'�h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�ubjá)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj5�h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj�ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjC�h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjQ�h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj�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 object_size”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjw�h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjs�ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…�h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjs�ubjá)�”}”(hŒint”h]”hŒint”…”�”}”(hj“�h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjs�ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡�h²hh³Nh´Nubah}”(h]”•h ]”jÿah"]”h$]”h&]”uh1jòhjs�ubj)�”}”(hŒ object_size”h]”hŒ object_size”…”�”}”(hj¯�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjs�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj�ubj>)�”}”(hŒstruct kmem_cache_args *args”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÈ�h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÄ�ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕ�h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÄ�ubh)�”}”(hhh]”j)�”}”(hŒkmem_cache_args”h]”hŒkmem_cache_args”…”�”}”(hjæ�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjã�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jè�Œmodname”NŒ classname”Njìjï)�”}”jò]”jÛ€Œc.__kmem_cache_create_args”†”asbuh1hhjÄ�ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÄ�ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÄ�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�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&]”uh1jhj8‚ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j=‚Œmodname”NŒ classname”Njìjï)�”}”jò]”jÛ€Œc.__kmem_cache_create_args”†”asbuh1hhj4‚ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY‚h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj4‚ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjg‚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&]”jjuh1j7hjœ€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 kmem cache.”h]”hŒCreate a kmem cache.”…”�”}”(hj‘‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.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²hhjU3h³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 an 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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”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”…”�”}”(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:46: ./mm/slab_common.c”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.”…”�”}”(hjë‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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ŒN``unsigned int object_size`` The size of objects to be created in this cache. ”h]”(j¯)�”}”(hŒ``unsigned int object_size``”h]”jS)�”}”(hj ƒh]”hŒunsigned int object_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:46: ./mm/slab_common.c”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&hjÉ‚ubj©)�”}”(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)�”}”(hjDƒh]”hŒstruct kmem_cache_args *args”…”�”}”(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:46: ./mm/slab_common.c”h´M(hj>ƒubjÉ)�”}”(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]ƒh²hh³Nh´Nubh)�”}”(hŒ2:c:type:`struct kmem_cache_args `”h]”jS)�”}”(hjgƒh]”hŒstruct kmem_cache_args”…”�”}”(hjiƒh²hh³Nh´Nubah}”(h]”h ]”(j%4jAŒc-type”eh"]”h$]”h&]”uh1jRhjeƒubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j14Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jìj74j:4Œkmem_cache_args”uh1hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´M'hj]ƒubhŒ).”…”�”}”(hj]ƒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j„ƒ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Œ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¡ƒ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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´M*hj›ƒubjÉ)�”}”(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ºƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´M,hj­‚ubjM)�”}”(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óƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´M+hj­‚ubjM)�”}”(hŒCommonly used **flags**:”h]”(hŒCommonly used ”…”�”}”(hj„h²hh³Nh´NubjŽ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hj „h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj„ubhŒ:”…”�”}”(hj„h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´M.hj­‚ubjM)�”}”(hŒ6:c:type:`SLAB_ACCOUNT` - Account allocations to memcg.”h]”(h)�”}”(hŒ:c:type:`SLAB_ACCOUNT`”h]”jS)�”}”(hj)„h]”hŒ SLAB_ACCOUNT”…”�”}”(hj+„h²hh³Nh´Nubah}”(h]”h ]”(j%4jAŒc-type”eh"]”h$]”h&]”uh1jRhj'„ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j14Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jìj74j:4Œ SLAB_ACCOUNT”uh1hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´M0hj#„ubhŒ - Account allocations to memcg.”…”�”}”(hj#„h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jF„h´M0hj­‚ubjM)�”}”(hŒF:c:type:`SLAB_HWCACHE_ALIGN` - Align objects on cache line boundaries.”h]”(h)�”}”(hŒ:c:type:`SLAB_HWCACHE_ALIGN`”h]”jS)�”}”(hjW„h]”hŒSLAB_HWCACHE_ALIGN”…”�”}”(hjY„h²hh³Nh´Nubah}”(h]”h ]”(j%4jAŒc-type”eh"]”h$]”h&]”uh1jRhjU„ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j14Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jìj74j:4ŒSLAB_HWCACHE_ALIGN”uh1hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´M2hjQ„ubhŒ* - Align objects on cache line boundaries.”…”�”}”(hjQ„h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jt„h´M2hj­‚ubjM)�”}”(hŒ9:c:type:`SLAB_RECLAIM_ACCOUNT` - Objects are reclaimable.”h]”(h)�”}”(hŒ:c:type:`SLAB_RECLAIM_ACCOUNT`”h]”jS)�”}”(hj…„h]”hŒSLAB_RECLAIM_ACCOUNT”…”�”}”(hj‡„h²hh³Nh´Nubah}”(h]”h ]”(j%4jAŒc-type”eh"]”h$]”h&]”uh1jRhjƒ„ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j14Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jìj74j:4ŒSLAB_RECLAIM_ACCOUNT”uh1hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´M4hj„ubhŒ - Objects are reclaimable.”…”�”}”(hj„h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¢„h´M4hj­‚ubjM)�”}”(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³„h]”hŒSLAB_TYPESAFE_BY_RCU”…”�”}”(hjµ„h²hh³Nh´Nubah}”(h]”h ]”(j%4jAŒc-type”eh"]”h$]”h&]”uh1jRhj±„ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j14Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jìj74j:4ŒSLAB_TYPESAFE_BY_RCU”uh1hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´M6hj­„ubhŒp - Slab page (not individual objects) freeing delayed by a grace period - see the full description before using.”…”�”}”(hj­„h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jЄh´M6hj­‚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:46: ./mm/slab_common.c”h´M9hj­‚ubjM)�”}”(hŒ=Cannot be called within an interrupt, but can be interrupted.”h]”hŒ=Cannot be called within an interrupt, but can be interrupted.”…”�”}”(hjó„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.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:46: ./mm/slab_common.c”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.”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´M<hj­‚ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjU3h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ kmem_buckets_create (C function)”Œc.kmem_buckets_create”hNt”auh1hÜhjU3h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ�kmem_buckets * kmem_buckets_create (const char *name, slab_flags_t flags, unsigned int useroffset, unsigned int usersize, void (*ctor)(void *))”h]”hù)�”}”(hŒŒkmem_buckets *kmem_buckets_create(const char *name, slab_flags_t flags, unsigned int useroffset, unsigned int usersize, void (*ctor)(void*))”h]”(h)�”}”(hhh]”j)�”}”(hŒ kmem_buckets”h]”hŒ kmem_buckets”…”�”}”(hjL…h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjI…ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jN…Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒkmem_buckets_create”sbŒc.kmem_buckets_create”†”asbuh1hhjE…h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´Mžubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjn…h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjE…h²hh³jm…h´Mžubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj|…h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjE…h²hh³jm…h´Mžubhÿ)�”}”(hŒkmem_buckets_create”h]”j)�”}”(hjj…h]”hŒkmem_buckets_create”…”�”}”(hj�…h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‰…ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjE…h²hh³jm…h´Mžubj8)�”}”(hŒk(const char *name, slab_flags_t flags, unsigned int useroffset, unsigned int usersize, void (*ctor)(void*))”h]”(j>)�”}”(hŒconst char *name”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hj¨…h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¤…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¤…ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjß…h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¤…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Œ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”jèŒ reftarget”j †Œmodname”NŒ classname”Njìjï)�”}”jò]”jh…Œc.kmem_buckets_create”†”asbuh1hhj†ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&†h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj†ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj4†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”…”�”}”(hjM†h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjI†ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[†h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjI†ubjá)�”}”(hŒint”h]”hŒint”…”�”}”(hji†h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjI†ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjw†h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjI†ubj)�”}”(hŒ useroffset”h]”hŒ useroffset”…”�”}”(hj…†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjI†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Œ ”…”�”}”(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Œusersize”h]”hŒusersize”…”�”}”(hjÖ†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àhjë†ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý†h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjë†ubjr)�”}”(hj�?h]”hŒ(”…”�”}”(hj ‡h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjë†ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjë†ubj)�”}”(hŒctor”h]”hŒctor”…”�”}”(hj%‡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjë†ubjr)�”}”(hjÆ?h]”hŒ)”…”�”}”(hj3‡h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjë†ubjr)�”}”(hj�?h]”hŒ(”…”�”}”(hj@‡h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjë†ubjá)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjM‡h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjë†ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj[‡h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjë†ubjr)�”}”(hjÆ?h]”hŒ)”…”�”}”(hjh‡h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjë†ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj …ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjE…h²hh³jm…h´Mžubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjA…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ŒUCreate a set of caches that handle dynamic sized allocations via kmem_buckets_alloc()”h]”hŒUCreate a set of caches that handle dynamic sized allocations via kmem_buckets_alloc()”…”�”}”(hj‘‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´Mžhjއh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj>…h²hh³jm…h´Mžubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj©‡jHj©‡jI‰jJ‰jK‰uh1híh²hhjU3h³Nh´Nubj„)�”}”(hX**Parameters** ``const char *name`` A prefix string which is used in /proc/slabinfo to identify this cache. The individual caches with have their sizes as the suffix. ``slab_flags_t flags`` SLAB flags (see kmem_cache_create() for details). ``unsigned int useroffset`` Starting offset within an allocation that may be copied to/from userspace. ``unsigned int usersize`` How many bytes, starting at **useroffset**, may be copied to/from userspace. ``void (*ctor)(void *)`` A constructor for the objects, run when new allocations are made. **Context** Cannot be called within an interrupt, but can be interrupted. **Return** a pointer to the cache on success, NULL on failure. When CONFIG_SLAB_BUCKETS is not enabled, ZERO_SIZE_PTR is returned, and subsequent calls to kmem_buckets_alloc() will fall back to kmalloc(). (i.e. callers only need to check for 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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´M¢hj­‡ubj¤)�”}”(hhh]”(j©)�”}”(hŒ˜``const char *name`` A prefix string which is used in /proc/slabinfo to identify this cache. The individual caches with have their sizes as the suffix. ”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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´M¡hj̇ubjÉ)�”}”(hhh]”jM)�”}”(hŒ‚A prefix string which is used in /proc/slabinfo to identify this cache. The individual caches with have their sizes as the suffix.”h]”hŒ‚A prefix string which is used in /proc/slabinfo to identify this cache. The individual caches with have their sizes as the suffix.”…”�”}”(hjë‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.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ŒI``slab_flags_t flags`` SLAB flags (see kmem_cache_create() for details). ”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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´M¢hjˆubjÉ)�”}”(hhh]”jM)�”}”(hŒ1SLAB flags (see kmem_cache_create() for details).”h]”hŒ1SLAB flags (see kmem_cache_create() for details).”…”�”}”(hj%ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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 useroffset`` Starting offset within an allocation that may be copied to/from userspace. ”h]”(j¯)�”}”(hŒ``unsigned int useroffset``”h]”jS)�”}”(hjEˆh]”hŒunsigned int useroffset”…”�”}”(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:46: ./mm/slab_common.c”h´M¤hj?ˆubjÉ)�”}”(hhh]”jM)�”}”(hŒJStarting offset within an allocation that may be copied to/from userspace.”h]”hŒJStarting offset within an allocation that may be copied to/from userspace.”…”�”}”(hj^ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”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Œg``unsigned int usersize`` How many bytes, starting at **useroffset**, may be copied to/from userspace. ”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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´M¦hjyˆubjÉ)�”}”(hhh]”jM)�”}”(hŒLHow many bytes, starting at **useroffset**, may be copied to/from userspace.”h]”(hŒHow many bytes, starting at ”…”�”}”(hj˜ˆh²hh³Nh´NubjŽ)�”}”(hŒ**useroffset**”h]”hŒ useroffset”…”�”}”(hj ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj˜ˆubhŒ", may be copied to/from userspace.”…”�”}”(hj˜ˆh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´M¥hj•ˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjyˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j”ˆh´M¦hjɇubj©)�”}”(hŒ[``void (*ctor)(void *)`` A constructor for the objects, run when new allocations are made. ”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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´M§hjňubjÉ)�”}”(hhh]”jM)�”}”(hŒAA constructor for the objects, run when new allocations are made.”h]”hŒAA constructor for the objects, run when new allocations are made.”…”�”}”(hjäˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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Œ **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:46: ./mm/slab_common.c”h´M©hj­‡ubjM)�”}”(hŒ=Cannot be called within an interrupt, but can be interrupted.”h]”hŒ=Cannot be called within an interrupt, but can be interrupted.”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.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:46: ./mm/slab_common.c”h´M«hj­‡ubjM)�”}”(hŒøa pointer to the cache on success, NULL on failure. When CONFIG_SLAB_BUCKETS is not enabled, ZERO_SIZE_PTR is returned, and subsequent calls to kmem_buckets_alloc() will fall back to kmalloc(). (i.e. callers only need to check for NULL on failure.)”h]”hŒøa pointer to the cache on success, NULL on failure. When CONFIG_SLAB_BUCKETS is not enabled, ZERO_SIZE_PTR is returned, and subsequent calls to kmem_buckets_alloc() will fall back to kmalloc(). (i.e. callers only need to check for NULL on failure.)”…”�”}”(hjC‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´M«hj­‡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjU3h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmem_cache_shrink (C function)”Œc.kmem_cache_shrink”hNt”auh1hÜhjU3h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ1int kmem_cache_shrink (struct kmem_cache *cachep)”h]”hù)�”}”(hŒ0int kmem_cache_shrink(struct kmem_cache *cachep)”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjr‰h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjn‰h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´Mbubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�‰h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjn‰h²hh³j€‰h´Mbubhÿ)�”}”(hŒkmem_cache_shrink”h]”j)�”}”(hŒkmem_cache_shrink”h]”hŒkmem_cache_shrink”…”�”}”(hj“‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�‰ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjn‰h²hh³j€‰h´Mbubj8)�”}”(hŒ(struct kmem_cache *cachep)”h]”j>)�”}”(hŒstruct kmem_cache *cachep”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¯‰h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj«‰ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼‰h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj«‰ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jωŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj•‰sbŒc.kmem_cache_shrink”†”asbuh1hhj«‰ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí‰h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj«‰ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjû‰h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj«‰ubj)�”}”(hŒcachep”h]”hŒcachep”…”�”}”(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&]”jjuh1j7hjn‰h²hh³j€‰h´Mbubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjj‰h²hh³j€‰h´Mbubah}”(h]”je‰ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j€‰h´Mbhjg‰h²hubj4)�”}”(hhh]”jM)�”}”(hŒShrink a cache.”h]”hŒShrink a cache.”…”�”}”(hj2Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´Mbhj/Šh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjg‰h²hh³j€‰h´Mbubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjJŠjHjJŠjI‰jJ‰jK‰uh1híh²hhjU3h³Nh´Nubj„)�”}”(hX**Parameters** ``struct kmem_cache *cachep`` The cache to shrink. **Description** Releases as many slabs as possible for a cache. To help debugging, a zero exit status indicates all slabs were released. **Return** ``0`` if all slabs were released, non-zero otherwise”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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´MfhjNŠubj¤)�”}”(hhh]”j©)�”}”(hŒ3``struct kmem_cache *cachep`` The cache to shrink. ”h]”(j¯)�”}”(hŒ``struct kmem_cache *cachep``”h]”jS)�”}”(hjsŠh]”hŒstruct kmem_cache *cachep”…”�”}”(hjuŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjqŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´MchjmŠubjÉ)�”}”(hhh]”jM)�”}”(hŒThe cache to shrink.”h]”hŒThe cache to shrink.”…”�”}”(hjŒŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jˆŠh´Mchj‰Šubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjmŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jˆŠh´MchjjŠ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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´MehjNŠubjM)�”}”(hŒxReleases as many slabs as possible for a cache. To help debugging, a zero exit status indicates all slabs were released.”h]”hŒxReleases as many slabs as possible for a cache. To help debugging, a zero exit status indicates all slabs were released.”…”�”}”(hjÄŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´MdhjNŠ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:46: ./mm/slab_common.c”h´MghjNŠubjM)�”}”(hŒ4``0`` if all slabs were released, non-zero otherwise”h]”(jS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hjïŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjëŠubhŒ/ if all slabs were released, non-zero otherwise”…”�”}”(hjëŠh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´MhhjNŠubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjU3h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmem_dump_obj (C function)”Œc.kmem_dump_obj”hNt”auh1hÜhjU3h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ!bool kmem_dump_obj (void *object)”h]”hù)�”}”(hŒ bool kmem_dump_obj(void *object)”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:46: ./mm/slab_common.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Œ kmem_dump_obj”h]”j)�”}”(hŒ kmem_dump_obj”h]”hŒ kmem_dump_obj”…”�”}”(hjH‹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjD‹ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj$‹h²hh³j5‹h´M€ubj8)�”}”(hŒ(void *object)”h]”j>)�”}”(hŒ void *object”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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`‹ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj€‹h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj`‹ubj)�”}”(hŒobject”h]”hŒobject”…”�”}”(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&]”jjuh1j7hj$‹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Œ+Print available slab provenance information”h]”hŒ+Print available slab provenance information”…”�”}”(hj·‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.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²hhjU3h³Nh´Nubj„)�”}”(hXÉ**Parameters** ``void *object`` slab object for which to find provenance information. **Description** This function uses pr_cont(), so that the caller is expected to have printed out whatever preamble is appropriate. The provenance information depends on the type of object and on how much debugging is enabled. For a slab-cache object, the fact that it is a slab object is printed, and, if available, the slab name, return address, and stack trace from the allocation and last free path of that object. **Return** ``true`` if the pointer is to a not-yet-freed object from kmalloc() or kmem_cache_alloc(), either ``true`` or ``false`` if the pointer is to an already-freed object, and ``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:46: ./mm/slab_common.c”h´M„hjÓ‹ubj¤)�”}”(hhh]”j©)�”}”(hŒG``void *object`` slab object for which to find provenance information. ”h]”(j¯)�”}”(hŒ``void *object``”h]”jS)�”}”(hjø‹h]”hŒ void *object”…”�”}”(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:46: ./mm/slab_common.c”h´M�hjò‹ubjÉ)�”}”(hhh]”jM)�”}”(hŒ5slab object for which to find provenance information.”h]”hŒ5slab object for which to find provenance information.”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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Ž)�”}”(hj3Œh]”hŒ Description”…”�”}”(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:46: ./mm/slab_common.c”h´MƒhjÓ‹ubjM)�”}”(hX’This function uses pr_cont(), so that the caller is expected to have printed out whatever preamble is appropriate. The provenance information depends on the type of object and on how much debugging is enabled. For a slab-cache object, the fact that it is a slab object is printed, and, if available, the slab name, return address, and stack trace from the allocation and last free path of that object.”h]”hX’This function uses pr_cont(), so that the caller is expected to have printed out whatever preamble is appropriate. The provenance information depends on the type of object and on how much debugging is enabled. For a slab-cache object, the fact that it is a slab object is printed, and, if available, the slab name, return address, and stack trace from the allocation and last free path of that object.”…”�”}”(hjIŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´M‰hjÓ‹ubjM)�”}”(hŒ¾``true`` if the pointer is to a not-yet-freed object from kmalloc() or kmem_cache_alloc(), either ``true`` or ``false`` if the pointer is to an already-freed object, and ``false`` otherwise.”h]”(jS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjtŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjpŒubhŒZ if the pointer is to a not-yet-freed object from kmalloc() or kmem_cache_alloc(), either ”…”�”}”(hjpŒh²hh³Nh´NubjS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj†Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjpŒubhŒ or ”…”�”}”(hjpŒh²hh³Nh´NubjS)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj˜Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjpŒubhŒ3 if the pointer is to an already-freed object, and ”…”�”}”(hjpŒh²hh³Nh´NubjS)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjªŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjpŒubhŒ otherwise.”…”�”}”(hjpŒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´MŠhjÓ‹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjU3h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkfree_sensitive (C function)”Œc.kfree_sensitive”hNt”auh1hÜhjU3h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ$void kfree_sensitive (const void *p)”h]”hù)�”}”(hŒ#void kfree_sensitive(const void *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:46: ./mm/slab_common.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Œkfree_sensitive”h]”j)�”}”(hŒkfree_sensitive”h]”hŒkfree_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ëubj8)�”}”(hŒ(const void *p)”h]”j>)�”}”(hŒ const void *p”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œvoid”h]”hŒvoid”…”�”}”(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�ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjW�h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj�ubj)�”}”(hj~h]”hŒp”…”�”}”(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&]”jjuh1j7hjߌ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Œ4Clear sensitive information in memory before freeing”h]”hŒ4Clear sensitive information in memory before freeing”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.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²hhjU3h³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¯�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:46: ./mm/slab_common.c”h´Mïhj©�ubj¤)�”}”(hhh]”j©)�”}”(hŒ+``const void *p`` object to free memory of ”h]”(j¯)�”}”(hŒ``const void *p``”h]”jS)�”}”(hjÎ�h]”hŒ const void *p”…”�”}”(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:46: ./mm/slab_common.c”h´MìhjÈ�ubjÉ)�”}”(hhh]”jM)�”}”(hŒobject to free memory of”h]”hŒobject to free memory 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Å�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:46: ./mm/slab_common.c”h´Mîhj©�ubjM)�”}”(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Žh²hh³Nh´NubjŽ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj'Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŽubhŒ& points to is zeroed before freed. If ”…”�”}”(hjŽh²hh³Nh´NubjŽ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj9Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŽubhŒ is ”…”�”}”(hjŽh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjKŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjŽubhŒ!, kfree_sensitive() does nothing.”…”�”}”(hjŽh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´Míhj©�ubjM)�”}”(hŒ**Note**”h]”jŽ)�”}”(hjfŽh]”hŒNote”…”�”}”(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:46: ./mm/slab_common.c”h´Mðhj©�ubjM)�”}”(hŒÉ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]”hŒÉ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.”…”�”}”(hj|Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:46: ./mm/slab_common.c”h´Mñhj©�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjU3h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkfree_const (C function)”Œ c.kfree_const”hNt”auh1hÜhjU3h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ void kfree_const (const void *x)”h]”hù)�”}”(hŒvoid kfree_const(const void *x)”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:49: ./mm/util.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Œ kfree_const”h]”j)�”}”(hŒ kfree_const”h]”hŒ kfree_const”…”�”}”(hjÌŽh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÈŽubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj§Žh²hh³j¹Žh´K&ubj8)�”}”(hŒ(const void *x)”h]”j>)�”}”(hŒ const void *x”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œ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äŽubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjäŽubj)�”}”(hjsh]”hŒx”…”�”}”(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&]”jjuh1j7hj§Ž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Œconditionally free memory”h]”hŒconditionally free memory”…”�”}”(hjU�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:49: ./mm/util.c”h´K&hjR�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj Žh²hh³j¹Žh´K&ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjm�jHjm�jI‰jJ‰jK‰uh1híh²hhjU3h³Nh´Nubj„)�”}”(hŒ‰**Parameters** ``const void *x`` pointer to the memory **Description** Function calls kfree only if **x** is not in .rodata section.”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³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:49: ./mm/util.c”h´K*hjq�ubj¤)�”}”(hhh]”j©)�”}”(hŒ(``const void *x`` pointer to the memory ”h]”(j¯)�”}”(hŒ``const void *x``”h]”jS)�”}”(hj–�h]”hŒ const void *x”…”�”}”(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:49: ./mm/util.c”h´K'hj��ubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to the memory”h]”hŒpointer to the memory”…”�”}”(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£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³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:49: ./mm/util.c”h´K)hjq�ubjM)�”}”(hŒ=Function calls kfree only if **x** is not in .rodata section.”h]”(hŒFunction calls kfree only if ”…”�”}”(hjç�h²hh³Nh´NubjŽ)�”}”(hŒ**x**”h]”hŒx”…”�”}”(hjï�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjç�ubhŒ is not in .rodata section.”…”�”}”(hjç�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒI/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:49: ./mm/util.c”h´K(hjq�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjU3h²hh³Nh´Nubeh}”(h]”Œthe-slab-cache”ah ]”h"]”Œthe slab cache”ah$]”h&]”uh1hµhh·h²hh³hÊh´K&ubh¶)�”}”(hhh]”(h»)�”}”(hŒVirtually Contiguous Mappings”h]”hŒVirtually Contiguous Mappings”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj�h²hh³hÊh´K5ubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvm_unmap_aliases (C function)”Œc.vm_unmap_aliases”hNt”auh1hÜhj�h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒvoid vm_unmap_aliases (void)”h]”hù)�”}”(hŒvoid vm_unmap_aliases(void)”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjA�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:55: ./mm/vmalloc.c”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Œvm_unmap_aliases”h]”j)�”}”(hŒvm_unmap_aliases”h]”hŒvm_unmap_aliases”…”�”}”(hjb�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj^�ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj=�h²hh³jO�h´Më ubj8)�”}”(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àhjz�ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjv�ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj=�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Œ0unmap outstanding lazy aliases in the vmap layer”h]”hŒ0unmap outstanding lazy aliases in the vmap layer”…”�”}”(hj¨�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´Më hj¥�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj6�h²hh³jO�h´Më ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÀ�jHjÀ�jI‰jJ‰jK‰uh1híh²hhj�h³Nh´Nubj„)�”}”(hXQ**Parameters** ``void`` no arguments **Description** The vmap/vmalloc layer lazily flushes kernel virtual mappings primarily to amortize TLB flushing overheads. What this means is that any page you have now, may, in a former life, have been mapped into kernel virtual address by the vmap layer and so there might be some CPUs with TLB entries still referencing that page (additional to the regular 1:1 kernel mapping). vm_unmap_aliases flushes all such lazy mappings. After it returns, we can be sure that none of the pages we have control over will have any aliases from the vmap layer.”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:55: ./mm/vmalloc.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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´KhjÄ�ubjM)�”}”(hXmThe vmap/vmalloc layer lazily flushes kernel virtual mappings primarily to amortize TLB flushing overheads. What this means is that any page you have now, may, in a former life, have been mapped into kernel virtual address by the vmap layer and so there might be some CPUs with TLB entries still referencing that page (additional to the regular 1:1 kernel mapping).”h]”hXmThe vmap/vmalloc layer lazily flushes kernel virtual mappings primarily to amortize TLB flushing overheads. What this means is that any page you have now, may, in a former life, have been mapped into kernel virtual address by the vmap layer and so there might be some CPUs with TLB entries still referencing that page (additional to the regular 1:1 kernel mapping).”…”�”}”(hj:‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´Mì hjÄ�ubjM)�”}”(hŒ¨vm_unmap_aliases flushes all such lazy mappings. After it returns, we can be sure that none of the pages we have control over will have any aliases from the vmap layer.”h]”hŒ¨vm_unmap_aliases flushes all such lazy mappings. After it returns, we can be sure that none of the pages we have control over will have any aliases from the vmap layer.”…”�”}”(hjI‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.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_unmap_ram (C function)”Œc.vm_unmap_ram”hNt”auh1hÜhj�h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ7void vm_unmap_ram (const void *mem, unsigned int count)”h]”hù)�”}”(hŒ6void vm_unmap_ram(const void *mem, unsigned int count)”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjx‘h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjt‘h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.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ÿ)�”}”(hŒ vm_unmap_ram”h]”j)�”}”(hŒ vm_unmap_ram”h]”hŒ vm_unmap_ram”…”�”}”(hj™‘h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj•‘ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjt‘h²hh³j†‘h´Mþ ubj8)�”}”(hŒ%(const void *mem, unsigned int count)”h]”(j>)�”}”(hŒconst void *mem”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œ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±‘ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjì‘h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj±‘ubj)�”}”(hŒmem”h]”hŒmem”…”�”}”(hjù‘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”…”�”}”(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”…”�”}”(hjJ’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&]”jjuh1j7hjt‘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Œ6unmap linear kernel address space set up by vm_map_ram”h]”hŒ6unmap linear kernel address space set up by vm_map_ram”…”�”}”(hjt’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´Mþ hjq’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„)�”}”(hŒ¢**Parameters** ``const void *mem`` the pointer returned by vm_map_ram ``unsigned int count`` the count passed to that vm_map_ram call (cannot unmap partial)”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:55: ./mm/vmalloc.c”h´M hj�’ubj¤)�”}”(hhh]”(j©)�”}”(hŒ7``const void *mem`` the pointer returned by vm_map_ram ”h]”(j¯)�”}”(hŒ``const void *mem``”h]”jS)�”}”(hjµ’h]”hŒconst void *mem”…”�”}”(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:55: ./mm/vmalloc.c”h´Mÿ hj¯’ubjÉ)�”}”(hhh]”jM)�”}”(hŒ"the pointer returned by vm_map_ram”h]”hŒ"the pointer returned by vm_map_ram”…”�”}”(hjÎ’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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ŒV``unsigned int count`` the count passed to that vm_map_ram call (cannot unmap partial)”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:55: ./mm/vmalloc.c”h´M hjè’ubjÉ)�”}”(hhh]”jM)�”}”(hŒ?the count passed to that vm_map_ram call (cannot unmap partial)”h]”hŒ?the count passed to that vm_map_ram call (cannot unmap partial)”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.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éŒvm_map_ram (C function)”Œ c.vm_map_ram”hNt”auh1hÜhj�h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒEvoid * vm_map_ram (struct page **pages, unsigned int count, int node)”h]”hù)�”}”(hŒCvoid *vm_map_ram(struct page **pages, unsigned int count, int node)”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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:55: ./mm/vmalloc.c”h´M ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW“h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjD“h²hh³jV“h´M ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hje“h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjD“h²hh³jV“h´M ubhÿ)�”}”(hŒ vm_map_ram”h]”j)�”}”(hŒ vm_map_ram”h]”hŒ vm_map_ram”…”�”}”(hjv“h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjr“ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjD“h²hh³jV“h´M ubj8)�”}”(hŒ3(struct page **pages, unsigned int count, int node)”h]”(j>)�”}”(hŒstruct page **pages”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj’“h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjŽ“ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ“h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjŽ“ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj°“h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj­“ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j²“Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjx“sbŒ c.vm_map_ram”†”asbuh1hhjŽ“ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjГh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjŽ“ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÞ“h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjŽ“ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjë“h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjŽ“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 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”…”�”}”(hjI”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”…”�”}”(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Œ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&]”jjuh1j7hjD“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Œ>map pages linearly into kernel virtual address (vmalloc space)”h]”hŒ>map pages linearly into kernel virtual address (vmalloc space)”…”�”}”(hj¨”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”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** ``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Ê”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:55: ./mm/vmalloc.c”h´M$ hjÄ”ubj¤)�”}”(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é”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:55: ./mm/vmalloc.c”h´M! hjã”ubjÉ)�”}”(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”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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 ”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:55: ./mm/vmalloc.c”h´M" hj•ubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages”h]”hŒnumber of pages”…”�”}”(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Œ=``int node`` prefer to allocate data structures on this node ”h]”(j¯)�”}”(hŒ ``int node``”h]”jS)�”}”(hj[•h]”hŒint node”…”�”}”(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:55: ./mm/vmalloc.c”h´M# hjU•ubjÉ)�”}”(hhh]”jM)�”}”(hŒ/prefer to allocate data structures on this node”h]”hŒ/prefer to allocate data structures on this node”…”�”}”(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à”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:55: ./mm/vmalloc.c”h´M% hjÄ”ubjM)�”}”(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¬•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´M$ hjÄ”ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj½•h]”hŒReturn”…”�”}”(hj¿•h²hh³Nh´Nubah}”(•Ah]”h ]”h"]”h$]”h&]”uh1j�hj»•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´M* hjÄ”ubjM)�”}”(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Ó•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:55: ./mm/vmalloc.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éŒvfree (C function)”Œc.vfree”hNt”auh1hÜhj�h²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”…”�”}”(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:55: ./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Œvfree”h]”j)�”}”(hŒvfree”h]”hŒvfree”…”�”}”(hj5–h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj1–ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj–h²hh³j"–h´M± ubj8)�”}”(hŒ(const void *addr)”h]”j>)�”}”(hŒconst void *addr”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjQ–h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjM–ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^–h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjM–ubjá)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjl–h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjM–ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjz–h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjM–ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjˆ–h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjM–ubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(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&]”jjuh1j7hj–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 memory allocated by vmalloc()”h]”hŒ%Release memory allocated by vmalloc()”…”�”}”(hj¿–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./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²hhj�h³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á–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:55: ./mm/vmalloc.c”h´Mµ hjÛ–ubj¤)�”}”(hhh]”j©)�”}”(hŒ)``const void *addr`` Memory base address ”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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´M² hjú–ubjÉ)�”}”(hhh]”jM)�”}”(hŒMemory base address”h]”hŒMemory base 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÷–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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´M´ hjÛ–ubjM)�”}”(hX&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.”h]”(hŒ6Free the virtually continuous memory area starting at ”…”�”}”(hjQ—h²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hjY—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjQ—ubhŒè, 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.”…”�”}”(hjQ—h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´M³ hjÛ–ubjM)�”}”(hŒ/If **addr** is NULL, no operation is performed.”h]”(hŒIf ”…”�”}”(hjr—h²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hjz—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjr—ubhŒ$ is NULL, no operation is performed.”…”�”}”(hjr—h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.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:55: ./mm/vmalloc.c”h´Mº hjÛ–ubjM)�”}”(hŒü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]”(hŒMay sleep if called ”…”�”}”(hj«—h²hh³Nh´Nubjí )�”}”(hŒ*not*”h]”hŒnot”…”�”}”(hj³—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jì hj«—ubhŒã 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).”…”�”}”(hj«—h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.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éŒvunmap (C function)”Œc.vunmap”hNt”auh1hÜhj�h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒvoid vunmap (const void *addr)”h]”hù)�”}”(hŒvoid vunmap(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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./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Œvunmap”h]”j)�”}”(hŒvunmap”h]”hŒvunmap”…”�”}”(hj ˜h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ˜ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjè—h²hh³jú—h´Mâ ubj8)�”}”(hŒ(const void *addr)”h]”j>)�”}”(hŒconst void *addr”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œvoid”h]”hŒvoid”…”�”}”(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%˜ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj`˜h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj%˜ubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(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&]”jjuh1j7hjè—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 virtual mapping obtained by vmap()”h]”hŒ*release virtual mapping obtained by vmap()”…”�”}”(hj—˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./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²hhj�h³Nh´Nubj„)�”}”(hŒî**Parameters** ``const void *addr`` memory base address **Description** Free the virtually contiguous memory area starting at **addr**, which was created from the page array passed to vmap(). Must not be called in interrupt context.”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:55: ./mm/vmalloc.c”h´Mæ hj³˜ubj¤)�”}”(hhh]”j©)�”}”(hŒ)``const void *addr`` memory base address ”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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´Mã hjÒ˜ubjÉ)�”}”(hhh]”jM)�”}”(hŒmemory base address”h]”hŒmemory base 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Ϙ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:55: ./mm/vmalloc.c”h´Må hj³˜ubjM)�”}”(hŒwFree the virtually contiguous memory area starting at **addr**, which was created from the page array passed to vmap().”h]”(hŒ6Free the virtually contiguous memory area starting at ”…”�”}”(hj)™h²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hj1™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj)™ubhŒ9, which was created from the page array passed to vmap().”…”�”}”(hj)™h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´Mä hj³˜ubjM)�”}”(hŒ(Must not be called in interrupt context.”h]”hŒ(Must not be called in interrupt context.”…”�”}”(hjJ™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.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éŒvmap (C function)”Œc.vmap”hNt”auh1hÜhj�h²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒYvoid * vmap (struct page **pages, unsigned int count, unsigned long flags, pgprot_t prot)”h]”hù)�”}”(hŒWvoid *vmap(struct page **pages, unsigned int count, unsigned long flags, pgprot_t prot)”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjy™h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhju™h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´Mþ ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ™h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhju™h²hh³j‡™h´Mþ ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj–™h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhju™h²hh³j‡™h´Mþ ubhÿ)�”}”(hŒvmap”h]”j)�”}”(hŒvmap”h]”hŒvmap”…”�”}”(hj§™h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj£™ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhju™h²hh³j‡™h´Mþ ubj8)�”}”(hŒM(struct page **pages, unsigned int count, unsigned long flags, pgprot_t prot)”h]”(j>)�”}”(hŒstruct page **pages”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¿™ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjЙh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¿™ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjá™h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÞ™ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j㙌modname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj©™sbŒc.vmap”†”asbuh1hhj¿™ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¿™ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¿™ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¿™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 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Œ ”…”�”}”(hjlšh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj>šubj)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjzš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Œ 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”jèŒ reftarget”j隌modname”NŒ classname”Njìjï)�”}”jò]”jý™Œc.vmap”†”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&]”jjuh1j7hju™h²hh³j‡™h´Mþ ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjq™h²hh³j‡™h´Mþ ubah}”(h]”jl™ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j‡™h´Mþ hjn™h²hubj4)�”}”(hhh]”jM)�”}”(hŒ5map an array of pages into virtually contiguous space”h]”hŒ5map an array of pages 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:55: ./mm/vmalloc.c”h´Mþ hj:›h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjn™h²hh³j‡™h´Mþ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjU›jHjU›jI‰jJ‰jK‰uh1híh²hhj�h³Nh´Nubj„)�”}”(hXz**Parameters** ``struct page **pages`` array of page pointers ``unsigned int count`` number of pages to map ``unsigned long flags`` vm_area->flags ``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Ž)�”}”(hj_›h]”hŒ Parameters”…”�”}”(hja›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:55: ./mm/vmalloc.c”h´MhjY›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:55: ./mm/vmalloc.c”h´Mÿ hjx›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Èhjx›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j“›h´Mÿ hju›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:55: ./mm/vmalloc.c”h´Mhj±›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´MhjÍ›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj±›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÌ›h´Mhju›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:55: ./mm/vmalloc.c”h´Mhjê›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´Mhjœubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjê›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jœh´Mhju›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:55: ./mm/vmalloc.c”h´Mhj#œubjÉ)�”}”(hhh]”jM)�”}”(hŒpage protection for the mapping”h]”hŒpage protection for the mapping”…”�”}”(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´Mhju›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjY›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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´MhjY›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 ”…”�”}”(hjzœh²hh³Nh´NubjŽ)�”}”(hŒ **count**”h]”hŒcount”…”�”}”(hj‚œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjzœubhŒ pages from ”…”�”}”(hjzœh²hh³Nh´NubjŽ)�”}”(hŒ **pages**”h]”hŒpages”…”�”}”(hj”œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjzœubhŒ* into contiguous kernel virtual space. If ”…”�”}”(hjzœh²hh³Nh´NubjŽ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hj¦œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjzœubhŒ contains ”…”�”}”(hjzœ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&]”uh1jRhjzœ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.”…”�”}”(hjzœh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´MhjY›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:55: ./mm/vmalloc.c”h´M hjY›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:55: ./mm/vmalloc.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éŒvmap_pfn (C function)”Œ c.vmap_pfn”hNt”auh1hÜhj�h²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:55: ./mm/vmalloc.c”h´MNubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9�h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj&�h²hh³j8�h´MNubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjG�h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj&�h²hh³j8�h´MNubhÿ)�”}”(hŒvmap_pfn”h]”j)�”}”(hŒvmap_pfn”h]”hŒvmap_pfn”…”�”}”(hjX�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjT�ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj&�h²hh³j8�h´MNubj8)�”}”(hŒ8(unsigned long *pfns, unsigned int count, pgprot_t prot)”h]”(j>)�”}”(hŒunsigned long *pfns”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjt�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Œlong”h]”hŒlong”…”�”}”(hj��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�ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¬�h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjp�ubj)�”}”(hŒpfns”h]”hŒpfns”…”�”}”(hj¹�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjp�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjl�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=hjl�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”jèŒ reftarget”j(žŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjZ�sbŒ c.vmap_pfn”†”asbuh1hhjžubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFžh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjžubj)�”}”(hŒprot”h]”hŒprot”…”�”}”(hjTž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&]”jjuh1j7hj&�h²hh³j8�h´MNubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj"�h²hh³j8�h´MNubah}”(h]”j�ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j8�h´MNhj�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:55: ./mm/vmalloc.c”h´MNhj{žh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj�h²hh³j8�h´MNubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj–žjHj–žjI‰jJ‰jK‰uh1híh²hhj�h³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:55: ./mm/vmalloc.c”h´MRhjšž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:55: ./mm/vmalloc.c”h´MOhj¹ž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´MOhjÕžubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¹žubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÔžh´MOhj¶ž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:55: ./mm/vmalloc.c”h´MPhjòž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´MPhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjòžubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j Ÿh´MPhj¶žubj©)�”}”(hŒ2``pgprot_t prot`` page protection for the mapping ”h]”(j¯)�”}”(hŒ``pgprot_t prot``”h]”jS)�”}”(hj1Ÿh]”hŒ pgprot_t prot”…”�”}”(hj3Ÿ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:55: ./mm/vmalloc.c”h´MQhj+ŸubjÉ)�”}”(hhh]”jM)�”}”(hŒpage protection for the mapping”h]”hŒpage protection for the mapping”…”�”}”(hjJŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jFŸh´MQhjGŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj+Ÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jFŸh´MQhj¶žubeh}”(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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´MShjšž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:55: ./mm/vmalloc.c”h´MRhjšžubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj�h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ__vmalloc_node (C function)”Œc.__vmalloc_node”hNt”auh1hÜhj�h²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:55: ./mm/vmalloc.c”h´Mcubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäŸh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÑŸh²hh³jãŸh´Mcubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjòŸh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÑŸh²hh³jãŸh´Mcubhÿ)�”}”(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´Mcubj8)�”}”(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Œ ”…”�”}”(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Œ ”…”�”}”(hjI h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj ubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjW 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”…”�”}”(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Œalign”h]”hŒalign”…”�”}”(hj¨ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjl 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”jèŒ reftarget”jÆ Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj 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]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œvoid”h]”hŒvoid”…”�”}”(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<¡ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjw¡h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj<¡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&]”jjuh1j7hjÑŸ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Œ$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:55: ./mm/vmalloc.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„)�”}”(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:55: ./mm/vmalloc.c”h´MghjÊ¡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:55: ./mm/vmalloc.c”h´Mdhjé¡ubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation size”h]”hŒallocation size”…”�”}”(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 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:55: ./mm/vmalloc.c”h´Mehj"¢ubjÉ)�”}”(hhh]”jM)�”}”(hŒdesired alignment”h]”hŒdesired alignment”…”�”}”(hjA¢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æ¡ubj©)�”}”(hŒ6``gfp_t gfp_mask`` flags for the page level allocator ”h]”(j¯)�”}”(hŒ``gfp_t gfp_mask``”h]”jS)�”}”(hja¢h]”hŒgfp_t gfp_mask”…”�”}”(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:55: ./mm/vmalloc.c”h´Mfhj[¢ubjÉ)�”}”(hhh]”jM)�”}”(hŒ"flags for the page level allocator”h]”hŒ"flags for the page level allocator”…”�”}”(hjz¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jv¢h´Mfhjw¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj[¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jv¢h´Mfhjæ¡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:55: ./mm/vmalloc.c”h´Mghj”¢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´Mghj°¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj”¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¯¢h´Mghjæ¡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:55: ./mm/vmalloc.c”h´MhhjÍ¢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´Mhhjé¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÍ¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jè¢h´Mhhjæ¡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:55: ./mm/vmalloc.c”h´MjhjÊ¡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”…”�”}”(hj>£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:55: ./mm/vmalloc.c”h´MihjÊ¡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 ”…”�”}”(hjW£h²hh³Nh´NubjŽ)�”}”(hŒ **gfp_mask**”h]”hŒgfp_mask”…”�”}”(hj_£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjW£ubhŒk (including reclaim/retry modifiers such as __GFP_NOFAIL) are the same as in __vmalloc_node_range_noprof().”…”�”}”(hjW£h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´MlhjÊ¡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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´MohjÊ¡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:55: ./mm/vmalloc.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éŒvmalloc (C function)”Œ c.vmalloc”hNt”auh1hÜhj�h²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:55: ./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‹ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjî£h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÍ£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‹ubj8)�”}”(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”…”�”}”(hj7¤h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj¤ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjE¤h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¤ubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjS¤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&]”jjuh1j7hjÍ£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:55: ./mm/vmalloc.c”h´M‹hjz¤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 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:55: ./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:55: ./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:55: ./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:55: ./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.”…”�”}”(hj0¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´M�hj™¤ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjA¥h]”hŒReturn”…”�”}”(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:55: ./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 ”…”�”}”(hjW¥h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj_¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjW¥ubhŒ on error”…”�”}”(hjW¥h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.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éŒvmalloc_huge_node (C function)”Œc.vmalloc_huge_node”hNt”auh1hÜhj�h²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:55: ./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žubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjµ¥h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj”¥h²hh³j¦¥h´Mžubhÿ)�”}”(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´Mžubj8)�”}”(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”…”�”}”(hj6¦h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3¦ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j8¦Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÈ¥sbŒc.vmalloc_huge_node”†”asbuh1hhj/¦ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjV¦h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj/¦ubj)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hjd¦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àhjy¦ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹¦h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjy¦ubj)�”}”(hŒnode”h]”hŒnode”…”�”}”(hj™¦h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjy¦ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÚ¥ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj”¥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Œ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:55: ./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²hhj�h³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:55: ./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:55: ./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Œ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”…”�”}”(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:55: ./mm/vmalloc.c”h´M hj7§ubjÉ)�”}”(hhh]”jM)�”}”(hŒ"flags for the page level allocator”h]”hŒ"flags for the page level allocator”…”�”}”(hjV§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jR§h´M hjS§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj7§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jR§h´M hjû¦ubj©)�”}”(hŒ8``int node`` node to use for allocation or NUMA_NO_NODE ”h]”(j¯)�”}”(hŒ ``int node``”h]”jS)�”}”(hjv§h]”hŒint node”…”�”}”(hjx§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjt§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´M¡hjp§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´M¡hjŒ§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjp§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:55: ./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. 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:55: ./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:55: ./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:55: ./mm/vmalloc.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éŒvzalloc (C function)”Œ c.vzalloc”hNt”auh1hÜhj�h²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”…”�”}”(hjS¨h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjO¨h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´Mµubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjb¨h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjO¨h²hh³ja¨h´Mµubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjp¨h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjO¨h²hh³ja¨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þhjO¨h²hh³ja¨h´Mµubj8)�”}”(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&]”jjuh1j7hjO¨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Œ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:55: ./mm/vmalloc.c”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„)�”}”(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:55: ./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”…”�”}”(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:55: ./mm/vmalloc.c”h´M¶hj:©ubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation size”h]”hŒallocation size”…”�”}”(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Œ**Description**”h]”jŽ)�”}”(hj{©h]”hŒ Description”…”�”}”(hj}©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjy©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./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:55: ./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:55: ./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:55: ./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:55: ./mm/vmalloc.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éŒvmalloc_user (C function)”Œc.vmalloc_user”hNt”auh1hÜhj�h²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:55: ./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Éubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj7ªh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjªh²hh³j(ªh´MÉubhÿ)�”}”(hŒ vmalloc_user”h]”j)�”}”(hŒ vmalloc_user”h]”hŒ vmalloc_user”…”�”}”(hjHªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjDªubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjªh²hh³j(ªh´MÉubj8)�”}”(hŒ(unsigned long size)”h]”j>)�”}”(hŒunsigned long size”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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Œ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&]”jjuh1j7hjª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:55: ./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²hhj�h³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:55: ./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:55: ./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Ž)�”}”(hjB«h]”hŒ Description”…”�”}”(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:55: ./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.”…”�”}”(hjX«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´MËhjâª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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./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:55: ./mm/vmalloc.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éŒvmalloc_node (C function)”Œc.vmalloc_node”hNt”auh1hÜhj�h²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:55: ./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Ûubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÝ«h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¼«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Ûubj8)�”}”(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Œ ”…”�”}”(hj4¬h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¬ubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjB¬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àhjW¬ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hji¬h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjW¬ubj)�”}”(hŒnode”h]”hŒnode”…”�”}”(hjw¬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&]”jjuh1j7hj¼«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:55: ./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²hhj�h³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:55: ./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:55: ./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:55: ./mm/vmalloc.c”h´MÝhj­ubjÉ)�”}”(hhh]”jM)�”}”(hŒ numa node”h]”hŒ numa node”…”�”}”(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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./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 ”…”�”}”(hjl­h²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjt­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjl­ubhŒQ from the page level allocator and map them into contiguous kernel virtual space.”…”�”}”(hjl­h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./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:55: ./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:55: ./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:55: ./mm/vmalloc.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éŒvzalloc_node (C function)”Œc.vzalloc_node”hNt”auh1hÜhj�h²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:55: ./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ïubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjñ­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ïubj8)�”}”(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Œ ”…”�”}”(hjM®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Œ ”…”�”}”(hji®h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj;®ubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjw®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj;®ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj7®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=hj7®ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjñ­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:55: ./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²hhj�h³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:55: ./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:55: ./mm/vmalloc.c”h´Mðhj¯ubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation size”h]”hŒallocation size”…”�”}”(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Œ``int node`` numa node ”h]”(j¯)�”}”(hŒ ``int node``”h]”jS)�”}”(hjP¯h]”hŒint node”…”�”}”(hjR¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjN¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´MñhjJ¯ubjÉ)�”}”(hhh]”jM)�”}”(hŒ numa node”h]”hŒ numa node”…”�”}”(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ò®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:55: ./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:55: ./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:55: ./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:55: ./mm/vmalloc.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éŒ vrealloc_node_align (C function)”Œc.vrealloc_node_align”hNt”auh1hÜhj�h²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:55: ./mm/vmalloc.c”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*°h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj°h²hh³j)°h´Mubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj8°h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj°h²hh³j)°h´Mubhÿ)�”}”(hŒvrealloc_node_align”h]”j)�”}”(hŒvrealloc_node_align”h]”hŒvrealloc_node_align”…”�”}”(hjI°h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjE°ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj°h²hh³j)°h´Mubj8)�”}”(hŒG(const void *p, size_t size, unsigned long align, gfp_t flags, int nid)”h]”(j>)�”}”(hŒ const void *p”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hje°h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hja°ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjr°h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhja°ubjá)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj€°h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhja°ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjްh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhja°ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjœ°h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhja°ubj)�”}”(hj~h]”hŒp”…”�”}”(hj©°h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhja°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”jèŒ reftarget”jưŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjK°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Œ ”…”�”}”(hj5±h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj±ubj)�”}”(hŒalign”h]”hŒalign”…”�”}”(hjC±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”jèŒ reftarget”ja±Œmodname”NŒ classname”Njìjï)�”}”jò]”jà°Œc.vrealloc_node_align”†”asbuh1hhjX±ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}±h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjX±ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj‹±h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjX±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&]”jjuh1j7hj°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Œ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:55: ./mm/vmalloc.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** ``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:55: ./mm/vmalloc.c”h´Mhj²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”…”�”}”(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:55: ./mm/vmalloc.c”h´Mhj%²ubjÉ)�”}”(hhh]”jM)�”}”(hŒobject to reallocate memory for”h]”hŒobject to reallocate memory for”…”�”}”(hjD²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j@²h´MhjA²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj%²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j@²h´Mhj"²ubj©)�”}”(hŒ'``size_t size`` the size to reallocate ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hjd²h]”hŒ size_t size”…”�”}”(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:55: ./mm/vmalloc.c”h´Mhj^²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³jy²h´Mhjz²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj^²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jy²h´Mhj"²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:55: ./mm/vmalloc.c”h´Mhj—²ubjÉ)�”}”(hhh]”jM)�”}”(hŒrequested alignment”h]”hŒrequested alignment”…”�”}”(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``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:55: ./mm/vmalloc.c”h´Mhjв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´Mhjì²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjвubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jë²h´Mhj"²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:55: ./mm/vmalloc.c”h´Mhj ³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´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Ž)�”}”(hjJ³h]”hŒ Description”…”�”}”(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:55: ./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 ”…”�”}”(hj`³h²hh³Nh´NubjŽ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjh³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj`³ubhŒ is ”…”�”}”(hj`³h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjz³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj`³ubhŒ8, vrealloc_XXX() behaves exactly like vmalloc_XXX(). If ”…”�”}”(hj`³h²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjŒ³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj`³ubhŒ is 0 and ”…”�”}”(hj`³h²hh³Nh´NubjŽ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjž³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj`³ubhŒ is not a ”…”�”}”(hj`³h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj°³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj`³ubhŒ) pointer, the object pointed to is freed.”…”�”}”(hj`³h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´Mhj²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´Nubjí )�”}”(hŒ*only*”h]”hŒonly”…”�”}”(hjѳh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jì hjɳ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:55: ./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:55: ./mm/vmalloc.c”h´Mhj²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:55: ./mm/vmalloc.c”h´Mhj²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:55: ./mm/vmalloc.c”h´Mhj²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:55: ./mm/vmalloc.c”h´Mhj²ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj:´h]”hŒReturn”…”�”}”(hj<´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj8´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´Mhj²ubjM)�”}”(hŒSpointer to the allocated memory; ``NULL`` if **size** is zero or in case of failure”h]”(hŒ!pointer to the allocated memory; ”…”�”}”(hjP´h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjX´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjP´ubhŒ if ”…”�”}”(hjP´h²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjP´ubhŒ is zero or in case of failure”…”�”}”(hjP´h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.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éŒvmalloc_32 (C function)”Œ c.vmalloc_32”hNt”auh1hÜhj�h²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:55: ./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­ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÀ´h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjŸ´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­ubj8)�”}”(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&]”jjuh1j7hjŸ´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)”…”�”}”(hjOµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.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„)�”}”(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Ž)�”}”(hjqµh]”hŒ Parameters”…”�”}”(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:55: ./mm/vmalloc.c”h´M±hjkµ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:55: ./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£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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´M°hjkµ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:55: ./mm/vmalloc.c”h´M¯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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´M²hjkµ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:55: ./mm/vmalloc.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éŒvmalloc_32_user (C function)”Œc.vmalloc_32_user”hNt”auh1hÜhj�h²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àhjW¶h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´M½ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj¶h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjW¶h²hh³ji¶h´M½ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjx¶h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjW¶h²hh³ji¶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þhjW¶h²hh³ji¶h´M½ubj8)�”}”(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&]”jjuh1j7hjW¶h²hh³ji¶h´M½ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjS¶h²hh³ji¶h´M½ubah}”(h]”jN¶ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³ji¶h´M½hjP¶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:55: ./mm/vmalloc.c”h´M½hj·h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjP¶h²hh³ji¶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 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:55: ./mm/vmalloc.c”h´MÁhj#·ubj¤)�”}”(hhh]”j©)�”}”(hŒ'``unsigned long size`` allocation size ”h]”(j¯)�”}”(hŒ``unsigned long size``”h]”jS)�”}”(hjH·h]”hŒunsigned long size”…”�”}”(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:55: ./mm/vmalloc.c”h´M¾hjB·ubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation size”h]”hŒallocation size”…”�”}”(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?·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:55: ./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:55: ./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:55: ./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:55: ./mm/vmalloc.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éŒ remap_vmalloc_range (C function)”Œc.remap_vmalloc_range”hNt”auh1hÜhj�h²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:55: ./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/ubj8)�”}”(hŒ=(struct vm_area_struct *vma, void *addr, unsigned long pgoff)”h]”(j>)�”}”(hŒstruct vm_area_struct *vma”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj>¸h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj:¸ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjK¸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&]”uh1jhjY¸ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j^¸Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj$¸sbŒc.remap_vmalloc_range”†”asbuh1hhj:¸ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|¸h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj:¸ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjЏh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj:¸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=hj6¸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¬¸ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj̸h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¬¸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=hj6¸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=hj6¸ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjý·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”…”�”}”(hjT¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´M/hjQ¹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjö·h²hh³j¸h´M/ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjl¹jHjl¹jI‰jJ‰jK‰uh1híh²hhj�h³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Ž)�”}”(hjv¹h]”hŒ Parameters”…”�”}”(hjx¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjt¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´M3hjp¹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:55: ./mm/vmalloc.c”h´M0hj�¹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´M0hj«¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jª¹h´M0hjŒ¹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:55: ./mm/vmalloc.c”h´M1hjȹubjÉ)�”}”(hhh]”jM)�”}”(hŒvmalloc memory”h]”hŒvmalloc memory”…”�”}”(hjç¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jã¹h´M1hjä¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjȹubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jã¹h´M1hjŒ¹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:55: ./mm/vmalloc.c”h´M2hjº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´M2hjºubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjºubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jºh´M2hjŒ¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjp¹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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´M4hjp¹ubjM)�”}”(hŒ0 for success, -Exxx on failure”h]”hŒ0 for success, -Exxx on failure”…”�”}”(hjXºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´M4hjp¹ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjiºh]”hŒ Description”…”�”}”(hjkºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjgºubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:55: ./mm/vmalloc.c”h´M6hjp¹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:55: ./mm/vmalloc.c”h´M5hjp¹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:55: ./mm/vmalloc.c”h´M9hjp¹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj�h²hh³Nh´Nubeh}”(h]”Œvirtually-contiguous-mappings”ah ]”h"]”Œvirtually contiguous mappings”ah$]”h&]”uh1hµhh·h²hh³hÊh´K5ubh¶)�”}”(hhh]”(h»)�”}”(hŒKernel Page Table Permissions”h]”hŒKernel Page Table Permissions”…”�”}”(hj¯ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj¬ºh²hh³hÊh´K;ubjM)�”}”(hŒZThe set_memory() and set_direct_map() APIs update permissions of existing kernel mappings.”h]”hŒZThe set_memory() and set_direct_map() APIs update permissions of existing kernel mappings.”…”�”}”(hj½ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./include/linux/set_memory.h”h´K hj¬ºh²hubjM)�”}”(hŒ„The set_memory() functions operate on a range of kernel virtual addresses, the set_direct_map() functions operate on the direct map.”h]”hŒ„The set_memory() functions operate on a range of kernel virtual addresses, the set_direct_map() functions operate on the direct map.”…”�”}”(hj̺h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./include/linux/set_memory.h”h´K hj¬ºh²hubjM)�”}”(hŒæThe updates are not atomic: when a call fails, an arbitrary prefix of the range may have been updated already and there is no automatic rollback. A caller must restore the required permissions before reusing or freeing the memory.”h]”hŒæThe updates are not atomic: when a call fails, an arbitrary prefix of the range may have been updated already and there is no automatic rollback. A caller must restore the required permissions before reusing or freeing the memory.”…”�”}”(hjÛºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./include/linux/set_memory.h”h´Khj¬ºh²hubjM)�”}”(hŒ¨When an architecture does not implement these APIs they succeed without doing anything, so a return value of 0 does not mean that the permissions were actually changed.”h]”hŒ¨When an architecture does not implement these APIs they succeed without doing anything, so a return value of 0 does not mean that the permissions were actually changed.”…”�”}”(hjêºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./include/linux/set_memory.h”h´Khj¬ºh²hubjM)�”}”(hŒÁCallers that depend on the permissions being applied must ensure that the architecture supports the required operation for the target addresses. The Kconfig symbols alone do not guarantee this.”h]”hŒÁCallers that depend on the permissions being applied must ensure that the architecture supports the required operation for the target addresses. The Kconfig symbols alone do not guarantee this.”…”�”}”(hjùºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./include/linux/set_memory.h”h´Khj¬ºh²hubjM)�”}”(hŒ}See Documentation/mm/kernel-page-tables.rst for the details and for the differences between the architecture implementations.”h]”hŒ}See Documentation/mm/kernel-page-tables.rst for the details and for the differences between the architecture implementations.”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:61: ./include/linux/set_memory.h”h´Khj¬ºh²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒset_memory_ro (C function)”Œc.set_memory_ro”hNt”auh1hÜhj¬ºh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ4int set_memory_ro (unsigned long addr, int numpages)”h]”hù)�”}”(hŒ3int set_memory_ro(unsigned long addr, int numpages)”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hj0»h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj,»h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.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Œ set_memory_ro”h]”j)�”}”(hŒ set_memory_ro”h]”hŒ set_memory_ro”…”�”}”(hjQ»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjM»ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj,»h²hh³j>»h´K&ubj8)�”}”(hŒ"(unsigned long addr, int numpages)”h]”(j>)�”}”(hŒunsigned long addr”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjm»h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhji»ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{»h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhji»ubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj‰»h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhji»ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—»h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhji»ubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj¥»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhji»ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hje»ubj>)�”}”(hŒ int numpages”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Œnumpages”h]”hŒnumpages”…”�”}”(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&]”jjuh1j7hj,»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Œmake a kernel mapping read-only”h]”hŒmake a kernel mapping read-only”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.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** ``unsigned long addr`` page aligned start of the kernel virtual address range ``int numpages`` number of pages in the range **Description** Flushes the TLB for the range. **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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´K*hj ¼ubj¤)�”}”(hhh]”(j©)�”}”(hŒN``unsigned long addr`` page aligned start of the kernel virtual address range ”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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´K'hj?¼ubjÉ)�”}”(hhh]”jM)�”}”(hŒ6page aligned start of the kernel virtual address range”h]”hŒ6page aligned start of the kernel virtual address range”…”�”}”(hj^¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jZ¼h´K'hj[¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj?¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jZ¼h´K'hj<¼ubj©)�”}”(hŒ.``int numpages`` number of pages in the range ”h]”(j¯)�”}”(hŒ``int numpages``”h]”jS)�”}”(hj~¼h]”hŒ int numpages”…”�”}”(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:64: ./include/linux/set_memory.h”h´K(hjx¼ubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages in the range”h]”hŒnumber of pages in the range”…”�”}”(hj—¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j“¼h´K(hj”¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjx¼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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´K*hj ¼ubjM)�”}”(hŒFlushes the TLB for the range.”h]”hŒFlushes the TLB for the range.”…”�”}”(hjϼh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´K+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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.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éŒset_memory_rw (C function)”Œc.set_memory_rw”hNt”auh1hÜhj¬ºh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ4int set_memory_rw (unsigned long addr, int numpages)”h]”hù)�”}”(hŒ3int set_memory_rw(unsigned long addr, int numpages)”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hj%½h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj!½h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´K1ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4½h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj!½h²hh³j3½h´K1ubhÿ)�”}”(hŒ set_memory_rw”h]”j)�”}”(hŒ set_memory_rw”h]”hŒ set_memory_rw”…”�”}”(hjF½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjB½ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj!½h²hh³j3½h´K1ubj8)�”}”(hŒ"(unsigned long addr, int numpages)”h]”(j>)�”}”(hŒunsigned long addr”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Œaddr”h]”hŒaddr”…”�”}”(hjš½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj^½ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjZ½ubj>)�”}”(hŒ int numpages”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Œnumpages”h]”hŒnumpages”…”�”}”(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&]”jjuh1j7hj!½h²hh³j3½h´K1ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj½h²hh³j3½h´K1ubah}”(h]”j½ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j3½h´K1hj½h²hubj4)�”}”(hhh]”jM)�”}”(hŒmake a kernel mapping writable”h]”hŒmake a kernel mapping writable”…”�”}”(hjù½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´K1hjö½h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj½h²hh³j3½h´K1ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¾jHj¾jI‰jJ‰jK‰uh1híh²hhj¬ºh³Nh´Nubj„)�”}”(hŒü**Parameters** ``unsigned long addr`` page aligned start of the kernel virtual address range ``int numpages`` number of pages in the range **Description** Flushes the TLB for the range. **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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´K5hj¾ubj¤)�”}”(hhh]”(j©)�”}”(hŒN``unsigned long addr`` page aligned start of the kernel virtual address range ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hj:¾h]”hŒunsigned long addr”…”�”}”(hj<¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj8¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´K2hj4¾ubjÉ)�”}”(hhh]”jM)�”}”(hŒ6page aligned start of the kernel virtual address range”h]”hŒ6page aligned start of the kernel virtual address range”…”�”}”(hjS¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jO¾h´K2hjP¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj4¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jO¾h´K2hj1¾ubj©)�”}”(hŒ.``int numpages`` number of pages in the range ”h]”(j¯)�”}”(hŒ``int numpages``”h]”jS)�”}”(hjs¾h]”hŒ int numpages”…”�”}”(hju¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjq¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´K3hjm¾ubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages in the range”h]”hŒnumber of pages in the range”…”�”}”(hjŒ¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jˆ¾h´K3hj‰¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjm¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jˆ¾h´K3hj1¾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:64: ./include/linux/set_memory.h”h´K5hj¾ubjM)�”}”(hŒFlushes the TLB for the range.”h]”hŒFlushes the TLB for the range.”…”�”}”(hjľh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´K4hj¾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:64: ./include/linux/set_memory.h”h´K6hj¾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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´K7hj¾ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj¬ºh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒset_memory_x (C function)”Œc.set_memory_x”hNt”auh1hÜhj¬ºh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ3int set_memory_x (unsigned long addr, int numpages)”h]”hù)�”}”(hŒ2int set_memory_x(unsigned long addr, int numpages)”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj¿h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´K)�”}”(hŒunsigned long addr”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjW¿h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjS¿ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hje¿h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjS¿ubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjs¿h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjS¿ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�¿h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjS¿ubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj�¿h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjS¿ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjO¿ubj>)�”}”(hŒ int numpages”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Œnumpages”h]”hŒnumpages”…”�”}”(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&]”jjuh1j7hj¿h²hh³j(¿h´KhjbÀubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages in the range”h]”hŒnumber of pages in the range”…”�”}”(hj�Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j}Àh´K>hj~Àubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjbÀ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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´K@hj ÀubjM)�”}”(hŒFlushes the TLB for the range.”h]”hŒFlushes the TLB for the range.”…”�”}”(hj¹Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´K?hj ÀubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjÊÀh]”hŒReturn”…”�”}”(hjÌÀh²hh³Nh´Nuba•h}”(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:64: ./include/linux/set_memory.h”h´KAhj À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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´KBhj Àubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj¬ºh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒset_memory_nx (C function)”Œc.set_memory_nx”hNt”auh1hÜhj¬ºh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ4int set_memory_nx (unsigned long addr, int numpages)”h]”hù)�”}”(hŒ3int set_memory_nx(unsigned long addr, int numpages)”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj Áh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.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Œ set_memory_nx”h]”j)�”}”(hŒ set_memory_nx”h]”hŒ set_memory_nx”…”�”}”(hj0Áh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj,Áubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj Áh²hh³jÁh´KGubj8)�”}”(hŒ"(unsigned long addr, int numpages)”h]”(j>)�”}”(hŒunsigned long addr”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjLÁh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjHÁubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZÁh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjHÁubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjhÁh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjHÁubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvÁh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjHÁubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj„Áh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjHÁubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjDÁubj>)�”}”(hŒ int numpages”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Œnumpages”h]”hŒnumpages”…”�”}”(hj¹Áh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™Áubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjDÁubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj Á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Œ$make a kernel mapping non-executable”h]”hŒ$make a kernel mapping non-executable”…”�”}”(hjãÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.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„)�”}”(hŒü**Parameters** ``unsigned long addr`` page aligned start of the kernel virtual address range ``int numpages`` number of pages in the range **Description** Flushes the TLB for the range. **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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´KKhjÿÁubj¤)�”}”(hhh]”(j©)�”}”(hŒN``unsigned long addr`` page aligned start of the kernel virtual address range ”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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´KHhjÂubjÉ)�”}”(hhh]”jM)�”}”(hŒ6page aligned start of the kernel virtual address range”h]”hŒ6page aligned start of the kernel virtual address range”…”�”}”(hj=Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j9Âh´KHhj:Âubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j9Âh´KHhjÂubj©)�”}”(hŒ.``int numpages`` number of pages in the range ”h]”(j¯)�”}”(hŒ``int numpages``”h]”jS)�”}”(hj]Âh]”hŒ int numpages”…”�”}”(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:64: ./include/linux/set_memory.h”h´KIhjWÂubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages in the range”h]”hŒnumber of pages in the range”…”�”}”(hjvÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jrÂh´KIhjsÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjWÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jrÂh´KIhjÂ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:64: ./include/linux/set_memory.h”h´KKhjÿÁubjM)�”}”(hŒFlushes the TLB for the range.”h]”hŒFlushes the TLB for the range.”…”�”}”(hj®Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´KJhjÿÁ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:64: ./include/linux/set_memory.h”h´KLhjÿÁ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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.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éŒset_memory_rox (C function)”Œc.set_memory_rox”hNt”auh1hÜhj¬ºh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ5int set_memory_rox (unsigned long addr, int numpages)”h]”hù)�”}”(hŒ4int set_memory_rox(unsigned long addr, int numpages)”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÃh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´KTubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÃh²hh³jÃh´KTubhÿ)�”}”(hŒset_memory_rox”h]”j)�”}”(hŒset_memory_rox”h]”hŒset_memory_rox”…”�”}”(hj%Ãh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj!Ãubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÃh²hh³jÃh´KTubj8)�”}”(hŒ"(unsigned long addr, int numpages)”h]”(j>)�”}”(hŒunsigned long addr”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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Œlong”h]”hŒlong”…”�”}”(hj]Ãh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj=Ãubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkÃh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj=Ãubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjyÃh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj=Ãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj9Ãubj>)�”}”(hŒ int numpages”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Œnumpages”h]”hŒnumpages”…”�”}”(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&]”jjuh1j7hjÃh²hh³jÃh´KTubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjüÂh²hh³jÃh´KTubah}”(h]”j÷Âah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÃh´KThjùÂh²hubj4)�”}”(hhh]”jM)�”}”(hŒ.make a kernel mapping read-only and executable”h]”hŒ.make a kernel mapping read-only and executable”…”�”}”(hjØÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´KThjÕÃh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjùÂh²hh³jÃh´KTubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjðÃjHjðÃjI‰jJ‰jK‰uh1híh²hhj¬ºh³Nh´Nubj„)�”}”(hX9**Parameters** ``unsigned long addr`` page aligned start of the kernel virtual address range ``int numpages`` number of pages in the range **Description** A failure may leave the range read-only but not executable. Flushes the TLB for the range. **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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´KXhjôÃubj¤)�”}”(hhh]”(j©)�”}”(hŒN``unsigned long addr`` page aligned start of the kernel virtual address range ”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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´KUhjÄubjÉ)�”}”(hhh]”jM)�”}”(hŒ6page aligned start of the kernel virtual address range”h]”hŒ6page aligned start of the kernel virtual address range”…”�”}”(hj2Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j.Äh´KUhj/Äubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j.Äh´KUhjÄubj©)�”}”(hŒ.``int numpages`` number of pages in the range ”h]”(j¯)�”}”(hŒ``int numpages``”h]”jS)�”}”(hjRÄh]”hŒ int numpages”…”�”}”(hjTÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjPÄubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´KVhjLÄubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages in the range”h]”hŒnumber of pages in the range”…”�”}”(hjkÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jgÄh´KVhjhÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjLÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jgÄh´KVhjÄ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:64: ./include/linux/set_memory.h”h´KXhjôÃubjM)�”}”(hŒ;A failure may leave the range read-only but not executable.”h]”hŒ;A failure may leave the range read-only but not executable.”…”�”}”(hj£Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´KWhjôÃubjM)�”}”(hŒFlushes the TLB for the range.”h]”hŒFlushes the TLB for the range.”…”�”}”(hj²Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´KYhjôÃ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:64: ./include/linux/set_memory.h”h´K[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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.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éŒ+set_direct_map_invalid_noflush (C function)”Œ c.set_direct_map_invalid_noflush”hNt”auh1hÜhj¬ºh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒGint set_direct_map_invalid_noflush (struct page *page, unsigned int nr)”h]”hù)�”}”(hŒFint set_direct_map_invalid_noflush(struct page *page, unsigned int nr)”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÅh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´Kiubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÅh²hh³jÅh´Kiubhÿ)�”}”(hŒset_direct_map_invalid_noflush”h]”j)�”}”(hŒset_direct_map_invalid_noflush”h]”hŒset_direct_map_invalid_noflush”…”�”}”(hj)Åh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj%Åubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÅh²hh³jÅh´Kiubj8)�”}”(hŒ$(struct page *page, unsigned int nr)”h]”(j>)�”}”(hŒstruct page *page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjEÅh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjAÅubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRÅh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjAÅubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjcÅh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj`Åubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jeÅŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj+ÅsbŒ c.set_direct_map_invalid_noflush”†”asbuh1hhjAÅubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒÅh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjAÅubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj‘Åh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjAÅubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjžÅh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjAÅubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj=Åubj>)�”}”(hŒunsigned int nr”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”h]”hŒnr”…”�”}”(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&]”jjuh1j7hjÅh²hh³jÅh´Kiubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÅh²hh³jÅh´Kiubah}”(h]”jûÄah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÅh´KihjýÄh²hubj4)�”}”(hhh]”jM)�”}”(hŒ remove pages from the direct map”h]”hŒ remove pages from the direct map”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´KihjÆh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjýÄh²hh³jÅh´Kiubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj1ÆjHj1ÆjI‰jJ‰jK‰uh1híh²hhj¬ºh³Nh´Nubj„)�”}”(hX>**Parameters** ``struct page *page`` first page to update ``unsigned int nr`` number of pages to update **Description** Makes the direct mapping of **nr** pages starting at **page** not present. The caller is responsible for any required TLB flushing. **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�hj9Æubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´Kmhj5Æubj¤)�”}”(hhh]”(j©)�”}”(hŒ+``struct page *page`` first page to update ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hjZÆh]”hŒstruct page *page”…”�”}”(hj\Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjXÆubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´KjhjTÆubjÉ)�”}”(hhh]”jM)�”}”(hŒfirst page to update”h]”hŒfirst page to update”…”�”}”(hjsÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³joÆh´KjhjpÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjTÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³joÆh´KjhjQÆubj©)�”}”(hŒ.``unsigned int nr`` number of pages to update ”h]”(j¯)�”}”(hŒ``unsigned int nr``”h]”jS)�”}”(hj“Æh]”hŒunsigned int nr”…”�”}”(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:64: ./include/linux/set_memory.h”h´Kkhj�ÆubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages to update”h]”hŒnumber of pages to update”…”�”}”(hj¬Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¨Æh´Kkhj©Æubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�Æubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¨Æh´KkhjQÆ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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´Kmhj5ÆubjM)�”}”(hŒƒMakes the direct mapping of **nr** pages starting at **page** not present. The caller is responsible for any required TLB flushing.”h]”(hŒMakes the direct mapping of ”…”�”}”(hjäÆh²hh³Nh´NubjŽ)�”}”(hŒ**nr**”h]”hŒnr”…”�”}”(hjìÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjäÆubhŒ pages starting at ”…”�”}”(hjäÆh²hh³Nh´NubjŽ)�”}”(hŒ**page**”h]”hŒpage”…”�”}”(hjþÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjäÆubhŒF not present. The caller is responsible for any required TLB flushing.”…”�”}”(hjäÆh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´Klhj5Æ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:64: ./include/linux/set_memory.h”h´Kohj5Æ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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´Kphj5Æubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj¬ºh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ+set_direct_map_default_noflush (C function)”Œ c.set_direct_map_default_noflush”hNt”auh1hÜhj¬ºh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒGint set_direct_map_default_noflush (struct page *page, unsigned int nr)”h]”hù)�”}”(hŒFint set_direct_map_default_noflush(struct page *page, unsigned int nr)”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hj^Çh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjZÇh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´Kyubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmÇh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjZÇh²hh³jlÇh´Kyubhÿ)�”}”(hŒset_direct_map_default_noflush”h]”j)�”}”(hŒset_direct_map_default_noflush”h]”hŒset_direct_map_default_noflush”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj{Çubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjZÇh²hh³jlÇh´Kyubj8)�”}”(hŒ$(struct page *page, unsigned int nr)”h]”(j>)�”}”(hŒstruct page *page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj›Çh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj—Çubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨Çh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj—Çubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj¹Çh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¶Çubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j»ÇŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj�ÇsbŒ c.set_direct_map_default_noflush”†”asbuh1hhj—Çubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙÇh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj—Çubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjçÇh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj—Ç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 nr”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Œnr”h]”hŒnr”…”�”}”(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&]”jjuh1j7hjZÇh²hh³jlÇh´Kyubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjVÇh²hh³jlÇh´Kyubah}”(h]”jQÇah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jlÇh´KyhjSÇh²hubj4)�”}”(hhh]”jM)�”}”(hŒrestore the direct map of pages”h]”hŒrestore the direct map of pages”…”�”}”(hjoÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´KyhjlÈh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjSÇh²hh³jlÇh´Kyubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj‡ÈjHj‡ÈjI‰jJ‰jK‰uh1híh²hhj¬ºh³Nh´Nubj„)�”}”(hXW**Parameters** ``struct page *page`` first page to update ``unsigned int nr`` number of pages to update **Description** Restores the default kernel permissions of the direct mapping of **nr** pages starting at **page**. The caller is responsible for any required TLB flushing. **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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´K}hj‹Èubj¤)�”}”(hhh]”(j©)�”}”(hŒ+``struct page *page`` first page to update ”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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´KzhjªÈubjÉ)�”}”(hhh]”jM)�”}”(hŒfirst page to update”h]”hŒfirst page to update”…”�”}”(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Œ.``unsigned int nr`` number of pages to update ”h]”(j¯)�”}”(hŒ``unsigned int nr``”h]”jS)�”}”(hjéÈh]”hŒunsigned int nr”…”�”}”(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:64: ./include/linux/set_memory.h”h´K{hjãÈubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages to update”h]”hŒnumber of pages to update”…”�”}”(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Ž)�”}”(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:64: ./include/linux/set_memory.h”h´K}hj‹ÈubjM)�”}”(hŒœRestores the default kernel permissions of the direct mapping of **nr** pages starting at **page**. The caller is responsible for any required TLB flushing.”h]”(hŒARestores the default kernel permissions of the direct mapping of ”…”�”}”(hj:Éh²hh³Nh´NubjŽ)�”}”(hŒ**nr**”h]”hŒnr”…”�”}”(hjBÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj:ÉubhŒ pages starting at ”…”�”}”(hj:Éh²hh³Nh´NubjŽ)�”}”(hŒ**page**”h]”hŒpage”…”�”}”(hjTÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj:ÉubhŒ:. The caller is responsible for any required TLB flushing.”…”�”}”(hj:Éh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´K|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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´K€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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.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éŒcan_set_direct_map (C function)”Œc.can_set_direct_map”hNt”auh1hÜhj¬ºh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒbool can_set_direct_map (void)”h]”hù)�”}”(hŒbool can_set_direct_map(void)”h]”(já)�”}”(hj½h]”hŒbool”…”�”}”(hj´Éh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj°Éh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.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Œcan_set_direct_map”h]”j)�”}”(hŒcan_set_direct_map”h]”hŒcan_set_direct_map”…”�”}”(hjÔÉh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÐÉubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj°Éh²hh³jÁÉh´K”ubj8)�”}”(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&]”jjuh1j7hj°É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Œ'check if the direct map can be modified”h]”hŒ'check if the direct map can be modified”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.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&]”jFjAjGj2ÊjHj2ÊjI‰jJ‰jK‰uh1híh²hhj¬ºh³Nh´Nubj„)�”}”(hXÀ**Parameters** ``void`` no arguments **Description** Available with CONFIG_ARCH_HAS_SET_DIRECT_MAP. Architectures may override this to report whether direct map updates are enabled at runtime. Even though the generic implementation returns true this does not guarantee that every address can be updated. See Documentation/mm/kernel-page-tables.rst for the details **Return** true unless the architecture reports direct map updates disabled.”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:64: ./include/linux/set_memory.h”h´K˜hj6Ê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&]”uh1jRhjYÊubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´KhjUÊubjÉ)�”}”(hhh]”jM)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjtÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jpÊh´KhjqÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjUÊubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jpÊh´KhjRÊ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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´Khj6ÊubjM)�”}”(hŒúAvailable with CONFIG_ARCH_HAS_SET_DIRECT_MAP. Architectures may override this to report whether direct map updates are enabled at runtime. Even though the generic implementation returns true this does not guarantee that every address can be updated.”h]”hŒúAvailable with CONFIG_ARCH_HAS_SET_DIRECT_MAP. Architectures may override this to report whether direct map updates are enabled at runtime. Even though the generic implementation returns true this does not guarantee that every address can be updated.”…”�”}”(hj¬Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´K•hj6ÊubjM)�”}”(hŒ;See Documentation/mm/kernel-page-tables.rst for the details”h]”hŒ;See Documentation/mm/kernel-page-tables.rst for the details”…”�”}”(hj»Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´Kš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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´Kœhj6ÊubjM)�”}”(hŒAtrue unless the architecture reports direct map updates disabled.”h]”hŒAtrue unless the architecture reports direct map updates disabled.”…”�”}”(hjâÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:64: ./include/linux/set_memory.h”h´K�hj6Êubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhj¬ºh²hh³Nh´Nubeh}”(h]”Œkernel-page-table-permissions”ah ]”h"]”Œkernel page table permissions”ah$]”h&]”uh1hµhh·h²hh³hÊh´K;ubh¶)�”}”(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´KDubh¶)�”}”(hhh]”(h»)�”}”(hŒFilemap”h]”hŒFilemap”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjËh²hh³hÊh´KGubhÝ)�”}”(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àhj7Ëh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´MŒubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJËh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj7Ëh²hh³jIË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&]”uh1jhjXËubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj7Ëh²hh³jIËh´MŒubj8)�”}”(hŒ9(struct address_space *mapping, loff_t start, loff_t end)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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Ë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”jèŒ reftarget”j˜ËŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj^ËsbŒc.filemap_fdatawrite_range”†”asbuh1hhjtËubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶Ëh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjtËubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÄËh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjtË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Œ 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”jèŒ reftarget”jïËŒmodname”NŒ classname”Njìjï)�”}”jò]”j²ËŒ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=hjpËubj>)�”}”(hŒ loff_t end”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj5Ìh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2Ìubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j7ÌŒmodname”NŒ classname”Njìjï)�”}”jò]”j²ËŒc.filemap_fdatawrite_range”†”asbuh1hhj.Ìubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSÌh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj.Ìubj)�”}”(hŒend”h]”hŒend”…”�”}”(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&]”jjuh1j7hj7Ëh²hh³jIËh´MŒubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj3Ëh²hh³jIËh´MŒubah}”(h]”j.Ëah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jIËh´MŒhj0Ë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:73: ./mm/filemap.c”h´MŒhjˆÌh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj0Ëh²hh³jIË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 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�hj«Ìubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.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Œ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:73: ./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Œ@``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:73: ./mm/filemap.c”h´M�hj8ÍubjÉ)�”}”(hhh]”jM)�”}”(hŒ0offset in bytes where the range ends (inclusive)”h]”hŒ0offset in bytes where the range ends (inclusive)”…”�”}”(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�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:73: ./mm/filemap.c”h´M‘hj§Ì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:73: ./mm/filemap.c”h´M�hj§Ì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.”…”�”}”(hjžÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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:73: ./mm/filemap.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:73: ./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_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:73: ./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§ubj8)�”}”(hŒ9(struct address_space *mapping, loff_t start, loff_t end)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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;Î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”jèŒ reftarget”j_ÎŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj%ÎsbŒc.filemap_flush_range”†”asbuh1hhj;Îubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}Îh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj;Îubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj‹Îh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj;Î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=hj7Î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”jèŒ reftarget”j¶ÎŒmodname”NŒ classname”Njìjï)�”}”jò]”jyÎŒ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=hj7Î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”jèŒ reftarget”jþÎŒmodname”NŒ classname”Njìjï)�”}”jò]”jyÎŒ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=hj7Îubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjþÍ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”…”�”}”(hjRÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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&]”jFjAjGjjÏjHjjÏ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Ž)�”}”(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:73: ./mm/filemap.c”h´M«hjnÏubj¤)�”}”(hhh]”(j©)�”}”(hŒ7``struct address_space *mapping`` target 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:73: ./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³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`` 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&]”uh1jRhjÊÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M©hjÆÏ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ÈhjÆÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jáÏh´M©hjŠÏ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:73: ./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ªhjŠÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjnÏ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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M¬hjnÏ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.”…”�”}”(hjVÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M«hjnÏ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:73: ./mm/filemap.c”h´M®hjnÏ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:73: ./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éŒ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”…”�”}”(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:73: ./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”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þhj¶Ðh²hh³jÈÐh´M¹ubj8)�”}”(hŒ(struct address_space *mapping)”h]”j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj÷Ðh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjóÐubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjóÐubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jÑŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÝÐsbŒc.filemap_flush”†”asbuh1hhjóÐubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5Ñh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjóÐubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjCÑh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjóÐubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(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&]”jjuh1j7hj¶Ð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Œmostly a non-blocking flush”h]”hŒmostly a non-blocking flush”…”�”}”(hjzÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.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&]”jFjAjGj’ÑjHj’Ñ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Ž)�”}”(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:73: ./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)�”}”(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:73: ./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³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:73: ./mm/filemap.c”h´M¼hj–Ñ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:73: ./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:73: ./mm/filemap.c”h´M¾hj–ÑubjM)�”}”(hŒ0``0`` on success, negative error code otherwise.”h]”(jS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hj7Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj3ÒubhŒ+ on success, negative error code otherwise.”…”�”}”(hj3Òh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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_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”…”�”}”(hjpÒh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjlÒh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.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ÿ)�”}”(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þhjlÒh²hh³j}Òh´MÔubj8)�”}”(hŒC(struct address_space *mapping, loff_t start_byte, loff_t end_byte)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¬Òh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¨Òubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹Òh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¨Òubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jÌÒŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj’ÒsbŒc.filemap_range_has_page”†”asbuh1hhj¨Òubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêÒh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¨Òubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjøÒh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¨Ò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”jèŒ reftarget”j#ÓŒmodname”NŒ classname”Njìjï)�”}”jò]”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”…”�”}”(hjMÓ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”…”�”}”(hjiÓh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjfÓubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jkÓŒmodname”NŒ classname”Njìjï)�”}”jò]”jæÒŒc.filemap_range_has_page”†”asbuh1hhjbÓubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡Óh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjbÓubj)�”}”(hŒend_byte”h]”hŒend_byte”…”�”}”(hj•Óh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjbÓubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¤Òubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjlÒh²hh³j}Òh´MÔubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjhÒh²hh³j}Òh´MÔubah}”(h]”jcÒah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j}Òh´MÔhjeÒh²hubj4)�”}”(hhh]”jM)�”}”(hŒ check if a page exists in range.”h]”hŒ check if a page exists in range.”…”�”}”(hj¿Óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´MÔhj¼Óh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjeÒ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:73: ./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:73: ./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)�”}”(hj9Ôh]”hŒloff_t start_byte”…”�”}”(hj;Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj7Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´MÖhj3ÔubjÉ)�”}”(hhh]”jM)�”}”(hŒ&offset in bytes where the range starts”h]”hŒ&offset in bytes where the range starts”…”�”}”(hjRÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jNÔh´MÖhjOÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj3Ôubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jNÔ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)�”}”(hjrÔh]”hŒloff_t end_byte”…”�”}”(hjtÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjpÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M×hjlÔ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ÈhjlÔ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:73: ./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.”…”�”}”(hjÃÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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:73: ./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:73: ./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”…”�”}”(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:73: ./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Œfilemap_fdatawait_range”h]”j)�”}”(hŒfilemap_fdatawait_range”h]”hŒfilemap_fdatawait_range”…”�”}”(hjZÕh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjVÕubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj5Õh²hh³jGÕh´Mubj8)�”}”(hŒC(struct address_space *mapping, loff_t start_byte, loff_t end_byte)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjvÕh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjrÕubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒÕh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjrÕ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”jèŒ reftarget”j–ÕŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj\ÕsbŒc.filemap_fdatawait_range”†”asbuh1hhjrÕubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´Õh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjrÕubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÂÕh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjrÕubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjÏÕh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjrÕubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjnÕ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”jèŒ reftarget”jíÕŒmodname”NŒ classname”Njìjï)�”}”jò]”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=hjnÕubj>)�”}”(hŒloff_t end_byte”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj3Öh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj0Öubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j5ÖŒmodname”NŒ classname”Njìjï)�”}”jò]”j°ÕŒc.filemap_fdatawait_range”†”asbuh1hhj,Öubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQÖ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=hjnÕubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj5Õ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Œ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:73: ./mm/filemap.c”h´Mhj†Öh²huba•Fh}”(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„)�”}”(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Ž)�”}”(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:73: ./mm/filemap.c”h´M hj¥Ö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:73: ./mm/filemap.c”h´MhjÄÖ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ÈhjÄÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jßÖh´MhjÁÖ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:73: ./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´MhjÁÖ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:73: ./mm/filemap.c”h´Mhj6×ubjÉ)�”}”(hhh]”jM)�”}”(hŒ0offset in bytes where the range ends (inclusive)”h]”hŒ0offset in bytes where the range ends (inclusive)”…”�”}”(hjU×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jQ×h´MhjR×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj6×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jQ×h´MhjÁÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¥Ö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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M!hj¥Ö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:73: ./mm/filemap.c”h´M hj¥Ö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.”…”�”}”(hjœ×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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:73: ./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:73: ./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éŒ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:73: ./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´M4ubj8)�”}”(hŒC(struct address_space *mapping, loff_t start_byte, loff_t end_byte)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj/Øh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj+Øubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<Øh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj+Øubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjMØh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjJØubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jOØŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjØsbŒ%c.filemap_fdatawait_range_keep_errors”†”asbuh1hhj+Øubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmØh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj+Øubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj{Øh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj+Ø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”jèŒ reftarget”j¦ØŒmodname”NŒ classname”Njìjï)�”}”jò]”jiØŒ%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Œ 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”jèŒ reftarget”jîØŒmodname”NŒ classname”Njìjï)�”}”jò]”jiØŒ%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&]”jjuh1j7hjî×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”…”�”}”(hjBÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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&]”jFjAjGjZÙjHjZÙ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Ž)�”}”(hjdÙh]”hŒ Parameters”…”�”}”(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:73: ./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)�”}”(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:73: ./mm/filemap.c”h´M5hj}Ù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´M5hj™Ùubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj}Ùubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j˜Ùh´M5hjzÙ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:73: ./mm/filemap.c”h´M6hj¶Ù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Èhj¶Ùubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÑÙh´M6hjzÙ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:73: ./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´M7hjzÙ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:73: ./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.”…”�”}”(hjFÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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)”…”�”}”(hjUÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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”…”�”}”(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:73: ./mm/filemap.c”h´MJubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“Úh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj€Úh²hh³j’Úh´MJubhÿ)�”}”(hŒfile_fdatawait_range”h]”j)�”}”(hŒfile_fdatawait_range”h]”hŒfile_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´MJubj8)�”}”(hŒ7(struct file *file, loff_t start_byte, loff_t end_byte)”h]”(j>)�”}”(hŒstruct file *file”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÁÚh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj½Úubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎÚh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj½Úubh)�”}”(hhh]”j)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjßÚh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÜÚubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jáÚŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj§ÚsbŒc.file_fdatawait_range”†”asbuh1hhj½Úubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿÚh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj½Úubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj Ûh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj½Ú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 start_byte”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj6Ûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3Ûubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j8ÛŒmodname”NŒ classname”Njìjï)�”}”jò]”jûÚŒc.file_fdatawait_range”†”asbuh1hhj/Ûubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTÛh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj/Ûubj)�”}”(hŒ start_byte”h]”hŒ start_byte”…”�”}”(hjbÛ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”jèŒ reftarget”j€ÛŒmodname”NŒ classname”Njìjï)�”}”jò]”jûÚŒc.file_fdatawait_range”†”asbuh1hhjwÛubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœÛh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjwÛubj)�”}”(hŒend_byte”h]”hŒend_byte”…”�”}”(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&]”jjuh1j7hj€Úh²hh³j’Úh´MJubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj|Úh²hh³j’Úh´MJubah}”(h]”jwÚah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j’Úh´MJhjyÚ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:73: ./mm/filemap.c”h´MJhjÑÛh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjyÚ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 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:73: ./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:73: ./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)�”}”(hjNÜh]”hŒloff_t start_byte”…”�”}”(hjPÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjLÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´MLhjHÜubjÉ)�”}”(hhh]”jM)�”}”(hŒ&offset in bytes where the range starts”h]”hŒ&offset in bytes where the range starts”…”�”}”(hjgÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jcÜh´MLhjdÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjHÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jcÜ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)�”}”(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:73: ./mm/filemap.c”h´MMhj�Ü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´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”…”�”}”(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:73: ./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:73: ./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:73: ./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:73: ./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:73: ./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àhj9Ýh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´Mcubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLÝh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj9Ýh²hh³jKÝ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&]”uh1jhjZÝubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj9Ýh²hh³jKÝh´Mcubj8)�”}”(hŒ(struct address_space *mapping)”h]”j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjzÝh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjvÝubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡Ýh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjvÝ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”jèŒ reftarget”jšÝŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj`ÝsbŒc.filemap_fdatawait_keep_errors”†”asbuh1hhjvÝubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸Ýh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjvÝubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÆÝh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjvÝubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjÓÝh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjvÝubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjrÝubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj9Ýh²hh³jKÝh´Mcubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj5Ýh²hh³jKÝh´Mcubah}”(h]”j0Ýah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jKÝh´Mchj2Ý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:73: ./mm/filemap.c”h´MchjúÝh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj2Ýh²hh³jKÝ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:73: ./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:73: ./mm/filemap.c”h´Mdhj8ÞubjÉ)�”}”(hhh]”jM)�”}”(hŒ#address space structure to wait for”h]”hŒ#address space structure to wait for”…”�”}”(hjWÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jSÞh´MdhjTÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj8Þubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jSÞh´Mdhj5Þubah}”(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:73: ./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&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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)”…”�”}”(hjžÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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:73: ./mm/filemap.c”h´MmhjÞ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:73: ./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:73: ./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—ubj8)�”}”(hŒ;(struct address_space *mapping, loff_t lstart, loff_t lend)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj1ßh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj-ßubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>ßh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj-ßubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjOßh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjLßubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jQߌmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjßsbŒc.filemap_write_and_wait_range”†”asbuh1hhj-ßubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoßh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj-ßubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj}ßh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj-ß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”jèŒ reftarget”j¨ßŒmodname”NŒ classname”Njìjï)�”}”jò]”jkߌ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Œ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”jèŒ reftarget”jðߌmodname”NŒ classname”Njìjï)�”}”jò]”jkߌ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&]”jjuh1j7hjðÞ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”…”�”}”(hjDàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”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„)�”}”(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Ž)�”}”(hjfàh]”hŒ Parameters”…”�”}”(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:73: ./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)�”}”(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:73: ./mm/filemap.c”h´M˜hjàubjÉ)�”}”(hhh]”jM)�”}”(hŒthe address_space for the pages”h]”hŒthe address_space for the 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:73: ./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Œ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:73: ./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Ž)�”}”(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:73: ./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.”…”�”}”(hjHáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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 ”…”�”}”(hjWáh²hh³Nh´NubjŽ)�”}”(hŒ**lend**”h]”hŒlend”…”�”}”(hj_áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjWá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).”…”�”}”(hjWáh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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:73: ./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”…”�”}”(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:73: ./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Œ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þhj»áh²hh³jÍáh´MÆubj8)�”}”(hŒ(struct file *file)”h]”j>)�”}”(hŒstruct file *file”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjüáh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjøáubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj âh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjøáubh)�”}”(hhh]”j)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjâubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jâŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjâá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øáubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjHâh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjøáubj)�”}”(hŒfile”h]”hŒfile”…”�”}”(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&]”jjuh1j7hj»á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Œ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:73: ./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 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Ž)�”}”(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:73: ./mm/filemap.c”h´MÊhj›â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)�”}”(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:73: ./mm/filemap.c”h´MÈhjºâ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È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:73: ./mm/filemap.c”h´MÊhj›â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:73: ./mm/filemap.c”h´MÉhj›â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:73: ./mm/filemap.c”h´MÍhj›â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:73: ./mm/filemap.c”h´MÐhj›â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:73: ./mm/filemap.c”h´MÖ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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´MÚhj›âubjM)�”}”(hŒ0``0`` on success, negative error code otherwise.”h]”(jS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hjiãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjeãubhŒ+ on success, negative error code otherwise.”…”�”}”(hjeãh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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_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”…”�”}”(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:73: ./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Œfile_write_and_wait_range”h]”j)�”}”(hŒfile_write_and_wait_range”h]”hŒfile_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úubj8)�”}”(hŒ/(struct file *file, loff_t lstart, loff_t lend)”h]”(j>)�”}”(hŒstruct file *file”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjßãh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÛãubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìãh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÛãubh)�”}”(hhh]”j)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjýãh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjúãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÿãŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÅã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Ûãubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj+äh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÛãubj)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj8ä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”…”�”}”(hjTäh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjQäubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jVäŒmodname”NŒ classname”Njìjï)�”}”jò]”jäŒc.file_write_and_wait_range”†”asbuh1hhjMäubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjräh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjMäubj)�”}”(hŒlstart”h]”hŒlstart”…”�”}”(hj€äh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjMä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”jèŒ reftarget”jžäŒmodname”NŒ classname”Njìjï)�”}”jò]”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Œ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&]”jjuh1j7hjžã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:73: ./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 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:73: ./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)�”}”(hj3åh]”hŒstruct file *file”…”�”}”(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:73: ./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”…”�”}”(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Œ9``loff_t lstart`` offset in bytes where the range starts ”h]”(j¯)�”}”(hŒ``loff_t lstart``”h]”jS)�”}”(hjlåh]”hŒ loff_t lstart”…”�”}”(hjnåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjjåubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´Mühjfå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Èhjfå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:73: ./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:73: ./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:73: ./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:73: ./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:73: ./mm/filemap.c”h´MhjåubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj7æh]”hŒReturn”…”�”}”(hj9æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj5æubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´MhjåubjM)�”}”(hŒ0``0`` on success, negative error code otherwise.”h]”(jS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hjQæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjMæubhŒ+ on success, negative error code otherwise.”…”�”}”(hjMæh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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”…”�”}”(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:73: ./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Œreplace_page_cache_folio”h]”j)�”}”(hŒreplace_page_cache_folio”h]”hŒreplace_page_cache_folio”…”�”}”(hj«æh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj§æubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj†æh²hh³j˜æh´Mubj8)�”}”(hŒ&(struct folio *old, struct folio *new)”h]”(j>)�”}”(hŒstruct folio *old”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÇæh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÃæubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔæh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÃæubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjåæh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjâæubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jçæŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj­æsbŒc.replace_page_cache_folio”†”asbuh1hhjÃæubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÃæubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÃæubj)�”}”(hŒold”h]”hŒold”…”�”}”(hj ç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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj9çh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj5çubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFçh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj5çubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjWçh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjTçubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jYçŒmodname”NŒ classname”Njìjï)�”}”jò]”jçŒc.replace_page_cache_folio”†”asbuh1hhj5çubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuçh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj5çubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjƒçh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj5çubj)�”}”(hŒnew”h]”hŒnew”…”�”}”(hj�ç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&]”jjuh1j7hj†æ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Œ(replace a pagecache folio with a new one”h]”hŒ(replace a pagecache folio with a new one”…”�”}”(hjºçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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„)�”}”(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:73: ./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:73: ./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)�”}”(hj4èh]”hŒstruct folio *new”…”�”}”(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:73: ./mm/filemap.c”h´M!hj.èubjÉ)�”}”(hhh]”jM)�”}”(hŒfolio to replace with”h]”hŒfolio to replace with”…”�”}”(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:73: ./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.”…”�”}”(hj…èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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.”…”�”}”(hj”èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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”…”�”}”(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:73: ./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_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þhj¿èh²hh³jÑèh´MÝubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjüèubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj éh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjüèubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjéubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j éŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjæèsbŒc.folio_unlock”†”asbuh1hhjüèubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>éh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjüèubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjLéh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjüèubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjYé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&]”jjuh1j7hj¿è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ŒUnlock a locked folio.”h]”hŒUnlock a locked folio.”…”�”}”(hjƒéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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. **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Ž)�”}”(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:73: ./mm/filemap.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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.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�hjýéubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´MàhjŸé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:73: ./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:73: ./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:73: ./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_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”…”�”}”(hjkêh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjgêh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.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Œfolio_end_read”h]”j)�”}”(hŒfolio_end_read”h]”hŒfolio_end_read”…”�”}”(hjŒêh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjˆêubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjgêh²hh³jyêh´Mñubj8)�”}”(hŒ#(struct folio *folio, bool success)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¨êh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¤êubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµêh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¤êubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÆêh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÃêubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÈêŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjŽêsbŒc.folio_end_read”†”asbuh1hhj¤êubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæêh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¤êubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjôêh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¤ê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Œ 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”…”�”}”(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&]”jjuh1j7hjgê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Œ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:73: ./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&]”jFjAjGjwëjHjwë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Ž)�”}”(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:73: ./mm/filemap.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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.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—ë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:73: ./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ó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:73: ./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:73: ./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�hj9ìubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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.”…”�”}”(hjQìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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:73: ./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”…”�”}”(hj¡ìh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�ìubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj|ìh²hh³jŽìh´Mubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj½ìh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¹ìubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊìh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¹ìubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÛìh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjØìubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÝìŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj£ìsbŒc.folio_end_private_2”†”asbuh1hhj¹ìubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûìh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¹ìubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj íh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¹ì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&]”jjuh1j7hj|ìh²hh³jŽìh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjxìh²hh³jŽìh´Mubah}”(h]”jsìah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jŽìh´Mhjuì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:73: ./mm/filemap.c”h´Mhj=íh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjuìh²hh³jŽìh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjXíjHjXí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Ž)�”}”(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:73: ./mm/filemap.c”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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”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´Mhjxí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:73: ./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:73: ./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:73: ./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:73: ./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”…”�”}”(hj1îh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj-îubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj îh²hh³jîh´M#ubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjMîh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjIî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”jèŒ reftarget”jmîŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj3îsbŒc.folio_wait_private_2”†”asbuh1hhjIîubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹îh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjIîubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj™îh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjIî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&]”jjuh1j7hj î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:73: ./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:73: ./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:73: ./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Ž)�”}”(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:73: ./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.”…”�”}”(hjbïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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:73: ./mm/filemap.c”h´M0ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ïh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�ïh²hh³jŸïh´M0ubhÿ)�”}”(hŒfolio_wait_private_2_killable”h]”j)�”}”(hŒfolio_wait_private_2_killable”h]”hŒfolio_wait_private_2_killable”…”�”}”(hj²ïh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj®ïubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj�ïh²hh³jŸïh´M0ubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÎïh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÊïubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛïh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÊïubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjìïh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjéïubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jîïŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj´ïsbŒc.folio_wait_private_2_killable”†”asbuh1hhjÊïubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ðh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÊïubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÊï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&]”jjuh1j7hj�ïh²hh³jŸïh´M0ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj‰ïh²hh³jŸïh´M0ubah}”(h]”j„ïah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jŸïh´M0hj†ï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.”…”�”}”(hjQðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M0hjNðh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj†ïh²hh³jŸïh´M0ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjiðjHjið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Ž)�”}”(hjsðh]”hŒ Parameters”…”�”}”(hjuðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjqðubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M4hjmð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:73: ./mm/filemap.c”h´M1hjŒð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´M1hj¨ðubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjŒðubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j§ðh´M1hj‰ðubah}”(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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M3hjmð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:73: ./mm/filemap.c”h´M2hjmð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:73: ./mm/filemap.c”h´M5hjmðubj^)�”}”(hhh]”(jc)�”}”(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:73: ./mm/filemap.c”h´M6hj ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj ñubjc)�”}”(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:73: ./mm/filemap.c”h´M7hj%ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj ñubeh}”(h]”h ]”h"]”h$]”h&]”j‚jƒuh1j]h³jñh´M6hjmð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Œ)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj ñh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjœñubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­ñh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjœñubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj¾ñh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj»ñubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÀñŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj†ñsbŒ#c.folio_end_writeback_no_dropbehind”†”asbuh1hhjœñubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞñh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjœñubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjìñh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjœñ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&]”jjuh1j7hj_ñh²hh³jqñh´Moubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj[ñh²hh³jqñh´Moubah}”(h]”jVñah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jqñh´MohjXñh²hubj4)�”}”(hhh]”jM)�”}”(hŒEnd writeback against a folio.”h]”hŒEnd writeback against a folio.”…”�”}”(hj#òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´Mohj òh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjXñh²hh³jqñh´Moubeh}”(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** The folio must actually be under writeback. This call is intended for filesystems that need to defer dropbehind. **Context** May be called from process or interrupt context.”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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´Mshj?òubj¤)�”}”(hhh]”j©)�”}”(hŒ#``struct folio *folio`` The folio. ”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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´Mphj^òubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hj}òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jyòh´Mphjzòubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj^òubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jyòh´Mphj[ò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:73: ./mm/filemap.c”h´Mrhj?òubjM)�”}”(hŒpThe folio must actually be under writeback. This call is intended for filesystems that need to defer dropbehind.”h]”hŒpThe folio must actually be under writeback. This call is intended for filesystems that need to defer dropbehind.”…”�”}”(hjµòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´Mqhj?ò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:73: ./mm/filemap.c”h´Mthj?òubjM)�”}”(hŒ0May be called from process or interrupt context.”h]”hŒ0May be called from process or interrupt context.”…”�”}”(hjÜòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.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éŒ folio_end_writeback (C function)”Œc.folio_end_writeback”hNt”auh1hÜhjËh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ.void folio_end_writeback (struct folio *folio)”h]”hù)�”}”(hŒ-void folio_end_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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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_writeback”h]”j)�”}”(hŒfolio_end_writeback”h]”hŒfolio_end_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�ubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjHóh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjDóubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUóh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjDó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”jèŒ reftarget”jhóŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj.ósbŒc.folio_end_writeback”†”asbuh1hhjDóubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†óh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjDóubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj”óh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjDóubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj¡óh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjDóubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj@óubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjó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 writeback against a folio.”h]”hŒEnd writeback against a folio.”…”�”}”(hjËóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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. **Description** The folio must actually be under writeback. **Context** May be called from process or interrupt context.”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:73: ./mm/filemap.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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.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Ž)�”}”(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:73: ./mm/filemap.c”h´M’hjçóubjM)�”}”(hŒ+The folio must actually be under writeback.”h]”hŒ+The folio must actually be under writeback.”…”�”}”(hj]ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M‘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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M“hjçóubjM)�”}”(hŒ0May be called from process or interrupt context.”h]”hŒ0May be called from process or interrupt context.”…”�”}”(hj„ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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_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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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_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»ubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjðôh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjìôubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýôh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjìôubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj õubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jõŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÖôsbŒc.__folio_lock”†”asbuh1hhjìôubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.õh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjìôubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj<õh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjìô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&]”jjuh1j7hj¯ô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 lock on the folio, assuming we need to sleep to get it.”h]”hŒ=Get a lock on the folio, assuming we need to sleep to get it.”…”�”}”(hjsõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.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„)�”}”(hŒ;**Parameters** ``struct folio *folio`` The folio to 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:73: ./mm/filemap.c”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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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:73: ./mm/filemap.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éŒ!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”jèŒ reftarget”jöŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒpage_cache_next_miss”sbŒc.page_cache_next_miss”†”asbuh1hhj öh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3öh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj öh²hh³j2öh´Mubhÿ)�”}”(hŒpage_cache_next_miss”h]”j)�”}”(hj/öh]”hŒpage_cache_next_miss”…”�”}”(hjEöh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjAöubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj öh²hh³j2öh´Mubj8)�”}”(hŒF(struct address_space *mapping, pgoff_t index, unsigned long max_scan)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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\ö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”jèŒ reftarget”j€öŒmodname”NŒ classname”Njìjï)�”}”jò]”j-öŒc.page_cache_next_miss”†”asbuh1hhj\öubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœöh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj\öubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjªöh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj\ö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Œ 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”jèŒ reftarget”jÕöŒmodname”NŒ classname”Njìjï)�”}”jò]”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=hjXö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”…”�”}”(hj4÷h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj÷ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjB÷h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj÷ubj)�”}”(hŒmax_scan”h]”hŒmax_scan”…”�”}”(hjP÷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&]”jjuh1j7hj öh²hh³j2öh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjöh²hh³j2öh´Mubah}”(h]”jöah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j2ö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.”…”�”}”(hjz÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´Mhjw÷h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjöh²hh³j2ö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`` 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Ž)�”}”(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:73: ./mm/filemap.c”h´Mhj–÷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”…”�”}”(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:73: ./mm/filemap.c”h´Mhjµ÷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Èhjµ÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÐ÷h´Mhj²÷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:73: ./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´Mhj²÷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:73: ./mm/filemap.c”h´Mhj'øubjÉ)�”}”(hhh]”jM)�”}”(hŒMaximum range to search.”h]”hŒMaximum range to search.”…”�”}”(hjFøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jBøh´MhjCøubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj'øubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jBøh´Mhj²÷ubeh}”(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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´Mhj–÷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:73: ./mm/filemap.c”h´Mhj–÷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:73: ./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:73: ./mm/filemap.c”h´M!hj–÷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.”…”�”}”(hj´øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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éŒ!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”jèŒ reftarget”jèøŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒpage_cache_prev_miss”sbŒc.page_cache_prev_miss”†”asbuh1hhjßøh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.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Œ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´M9ubj8)�”}”(hŒF(struct address_space *mapping, pgoff_t index, unsigned long max_scan)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj5ùh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj1ùubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBùh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj1ùubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjSùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjPùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jUùŒmodname”NŒ classname”Njìjï)�”}”jò]”jùŒc.page_cache_prev_miss”†”asbuh1hhj1ùubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqùh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj1ùubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj1ùubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjŒùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj1ù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”jèŒ reftarget”jªùŒmodname”NŒ classname”Njìjï)�”}”jò]”jùŒc.page_cache_prev_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&]”jjuh1j7hjßø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Œ(Find the previous gap in the page cache.”h]”hŒ(Find the previous gap in the page cache.”…”�”}”(hjOúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M9hjLúh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjØøh²hh³jùh´M9ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjgújHjgú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Ž)�”}”(hjqúh]”hŒ Parameters”…”�”}”(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:73: ./mm/filemap.c”h´M=hjkú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”…”�”}”(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:73: ./mm/filemap.c”h´M:hjŠúubjÉ)�”}”(hhh]”jM)�”}”(hŒMapping.”h]”hŒ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‡ú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:73: ./mm/filemap.c”h´M;hjÃú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ÈhjÃúubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÞúh´M;hj‡ú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:73: ./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<hj‡úubeh}”(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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M>hjkú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.”…”�”}”(hjSûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M=hjkú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.”…”�”}”(hjbûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M@hjkúubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjsûh]”hŒReturn”…”�”}”(hjuûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjqûubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´MFhjkú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.”…”�”}”(hj‰ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´MGhjkú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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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:73: ./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)�”}”(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”jèŒ reftarget”jÙûŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒ__filemap_get_folio_mpol”sbŒc.__filemap_get_folio_mpol”†”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�ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj´ûh²hh³jÅû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þhj´ûh²hh³jÅûh´M�ubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj2üh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj.üubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?üh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj.üubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjPüh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjMüubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jRüŒmodname”NŒ classname”Njìjï)�”}”jò]”jóûŒc.__filemap_get_folio_mpol”†”asbuh1hhj.üubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnüh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj.üubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj|üh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj.ü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”jèŒ reftarget”j§üŒmodname”NŒ classname”Njìjï)�”}”jò]”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Œ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Œ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”jèŒ reftarget”jïüŒmodname”NŒ classname”Njìjï)�”}”jò]”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”…”�”}”(hj5ýh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2ýubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j7ýŒmodname”NŒ classname”Njìjï)�”}”jò]”jóûŒc.__filemap_get_folio_mpol”†”asbuh1hhj.ýubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSýh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj.ýubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjaý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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjzýh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjvýubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡ýh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjvýubh)�”}”(hhh]”j)�”}”(hŒ mempolicy”h]”hŒ mempolicy”…”�”}”(hj˜ýh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj•ýubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jšýŒmodname”NŒ classname”Njìjï)�”}”jò]”jóûŒc.__filemap_get_folio_mpol”†”asbuh1hhjvýubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶ýh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjvýubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÄýh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjvýubj)�”}”(hŒpolicy”h]”hŒpolicy”…”�”}”(hjÑýh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjvýubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj*üubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj´û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 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:73: ./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 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:73: ./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:73: ./mm/filemap.c”h´Mžhj6þubjÉ)�”}”(hhh]”jM)�”}”(hŒThe address_space to search.”h]”hŒThe address_space to search.”…”�”}”(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žhj3þubj©)�”}”(hŒ"``pgoff_t index`` The page index. ”h]”(j¯)�”}”(hŒ``pgoff_t index``”h]”jS)�”}”(hjuþh]”hŒ pgoff_t index”…”�”}”(hjwþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjsþubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´MŸhjoþubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page index.”h]”hŒThe page index.”…”�”}”(hjŽþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jŠþh´MŸhj‹þubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjoþubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŠþh´MŸhj3þ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:73: ./mm/filemap.c”h´M hj¨þubjÉ)�”}”(hhh]”jM)�”}”(hŒ/``FGP`` flags modify how the folio is returned.”h]”(jS)�”}”(hŒ``FGP``”h]”hŒFGP”…”�”}”(hjËþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÇþubhŒ( flags modify how the folio is returned.”…”�”}”(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 hj3þ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:73: ./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¡hj3þ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”…”�”}”(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:73: ./mm/filemap.c”h´M¢hj:ÿubjÉ)�”}”(hhh]”jM)�”}”(hŒ(NUMA memory allocation policy to follow.”h]”hŒ(NUMA memory allocation policy to follow.”…”�”}”(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¢hj3þ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�hjyÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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”…”�”}”(hj™ÿh²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Œ.”…”�”}”(hj‘ÿh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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 ”…”�”}”(hjÄÿh²hh³Nh´NubjS)�”}”(hŒ ``FGP_LOCK``”h]”hŒFGP_LOCK”…”�”}”(hjÌÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÄÿubhŒ or ”…”�”}”(hjÄÿh²hh³Nh´NubjS)�”}”(hŒ ``FGP_CREAT``”h]”hŒ FGP_CREAT”…”�”}”(hjÞÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÄÿubhŒ7 are specified then the function may sleep even if the ”…”�”}”(hjÄÿh²hh³Nh´NubjS)�”}”(hŒ``GFP``”h]”hŒGFP”…”�”}”(hjðÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÄÿubhŒ flags specified for ”…”�”}”(hjÄÿh²hh³Nh´NubjS)�”}”(hŒ ``FGP_CREAT``”h]”hŒ FGP_CREAT”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÄÿubhŒ are atomic.”…”�”}”(hjÄÿh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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:73: ./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.”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjmh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´MÏubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjmh²hh³jh´MÏubhÿ)�”}”(hŒfilemap_get_folios”h]”j)�”}”(hŒfilemap_get_folios”h]”hŒfilemap_get_folios”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŽubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjmh²hh³jh´MÏubj8)�”}”(hŒX(struct address_space *mapping, pgoff_t *start, pgoff_t end, struct folio_batch *fbatch)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjªubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjªubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jÎŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj”sbŒc.filemap_get_folios”†”asbuh1hhjªubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjªubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjªubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjh²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”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j%Œmodname”NŒ classname”Njìjï)�”}”jò]”jèŒc.filemap_get_folios”†”asbuh1hhjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¦ubj>)�”}”(hŒ pgoff_t end”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjuubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jzŒmodname”NŒ classname”Njìjï)�”}”jò]”jèŒc.filemap_get_folios”†”asbuh1hhjqubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjqubj)�”}”(hŒend”h]”hŒend”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjqubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¦ubj>)�”}”(hŒstruct folio_batch *fbatch”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¹ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¹ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jÝŒmodname”NŒ classname”Njìjï)�”}”jò]”jèŒc.filemap_get_folios”†”asbuh1hhj¹ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¹ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¹ubj)�”}”(hŒfbatch”h]”hŒfbatch”…”�”}”(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&]”jjuh1j7hjmh²hh³jh´MÏubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjih²hh³jh´MÏubah}”(h]”jdah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jh´MÏhjfh²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:73: ./mm/filemap.c”h´MÏhj;h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjfh²hh³jh´MÏubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjVjHjVjI‰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”…”�”}”(hjbh²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:73: ./mm/filemap.c”h´MÓhjZubj¤)�”}”(hhh]”(j©)�”}”(hŒ>``struct address_space *mapping`` The address_space to search ”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&]”uh1jRhj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´MÐhjyubjÉ)�”}”(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Èhjyubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j”h´MÐhjvubj©)�”}”(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:73: ./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Ñhjvubj©)�”}”(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:73: ./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³jh´MÒhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jh´MÒhjvubj©)�”}”(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:73: ./mm/filemap.c”h´MÓhj$ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe batch to fill.”h]”hŒThe batch to fill.”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j?h´MÓhj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j?h´MÓhjvubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjZubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjeh]”hŒ Description”…”�”}”(hjgh²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:73: ./mm/filemap.c”h´MÕhjZubjM)�”}”(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”…”�”}”(hjƒ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”…”�”}”(hj•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”…”�”}”(hj§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:73: ./mm/filemap.c”h´MÔhjZubjM)�”}”(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:73: ./mm/filemap.c”h´MØhjZubjM)�”}”(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:73: ./mm/filemap.c”h´MÙhjZubeh}”(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”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.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_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&]”uh1jhj6ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjh²hh³j'h´Mäubj8)�”}”(hŒX(struct address_space *mapping, pgoff_t *start, pgoff_t end, struct folio_batch *fbatch)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjRubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjRubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjqubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jvŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj<sbŒc.filemap_get_folios_contig”†”asbuh1hhjRubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjRubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjRubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjNubj>)�”}”(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”jèŒ reftarget”jÍŒmodname”NŒ classname”Njìjï)�”}”jò]”j�Œc.filemap_get_folios_contig”†”asbuh1hhjÄubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÄubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÄubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÄubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjNubj>)�”}”(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&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j"Œmodname”NŒ classname”Njìjï)�”}”jò]”j�Œc.filemap_get_folios_contig”†”asbuh1hhjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjubj)�”}”(hŒend”h]”hŒend”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjNubj>)�”}”(hŒstruct folio_batch *fbatch”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjaubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjaubh)�”}”(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”jèŒ reftarget”j…Œmodname”NŒ classname”Njìjï)�”}”jò]”j�Œc.filemap_get_folios_contig”†”asbuh1hhjaubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjaubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjaubj)�”}”(hŒfbatch”h]”hŒfbatch”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjaubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjNubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjh²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Œ 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:73: ./mm/filemap.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„)�”}”(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Ž)�”}”(hjh]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´Mèhjubj¤)�”}”(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:73: ./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åhjubj©)�”}”(hŒ+``pgoff_t *start`` The starting page index ”h]”(j¯)�”}”(hŒ``pgoff_t *start``”h]”jS)�”}”(hj`h]”hŒpgoff_t *start”…”�”}”(hjbh²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:73: ./mm/filemap.c”h´MæhjZubjÉ)�”}”(hhh]”jM)�”}”(hŒThe starting page index”h]”hŒThe starting page index”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³juh´Mæhjvubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjZubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³juh´Mæhjubj©)�”}”(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:73: ./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çhjubj©)�”}”(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:73: ./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èhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj h]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´MêhjubjM)�”}”(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:73: ./mm/filemap.c”h´MéhjubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj4h]”hŒReturn”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´MíhjubjM)�”}”(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 ”…”�”}”(hjJh²hh³Nh´NubjŽ)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjJubhŒ2 to be positioned for traversal of the next folio.”…”�”}”(hjJh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.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éŒ#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àhj‡h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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_tag”h]”j)�”}”(hŒfilemap_get_folios_tag”h]”hŒfilemap_get_folios_tag”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¨ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj‡h²hh³j™h´M* ubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÄubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÄubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jèŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj®sbŒc.filemap_get_folios_tag”†”asbuh1hhjÄubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÄubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÄ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”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj:ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j?Œmodname”NŒ classname”Njìjï)�”}”jò]”jŒc.filemap_get_folios_tag”†”asbuh1hhj6ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj6ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj6ubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj6ubeh}”(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”jèŒ reftarget”j”Œmodname”NŒ classname”Njìjï)�”}”jò]”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”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‹ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÀ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”jèŒ reftarget”jÜŒmodname”NŒ classname”Njìjï)�”}”jò]”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=hjÀubj>)�”}”(hŒstruct folio_batch *fbatch”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj, h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j? Œmodname”NŒ classname”Njìjï)�”}”jò]”jŒc.filemap_get_folios_tag”†”asbuh1hhj ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[ h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hji h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj ubj)�”}”(hŒfbatch”h]”hŒfbatch”…”�”}”(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&]”jjuh1j7hj‡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 matching **tag**”h]”(hŒGet a batch of folios matching ”…”�”}”(hj  h²hh³Nh´NubjŽ)�”}”(hŒ**tag**”h]”hŒtag”…”�”}”(hj¨ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj  ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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„)�”}”(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:73: ./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:73: ./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:73: ./mm/filemap.c”h´M, hj" ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe starting page index”h]”hŒThe starting page index”…”�”}”(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Œ1``pgoff_t end`` The final page index (inclusive) ”h]”(j¯)�”}”(hŒ``pgoff_t end``”h]”jS)�”}”(hja h]”hŒ pgoff_t end”…”�”}”(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:73: ./mm/filemap.c”h´M- hj[ ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The final page index (inclusive)”h]”hŒ The final page index (inclusive)”…”�”}”(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Œ ``xa_mark_t tag`` The tag index ”h]”(j¯)�”}”(hŒ``xa_mark_t tag``”h]”jS)�”}”(hjš h]”hŒ xa_mark_t tag”…”�”}”(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:73: ./mm/filemap.c”h´M. hj” ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The tag index”h]”hŒ The tag 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``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:73: ./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:73: ./mm/filemap.c”h´M1 hjÊ 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”…”�”}”(hjP 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”…”�”}”(hjb 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”…”�”}”(hjt 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:73: ./mm/filemap.c”h´M0 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:73: ./mm/filemap.c”h´M8 hjÊ 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 ”…”�”}”(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 traversal.”…”�”}”(hj¥ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M9 hjÊ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjËh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(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”jèŒ reftarget”jë Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒ filemap_read”sbŒc.filemap_read”†”asbuh1hhjâ h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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é ubj8)�”}”(hŒA(struct kiocb *iocb, struct iov_iter *iter, ssize_t already_read)”h]”(j>)�”}”(hŒstruct kiocb *iocb”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj4 ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjE h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj4 ubh)�”}”(hhh]”j)�”}”(hŒkiocb”h]”hŒkiocb”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjS ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jX Œmodname”NŒ classname”Njìjï)�”}”jò]”j Œc.filemap_read”†”asbuh1hhj4 ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjt h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj4 ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj‚ h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj4 ubj)�”}”(hŒiocb”h]”hŒiocb”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4 ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj0 ubj>)�”}”(hŒstruct iov_iter *iter”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¨ h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¤ ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµ h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¤ ubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jÈ Œmodname”NŒ classname”Njìjï)�”}”jò]”j Œc.filemap_read”†”asbuh1hhj¤ ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjä h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¤ ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjò h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¤ ubj)�”}”(hŒiter”h]”hŒiter”…”�”}”(hjÿ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj0 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”jèŒ reftarget”j Œmodname”NŒ classname”Njìjï)�”}”jò]”j Œc.filemap_read”†”asbuh1hhj ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9 h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj ubj)�”}”(hŒ already_read”h]”hŒ already_read”…”�”}”(hjG h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj0 ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjâ 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.”…”�”}”(hjq h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”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„)�”}”(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Ž)�”}”(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:73: ./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)�”}”(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:73: ./mm/filemap.c”h´Mê hj¬ ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe iocb to read.”h]”hŒThe iocb to read.”…”�”}”(hjË h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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 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:73: ./mm/filemap.c”h´Më hjå ubjÉ)�”}”(hhh]”jM)�”}”(hŒDestination for the data.”h]”hŒDestination for the data.”…”�”}”(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Œ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:73: ./mm/filemap.c”h´Mì hjubjÉ)�”}”(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³j9h´Mì hj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j9h´Mì hj© ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj� ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj_h]”hŒ Description”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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.”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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:73: ./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.”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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&]”uh1jhjËubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÐŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒgeneric_file_read_iter”sbŒc.generic_file_read_iter”†”asbuh1hhjÇh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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_read_iter”h]”j)�”}”(hjìh]”hŒgeneric_file_read_iter”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjþubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÇh²hh³jïh´Mœ ubj8)�”}”(hŒ+(struct kiocb *iocb, struct iov_iter *iter)”h]”(j>)�”}”(hŒstruct kiocb *iocb”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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òhjubh)�”}”(hhh]”j)�”}”(hŒkiocb”h]”hŒkiocb”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj8ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j=Œmodname”NŒ classname”Njìjï)�”}”jò]”jêŒc.generic_file_read_iter”†”asbuh1hhjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjubj)�”}”(hŒiocb”h]”hŒiocb”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjubj>)�”}”(hŒstruct iov_iter *iter”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj‰ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‰ubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”j­Œmodname”NŒ classname”Njìjï)�”}”jò]”jêŒc.generic_file_read_iter”†”asbuh1hhj‰ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‰ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj‰ubj)�”}”(hŒiter”h]”hŒiter”…”�”}”(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&]”jjuh1j7hjÇ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Œgeneric filesystem read routine”h]”hŒgeneric filesystem read routine”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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 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Ž)�”}”(hj0h]”hŒ Parameters”…”�”}”(hj2h²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:73: ./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)�”}”(hjOh]”hŒstruct kiocb *iocb”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M� hjIubjÉ)�”}”(hhh]”jM)�”}”(hŒkernel I/O control block”h]”hŒkernel I/O control block”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jdh´M� hjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjIubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jdh´M� hjFubj©)�”}”(hŒ8``struct iov_iter *iter`` destination for the data read ”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:73: ./mm/filemap.c”h´Mž hj‚ubjÉ)�”}”(hhh]”jM)�”}”(hŒdestination for the data read”h]”hŒdestination for the data read”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�h´Mž hjžubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�h´Mž hjFubeh}”(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:73: ./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:73: ./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:73: ./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:73: ./mm/filemap.c”h´M¦ hj*ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjh]”hŒReturn”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M« hj*ubj^)�”}”(hhh]”(jc)�”}”(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:73: ./mm/filemap.c”h´M¬ hj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjubjc)�”}”(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:73: ./mm/filemap.c”h´M­ hj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjubeh}”(h]”h ]”h"]”h$]”h&]”j‚juuh1j]h³j2h´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”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjwubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j|Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒfilemap_splice_read”sbŒc.filemap_splice_read”†”asbuh1hhjsh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjsh²hh³j›h´M ubhÿ)�”}”(hŒfilemap_splice_read”h]”j)�”}”(hj˜h]”hŒfilemap_splice_read”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjªubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjsh²hh³j›h´M ubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÅubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÅubh)�”}”(hhh]”j)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjäubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jéŒmodname”NŒ classname”Njìjï)�”}”jò]”j–Œc.filemap_splice_read”†”asbuh1hhjÅubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÅubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÅubj)�”}”(hŒin”h]”hŒin”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÅubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÁ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&]”uh1jhj9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j>Œmodname”NŒ classname”Njìjï)�”}”jò]”j–Œc.filemap_splice_read”†”asbuh1hhj5ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj5ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj5ubj)�”}”(hŒppos”h]”hŒppos”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÁubj>)�”}”(hŒstruct pipe_inode_info *pipe”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjŠubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjŠubh)�”}”(hhh]”j)�”}”(hŒpipe_inode_info”h]”hŒpipe_inode_info”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj©ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j®Œmodname”NŒ classname”Njìjï)�”}”jò]”j–Œc.filemap_splice_read”†”asbuh1hhjŠubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjŠubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjŠubj)�”}”(hŒpipe”h]”hŒpipe”…”�”}”(hjå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”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjþubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jŒmodname”NŒ classname”Njìjï)�”}”jò]”j–Œc.filemap_splice_read”†”asbuh1hhjúubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²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 flags”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjBubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjBubjá)�”}”(hŒint”h]”hŒint”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjBubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjBubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÁubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjsh²hh³j›h´M ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjoh²hh³j›h´M ubah}”(h]”jjah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j›h´M hjlh²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”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M hj¥h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjlh²hh³j›h´M ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÀjHjÀ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Ž)�”}”(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:73: ./mm/filemap.c”h´M hjÄ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:73: ./mm/filemap.c”h´M hjãubjÉ)�”}”(hhh]”jM)�”}”(hŒThe file to read from”h]”hŒThe file to read from”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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:73: ./mm/filemap.c”h´M hjubjÉ)�”}”(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³j7h´M hj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j7h´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&]”uh1jRhjYubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M hjUubjÉ)�”}”(hhh]”jM)�”}”(hŒThe pipe to splice into”h]”hŒThe pipe to splice into”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jph´M hjqubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjUubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jph´M hjàubj©)�”}”(hŒ$``size_t len`` The amount to splice ”h]”(j¯)�”}”(hŒ``size_t len``”h]”jS)�”}”(hj”h]”hŒ size_t len”…”�”}”(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:73: ./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³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 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&]”uh1jRhjËubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M hjÇ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È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Ž)�”}”(hjh]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M hjÄ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.”…”�”•T}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M hjÄubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj/h]”hŒReturn”…”�”}”(hj1h²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:73: ./mm/filemap.c”h´M hjÄ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 ”…”�”}”(hjEh²hh³Nh´NubjŽ)�”}”(hŒ ***ppos**”h]”hŒ*ppos”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjEubhX4 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.”…”�”}”(hjEh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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_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”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj†ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j‹Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒ filemap_fault”sbŒc.filemap_fault”†”asbuh1hhj‚h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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_fault”h]”j)�”}”(hj§h]”hŒ filemap_fault”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¹ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj‚h²hh³jªh´Mß ubj8)�”}”(hŒ(struct vm_fault *vmf)”h]”j>)�”}”(hŒstruct vm_fault *vmf”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÔubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÔubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jøŒmodname”NŒ classname”Njìjï)�”}”jò]”j¥Œc.filemap_fault”†”asbuh1hhjÔubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÔubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÔ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&]”jjuh1j7hj‚h²hh³jªh´Mß ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj~h²hh³jªh´Mß ubah}”(h]”jyah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jª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”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´Mß hjVh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj{h²hh³jªh´Mß ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjqjHjqjI‰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�hjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´Mã hjuubj¤)�”}”(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)�”}”(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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´Mà hj”ubjÉ)�”}”(hhh]”jM)�”}”(hŒ/struct vm_fault containing details of the fault”h]”hŒ/struct vm_fault containing details of the 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‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjuubjM)�”}”(hŒ**Description**”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:73: ./mm/filemap.c”h´Mâ hjuubjM)�”}”(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:73: ./mm/filemap.c”h´Má hjuubjM)�”}”(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:73: ./mm/filemap.c”h´Mä hjuubjM)�”}”(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:73: ./mm/filemap.c”h´Mè hjuubjM)�”}”(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().”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´Mê hjuubjM)�”}”(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:73: ./mm/filemap.c”h´Mí hjuubjM)�”}”(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.”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´Mð hjuubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjGh]”hŒReturn”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjEubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´Mò hjuubjM)�”}”(hŒ"bitwise-OR of ``VM_FAULT_`` codes.”h]”(hŒbitwise-OR of ”…”�”}”(hj]h²hh³Nh´NubjS)�”}”(hŒ ``VM_FAULT_``”h]”hŒ VM_FAULT_”…”�”}”(hjeh²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:73: ./mm/filemap.c”h´Mó hjuubeh}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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:73: ./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)�”}”(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”jèŒ reftarget”j¿Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒread_cache_folio”sbŒc.read_cache_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\ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjšh²hh³j«h´M\ubhÿ)�”}”(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þhjšh²hh³j«h´M\ubj8)�”}”(hŒR(struct address_space *mapping, pgoff_t index, filler_t filler, struct file *file)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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òhjubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j8Œmodname”NŒ classname”Njìjï)�”}”jò]”jÙŒc.read_cache_folio”†”asbuh1hhjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjubj>)�”}”(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”jèŒ reftarget”j�Œmodname”NŒ classname”Njìjï)�”}”jò]”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Œindex”h]”hŒindex”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj„ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjubj>)�”}”(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”jèŒ reftarget”jÕŒmodname”NŒ classname”Njìjï)�”}”jò]”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=hjubj>)�”}”(hŒstruct file *file”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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òhjubh)�”}”(hhh]”j)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j8Œmodname”NŒ classname”Njìjï)�”}”jò]”jÙŒc.read_cache_folio”†”asbuh1hhjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjubj)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjš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 into page cache, fill it if needed.”h]”hŒ(Read into page cache, fill it if needed.”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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 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Ž)�”}”(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:73: ./mm/filemap.c”h´M`hjµ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:73: ./mm/filemap.c”h´M]hjÔ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´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 index to read. ”h]”(j¯)�”}”(hŒ``pgoff_t index``”h]”jS)�”}”(hjh]”hŒ pgoff_t index”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M^hj 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´M^hj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j(h´M^hjÑ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)�”}”(hjLh]”hŒfiller_t filler”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjJubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M_hjFubjÉ)�”}”(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().”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jah´M_hjbubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjFubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jah´M_hjÑubj©)�”}”(hŒN``struct file *file`` Passed to filler function, may be NULL if not required. ”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:73: ./mm/filemap.c”h´M`hjubjÉ)�”}”(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.”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jš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£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:73: ./mm/filemap.c”h´Mbhjµ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:73: ./mm/filemap.c”h´Mahjµ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:73: ./mm/filemap.c”h´MdhjµubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjh]”hŒContext”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´MghjµubjM)�”}”(hŒ8May sleep. Expects mapping->invalidate_lock to be held.”h]”hŒ8May sleep. Expects mapping->invalidate_lock to be held.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´MhhjµubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj/h]”hŒReturn”…”�”}”(hj1h²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:73: ./mm/filemap.c”h´MjhjµubjM)�”}”(hŒ3An uptodate folio on success, ERR_PTR() on failure.”h]”hŒ3An uptodate folio on success, ERR_PTR() on failure.”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.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éŒ#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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjph²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´Mtubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjph²hh³j�h´Mtubh)�”}”(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”jèŒ reftarget”j•Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒmapping_read_folio_gfp”sbŒc.mapping_read_folio_gfp”†”asbuh1hhjph²hh³j�h´Mtubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjph²hh³j�h´Mtubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjph²hh³j�h´Mtubhÿ)�”}”(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þhjph²hh³j�h´Mtubj8)�”}”(hŒ9(struct address_space *mapping, pgoff_t index, gfp_t gfp)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjêubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjêubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jŒmodname”NŒ classname”Njìjï)�”}”jò]”j¯Œc.mapping_read_folio_gfp”†”asbuh1hhjêubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjêubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjê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 index”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”jèŒ reftarget”jcŒmodname”NŒ classname”Njìjï)�”}”jò]”j¯Œc.mapping_read_folio_gfp”†”asbuh1hhjZubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjZubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjZubeh}”(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”jèŒ reftarget”j«Œmodname”NŒ classname”Njìjï)�”}”jò]”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Œ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&]”jjuh1j7hjph²hh³j�h´Mtubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjlh²hh³j�h´Mtubah}”(h]”jgah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j�h´Mthjih²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:73: ./mm/filemap.c”h´Mthjüh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjih²hh³j�h´Mtubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjjHjjI‰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�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´Mxhjubj¤)�”}”(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”…”�”}”(hjBh²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:73: ./mm/filemap.c”h´Muhj:ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The address_space for the folio.”h]”hŒ The address_space for the folio.”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jUh´MuhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jUh´Muhj7ubj©)�”}”(hŒC``pgoff_t index`` The index that the allocated folio will contain. ”h]”(j¯)�”}”(hŒ``pgoff_t index``”h]”jS)�”}”(hjyh]”hŒ pgoff_t index”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´MvhjsubjÉ)�”}”(hhh]”jM)�”}”(hŒ0The index that the allocated folio will contain.”h]”hŒ0The index that the allocated folio will contain.”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jŽh´Mvhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjsubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŽh´Mvhj7ubj©)�”}”(hŒ=``gfp_t gfp`` The page allocator flags to use if allocating. ”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:73: ./mm/filemap.c”h´Mwhj¬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³jÇh´MwhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÇh´Mwhj7ubeh}”(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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´MyhjubjM)�”}”(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.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´MxhjubjM)�”}”(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.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M{hjubjM)�”}”(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:73: ./mm/filemap.c”h´MhjubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj2h]”hŒReturn”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M�hjubjM)�”}”(hŒ0Uptodate folio on success, ERR_PTR() on failure.”h]”hŒ0Uptodate folio on success, ERR_PTR() on failure.”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.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éŒ 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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjsh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´MŸubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjsh²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”jèŒ reftarget”j˜Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒread_cache_page_gfp”sbŒc.read_cache_page_gfp”†”asbuh1hhjsh²hh³j„h´MŸubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjsh²hh³j„h´MŸubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjsh²hh³j„h´MŸubhÿ)�”}”(hŒread_cache_page_gfp”h]”j)�”}”(hj´h]”hŒread_cache_page_gfp”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÒubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjsh²hh³j„h´MŸubj8)�”}”(hŒ9(struct address_space *mapping, pgoff_t index, gfp_t gfp)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjíubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjíubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jŒmodname”NŒ classname”Njìjï)�”}”jò]”j²Œc.read_cache_page_gfp”†”asbuh1hhjíubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjíubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjíubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjHh²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”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjaubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jfŒmodname”NŒ classname”Njìjï)�”}”jò]”j²Œc.read_cache_page_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”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj©ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j®Œmodname”NŒ classname”Njìjï)�”}”jò]”j²Œc.read_cache_page_gfp”†”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&]”jjuh1j7hjsh²hh³j„h´MŸubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjoh²hh³j„h´MŸubah}”(h]”jjah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j„h´MŸhjlh²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:73: ./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)�”}”(hjC h]”hŒstruct address_space *mapping”…”�”}”(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:73: ./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³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Œ!``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&]”uh1jRhjz ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M¡hjv ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe page index”h]”hŒthe page index”…”�”}”(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: ubj©)�”}”(hŒ<``gfp_t gfp`` the page allocator flags to use if allocating ”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:73: ./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³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:73: ./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:73: ./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:73: ./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:73: ./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:73: ./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.”…”�”}”(hjK!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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&]”uh1jhjz!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j!Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒ__generic_file_write_iter”sbŒc.__generic_file_write_iter”†”asbuh1hhjv!h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´Mkubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ!h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjv!h²hh³jž!h´Mkubhÿ)�”}”(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þhjv!h²hh³jž!h´Mkubj8)�”}”(hŒ+(struct kiocb *iocb, struct iov_iter *from)”h]”(j>)�”}”(hŒstruct kiocb *iocb”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÌ!h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÈ!ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙ!h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÈ!ubh)�”}”(hhh]”j)�”}”(hŒkiocb”h]”hŒkiocb”…”�”}”(hjê!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjç!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jì!Œmodname”NŒ classname”Njìjï)�”}”jò]”j™!Œc.__generic_file_write_iter”†”asbuh1hhjÈ!ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÈ!ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÈ!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 *from”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj<"h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj8"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”jèŒ reftarget”j\"Œmodname”NŒ classname”Njìjï)�”}”jò]”j™!Œc.__generic_file_write_iter”†”asbuh1hhj8"ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjx"h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj8"ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj†"h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj8"ubj)�”}”(hŒfrom”h]”hŒfrom”…”�”}”(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&]”jjuh1j7hjv!h²hh³jž!h´Mkubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjr!h²hh³jž!h´Mkubah}”(h]”jm!ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jž!h´Mkhjo!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:73: ./mm/filemap.c”h´Mkhjº"h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjo!h²hh³jž!h´Mkubeh}”(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:73: ./mm/filemap.c”h´MohjÙ"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:73: ./mm/filemap.c”h´Mlhjø"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´Mlhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjø"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j#h´Mlhjõ"ubj©)�”}”(hŒ6``struct iov_iter *from`` iov_iter with data to write ”h]”(j¯)�”}”(hŒ``struct iov_iter *from``”h]”jS)�”}”(hj7#h]”hŒstruct iov_iter *from”…”�”}”(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:73: ./mm/filemap.c”h´Mmhj1#ubjÉ)�”}”(hhh]”jM)�”}”(hŒiov_iter with data to write”h]”hŒiov_iter with data to write”…”�”}”(hjP#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jL#h´MmhjM#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj1#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jL#h´Mmhjõ"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:73: ./mm/filemap.c”h´MohjÙ"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.”…”�”}”(hjˆ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´MnhjÙ"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.”…”�”}”(hj—#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´MshjÙ"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 ”…”�”}”(hj¦#h²hh³Nh´Nubjí )�”}”(hŒ*not*”h]”hŒnot”…”�”}”(hj®#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jì hj¦#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.”…”�”}”(hj¦#h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´MzhjÙ"ubj^)�”}”(hhh]”(jc)�”}”(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:73: ./mm/filemap.c”h´M{hjâ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjß#ubjc)�”}”(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:73: ./mm/filemap.c”h´M|hjú#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjß#ubeh}”(h]”h ]”h"]”h$]”h&]”j‚juuh1j]h³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éŒ$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&]”uh1jhj8$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j=$Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒgeneric_file_write_iter”sbŒc.generic_file_write_iter”†”asbuh1hhj4$h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M¢ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]$h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj4$h²hh³j\$h´M¢ubhÿ)�”}”(hŒgeneric_file_write_iter”h]”j)�”}”(hjY$h]”hŒgeneric_file_write_iter”…”�”}”(hjo$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjk$ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj4$h²hh³j\$h´M¢ubj8)�”}”(hŒ+(struct kiocb *iocb, struct iov_iter *from)”h]”(j>)�”}”(hŒstruct kiocb *iocb”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjŠ$h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj†$ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—$h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj†$ubh)�”}”(hhh]”j)�”}”(hŒkiocb”h]”hŒkiocb”…”�”}”(hj¨$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¥$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jª$Œmodname”NŒ classname”Njìjï)�”}”jò]”jW$Œc.generic_file_write_iter”†”asbuh1hhj†$ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆ$h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj†$ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÔ$h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj†$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 *from”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjú$h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjö$ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjö$ubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”j%Œmodname”NŒ classname”Njìjï)�”}”jò]”jW$Œc.generic_file_write_iter”†”asbuh1hhjö$ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6%h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjö$ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjD%h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjö$ubj)�”}”(hŒfrom”h]”hŒfrom”…”�”}”(hjQ%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&]”jjuh1j7hj4$h²hh³j\$h´M¢ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj0$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:73: ./mm/filemap.c”h´M¢hjx%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 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Ž)�”}”(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:73: ./mm/filemap.c”h´M¦hj—%ubj¤)�”}”(hhh]”(j©)�”}”(hŒ*``struct kiocb *iocb`` IO state structure ”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:73: ./mm/filemap.c”h´M£hj¶%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Èhj¶%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÑ%h´M£hj³%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:73: ./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Ž)�”}”(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:73: ./mm/filemap.c”h´M¦hj—%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.”…”�”}”(hjF&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M©hj—%ubj^)�”}”(hhh]”(jc)�”}”(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”…”�”}”(hjt&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´M©hjp&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjm&ubjc)�”}”(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:73: ./mm/filemap.c”h´M«hj‰&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjm&ubeh}”(h]”h ]”h"]”h$]”h&]”j‚juuh1j]h³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_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”…”�”}”(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:73: ./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_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þhjÃ&h²hh³jÔ&h´MÁubj8)�”}”(hŒ (struct folio *folio, gfp_t gfp)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÿ&ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÿ&ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj!'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j#'Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjé&sbŒc.filemap_release_folio”†”asbuh1hhjÿ&ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA'h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÿ&ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjO'h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÿ&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”…”�”}”(hjx'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhju'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jz'Œmodname”NŒ classname”Njìjï)�”}”jò]”j='Œc.filemap_release_folio”†”asbuh1hhjq'ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–'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&]”jjuh1j7hjÃ&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 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:73: ./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„)�”}”(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:73: ./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:73: ./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)�”}”(hjH(h]”hŒ gfp_t gfp”…”�”}”(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:73: ./mm/filemap.c”h´MÃhjB(ubjÉ)�”}”(hhh]”jM)�”}”(hŒ'Memory allocation flags (and I/O mode).”h]”hŒ'Memory allocation flags (and I/O mode).”…”�”}”(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(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:73: ./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).”…”�”}”(hj™(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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.”…”�”}”(hj¨(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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 ”…”�”}”(hj·(h²hh³Nh´NubjŽ)�”}”(hŒ**gfp**”h]”hŒgfp”…”�”}”(hj¿(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj·(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).”…”�”}”(hj·(h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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:73: ./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:73: ./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:73: ./mm/filemap.c”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Œ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³jM)h´Mâubj8)�”}”(hŒ;(struct inode *inode, bool flush, loff_t start, loff_t end)”h]”(j>)�”}”(hŒstruct inode *inode”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj|)h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjx)ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰)h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjx)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”jèŒ reftarget”jœ)Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjb)sbŒc.filemap_invalidate_inode”†”asbuh1hhjx)ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjº)h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjx)ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÈ)h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjx)ubj)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjÕ)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjx)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjt)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=hjt)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”jèŒ reftarget”j'*Œmodname”NŒ classname”Njìjï)�”}”jò]”j¶)Œc.filemap_invalidate_inode”†”asbuh1hhj*ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjC*h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj*ubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjQ*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjt)ubj>)�”}”(hŒ loff_t end”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjm*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjj*ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jo*Œmodname”NŒ classname”Njìjï)�”}”jò]”j¶)Œc.filemap_invalidate_inode”†”asbuh1hhjf*ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹*h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjf*ubj)�”}”(hŒend”h]”hŒend”…”�”}”(hj™*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjf*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjt)ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj;)h²hh³jM)h´Mâubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj7)h²hh³jM)h´Mâubah}”(h]”j2)ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jM)h´Mâhj4)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”…”�”}”(hjÃ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´MâhjÀ*h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj4)h²hh³jM)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:73: ./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:73: ./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:73: ./mm/filemap.c”h´Mähj7+ubjÉ)�”}”(hhh]”jM)�”}”(hŒ0Set to write back rather than simply invalidate.”h]”hŒ0Set to write back rather than simply invalidate.”…”�”}”(hjV+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jR+h´MähjS+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj7+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jR+h´Mähjû*ubj©)�”}”(hŒ)``loff_t start`` First byte to in range. ”h]”(j¯)�”}”(hŒ``loff_t start``”h]”jS)�”}”(hjv+h]”hŒ loff_t start”…”�”}”(hjx+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjt+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.c”h´Måhjp+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Èhjp+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:73: ./mm/filemap.c”h´Mçhj©+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.”…”�”}”(hjÈ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./mm/filemap.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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:73: ./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:73: ./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´KGubh¶)�”}”(hhh]”(h»)�”}”(hŒ Readahead”h]”hŒ Readahead”…”�”}”(hj",h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj,h²hh³hÊh´KMubjM)�”}”(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.”…”�”}”(hj0,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:79: ./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:79: ./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.”…”�”}”(hjN,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:79: ./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:79: ./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.”…”�”}”(hjl,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:79: ./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:79: ./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.”…”�”}”(hjŠ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:79: ./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.”…”�”}”(hj™,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:79: ./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.”…”�”}”(hj¨,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:79: ./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.”…”�”}”(hj·,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:79: ./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.”…”�”}”(hjÆ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:79: ./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:79: ./mm/readahead.c”h´KShj,h²hubj^)�”}”(hhh]”(jc)�”}”(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:79: ./mm/readahead.c”h´KWhjç,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjä,ubjc)�”}”(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:79: ./mm/readahead.c”h´K[hj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjä,ubjc)�”}”(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 ”…”�”}”(hjG-h²hh³Nh´NubjS)�”}”(hŒ``async_size``”h]”hŒ async_size”…”�”}”(hjO-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjG-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 ”…”�”}”(hjG-h²hh³Nh´NubjS)�”}”(hŒ``async_size``”h]”hŒ async_size”…”�”}”(hja-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjG-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.”…”�”}”(hjG-h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:79: ./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”…”�”}”(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:82: ./mm/readahead.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Œpage_cache_ra_unbounded”h]”j)�”}”(hŒpage_cache_ra_unbounded”h]”hŒpage_cache_ra_unbounded”…”�”}”(hj´-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj°-ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj�-h²hh³j¡-h´KÐubj8)�”}”(hŒY(struct readahead_control *ractl, unsigned long nr_to_read, unsigned long lookahead_size)”h]”(j>)�”}”(hŒstruct readahead_control *ractl”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÐ-h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÌ-ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝ-h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÌ-ubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jð-Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj¶-sbŒc.page_cache_ra_unbounded”†”asbuh1hhjÌ-ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÌ-ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÌ-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È-ubj>)�”}”(hŒunsigned long nr_to_read”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Œ nr_to_read”h]”hŒ nr_to_read”…”�”}”(hjz.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÈ-ubj>)�”}”(hŒunsigned long lookahead_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Œlookahead_size”h]”hŒlookahead_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&]”jjuh1j7hj�-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Œ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:82: ./mm/readahead.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 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:82: ./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)�”}”(hj6/h]”hŒstruct readahead_control *ractl”…”�”}”(hj8/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj4/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/readahead.c”h´KÑhj0/ubjÉ)�”}”(hhh]”jM)�”}”(hŒReadahead control.”h]”hŒReadahead control.”…”�”}”(hjO/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jK/h´KÑhjL/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj0/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jK/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)�”}”(hjo/h]”hŒunsigned long nr_to_read”…”�”}”(hjq/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjm/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/readahead.c”h´KÒhji/ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe number of pages to read.”h]”hŒThe number of pages to read.”…”�”}”(hjˆ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j„/h´KÒhj…/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhji/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j„/h´KÒhj-/ubj©)�”}”(hŒD``unsigned long lookahead_size`` Where to start the next readahead. ”h]”(j¯)�”}”(hŒ ``unsigned long lookahead_size``”h]”jS)�”}”(hj¨/h]”hŒunsigned long lookahead_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:82: ./mm/readahead.c”h´KÓhj¢/ubjÉ)�”}”(hhh]”jM)�”}”(hŒ"Where to start the next readahead.”h]”hŒ"Where to start the next readahead.”…”�”}”(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Ž)�”}”(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:82: ./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:82: ./mm/readahead.c”h´KÔhj/ubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hj 0h]”hŒContext”…”�”}”(hj 0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./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 0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./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”…”�”}”(hjO0h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjK0h²hh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/readahead.c”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^0h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjK0h²hh³j]0h´Mubhÿ)�”}”(hŒreadahead_expand”h]”j)�”}”(hŒreadahead_expand”h]”hŒreadahead_expand”…”�”}”(hjp0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjl0ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjK0h²hh³j]0h´Mubj8)�”}”(hŒC(struct readahead_control *ractl, loff_t new_start, size_t new_len)”h]”(j>)�”}”(hŒstruct readahead_control *ractl”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjŒ0h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjˆ0ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™0h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjˆ0ubh)�”}”(hhh]”j)�”}”(hŒreadahead_control”h]”hŒreadahead_control”…”�”}”(hjª0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj§0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j¬0Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjr0sbŒc.readahead_expand”†”asbuh1hhjˆ0ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊ0h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjˆ0ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjØ0h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjˆ0ubj)�”}”(hŒractl”h]”hŒractl”…”�”}”(hjå0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjˆ0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj„0ubj>)�”}”(hŒloff_t new_start”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjþ0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j1Œmodname”NŒ classname”Njìjï)�”}”jò]”jÆ0Œc.readahead_expand”†”asbuh1hhjú0ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjú0ubj)�”}”(hŒ new_start”h]”hŒ new_start”…”�”}”(hj-1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjú0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj„0ubj>)�”}”(hŒsize_t new_len”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjI1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjF1ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jK1Œmodname”NŒ classname”Njìjï)�”}”jò]”jÆ0Œc.readahead_expand”†”asbuh1hhjB1ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjg1h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjB1ubj)�”}”(hŒnew_len”h]”hŒnew_len”…”�”}”(hju1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjB1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj„0ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjK0h²hh³j]0h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjG0h²hh³j]0h´Mubah}”(h]”jB0ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j]0h´MhjD0h²hubj4)�”}”(hhh]”jM)�”}”(hŒExpand a readahead request”h]”hŒExpand a readahead request”…”�”}”(hjŸ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/readahead.c”h´Mhjœ1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjD0h²hh³j]0h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj·1jHj·1jI‰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Ž)�”}”(hjÁ1h]”hŒ Parameters”…”�”}”(hjÃ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¿1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/readahead.c”h´Mhj»1ubj¤)�”}”(hhh]”(j©)�”}”(hŒ?``struct readahead_control *ractl`` The request to be expanded ”h]”(j¯)�”}”(hŒ#``struct readahead_control *ractl``”h]”jS)�”}”(hjà1h]”hŒstruct readahead_control *ractl”…”�”}”(hjâ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÞ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/readahead.c”h´MhjÚ1ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe request to be expanded”h]”hŒThe request to be expanded”…”�”}”(hjù1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jõ1h´Mhjö1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÚ1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jõ1h´Mhj×1ubj©)�”}”(hŒ'``loff_t new_start`` The revised start ”h]”(j¯)�”}”(hŒ``loff_t new_start``”h]”jS)�”}”(hj2h]”hŒloff_t new_start”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/readahead.c”h´Mhj2ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe revised start”h]”hŒThe revised start”…”�”}”(hj22h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j.2h´Mhj/2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j.2h´Mhj×1ubj©)�”}”(hŒ3``size_t new_len`` The revised size of the request ”h]”(j¯)�”}”(hŒ``size_t new_len``”h]”jS)�”}”(hjR2h]”hŒsize_t new_len”…”�”}”(hjT2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjP2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/readahead.c”h´MhjL2ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe revised size of the request”h]”hŒThe revised size of the request”…”�”}”(hjk2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jg2h´Mhjh2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjL2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jg2h´Mhj×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³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/readahead.c”h´Mhj»1ubjM)�”}”(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.”…”�”}”(hj£2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/readahead.c”h´Mhj»1ubjM)�”}”(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.”…”�”}”(hj²2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/readahead.c”h´M hj»1ubjM)�”}”(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 ”…”�”}”(hjÁ2h²hh³Nh´NubjŽ)�”}”(hŒ **ractl**”h]”hŒractl”…”�”}”(hjÉ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÁ2ubhŒ5 object for a different expansion than was requested.”…”�”}”(hjÁ2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:82: ./mm/readahead.c”h´Mhj»1ubeh}”(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´KMubh¶)�”}”(hhh]”(h»)�”}”(hŒ Writeback”h]”hŒ Writeback”…”�”}”(hjô2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjñ2h²hh³hÊh´KVubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ#wb_domain_size_changed (C function)”Œc.wb_domain_size_changed”hNt”auh1hÜhjñ2h²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”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj3h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:88: ./include/linux/writeback.h”h´Kžubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*3h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj3h²hh³j)3h´Kžubhÿ)�”}”(hŒwb_domain_size_changed”h]”j)�”}”(hŒwb_domain_size_changed”h]”hŒwb_domain_size_changed”…”�”}”(hj<3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj83ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj3h²hh³j)3h´Kžubj8)�”}”(hŒ(struct wb_domain *dom)”h]”j>)�”}”(hŒstruct wb_domain *dom”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjX3h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjT3ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hje3h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjT3ubh)�”}”(hhh]”j)�”}”(hŒ wb_domain”h]”hŒ wb_domain”…”�”}”(hjv3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjs3ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jx3Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj>3sbŒc.wb_domain_size_changed”†”asbuh1hhjT3ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–3h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjT3ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¤3h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjT3ubj)�”}”(hŒdom”h]”hŒdom”…”�”}”(hj±3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjT3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjP3ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj3h²hh³j)3h´Kžubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj3h²hh³j)3h´Kžubah}”(h]”j3ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j)3h´Kžhj3h²hubj4)�”}”(hhh]”jM)�”}”(hŒ+memory available to a wb_domain has changed”h]”hŒ+memory available to a wb_domain has changed”…”�”}”(hjÛ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:88: ./include/linux/writeback.h”h´KžhjØ3h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj3h²hh³j)3h´Kžubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjó3jHjó3jI‰jJ‰jK‰uh1híh²hhjñ2h³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ý3h]”hŒ Parameters”…”�”}”(hjÿ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjû3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:88: ./include/linux/writeback.h”h´K¢hj÷3ubj¤)�”}”(hhh]”j©)�”}”(hŒ0``struct wb_domain *dom`` wb_domain of interest ”h]”(j¯)�”}”(hŒ``struct wb_domain *dom``”h]”jS)�”}”(hj4h]”hŒstruct wb_domain *dom”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:88: ./include/linux/writeback.h”h´KŸhj4ubjÉ)�”}”(hhh]”jM)�”}”(hŒwb_domain of interest”h]”hŒwb_domain of interest”…”�”}”(hj54h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j14h´KŸhj24ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j14h´KŸhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj÷3ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjW4h]”hŒ Description”…”�”}”(hjY4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjU4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:88: ./include/linux/writeback.h”h´K¡hj÷3ubjM)�”}”(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 ”…”�”}”(hjm4h²hh³Nh´NubjŽ)�”}”(hŒ**dom**”h]”hŒdom”…”�”}”(hju4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjm4ubhŒ has changed. It resets ”…”�”}”(hjm4h²hh³Nh´NubjŽ)�”}”(hŒ**dom**”h]”hŒdom”…”�”}”(hj‡4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjm4ubhXU’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.”…”�”}”(hjm4h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:88: ./include/linux/writeback.h”h´K hj÷3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjñ2h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒinode_attach_wb (C function)”Œc.inode_attach_wb”hNt”auh1hÜhjñ2h²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”…”�”}”(hjÀ4h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj¼4h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:88: ./include/linux/writeback.h”h´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Œinode_attach_wb”h]”j)�”}”(hŒinode_attach_wb”h]”hŒinode_attach_wb”…”�”}”(hjá4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÝ4ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¼4h²hh³jÎ4h´KÖubj8)�”}”(hŒ*(struct inode *inode, struct folio *folio)”h]”(j>)�”}”(hŒstruct inode *inode”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjý4h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjù4ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 5h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjù4ubh)�”}”(hhh]”j)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j5Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjã4sbŒc.inode_attach_wb”†”asbuh1hhjù4ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;5h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjù4ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjI5h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjù4ubj)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjV5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjù4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjõ4ubj>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjo5h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjk5ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|5h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjk5ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj�5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŠ5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j�5Œmodname”NŒ classname”Njìjï)�”}”jò]”j75Œc.inode_attach_wb”†”asbuh1hhjk5ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«5h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjk5ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¹5h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjk5ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÆ5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjk5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjõ4ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj¼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Œassociate an inode with its wb”h]”hŒassociate an inode with its wb”…”�”}”(hjð5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:88: ./include/linux/writeback.h”h´KÖhjí5h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjµ4h²hh³jÎ4h´KÖubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj6jHj6jI‰jJ‰jK‰uh1híh²hhjñ2h³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Ž)�”}”(hj6h]”hŒ Parameters”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:88: ./include/linux/writeback.h”h´KÚhj 6ubj¤)�”}”(hhh]”(j©)�”}”(hŒ*``struct inode *inode`` inode of interest ”h]”(j¯)�”}”(hŒ``struct inode *inode``”h]”jS)�”}”(hj16h]”hŒstruct inode *inode”…”�”}”(hj36h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj/6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:88: ./include/linux/writeback.h”h´K×hj+6ubjÉ)�”}”(hhh]”jM)�”}”(hŒinode of interest”h]”hŒinode of interest”…”�”}”(hjJ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jF6h´K×hjG6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj+6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jF6h´K×hj(6ubj©)�”}”(hŒ:``struct folio *folio`` folio being dirtied (may be NULL) ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjj6h]”hŒstruct folio *folio”…”�”}”(hjl6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjh6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:88: ./include/linux/writeback.h”h´KØhjd6ubjÉ)�”}”(hhh]”jM)�”}”(hŒ!folio being dirtied (may be NULL)”h]”hŒ!folio being dirtied (may be NULL)”…”�”}”(hjƒ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j6h´KØhj€6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjd6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j6h´KØhj(6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj 6ubjM)�”}”(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³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:88: ./include/linux/writeback.h”h´KÚhj 6ubjM)�”}”(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 ”…”�”}”(hj»6h²hh³Nh´NubjŽ)�”}”(hŒ **inode**”h]”hŒinode”…”�”}”(hjÃ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj»6ubhŒG doesn’t have its wb, associate it with the wb matching the memcg of ”…”�”}”(hj»6h²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjÕ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj»6ubhŒ or, if ”…”�”}”(hj»6h²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjç6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj»6ubhŒ is NULL, ”…”�”}”(hj»6h²hh³Nh´NubjS)�”}”(hŒ ``current``”h]”hŒcurrent”…”�”}”(hjù6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj»6ubhŒ. May be called w/ or w/o ”…”�”}”(hj»6h²hh³Nh´NubjŽ)�”}”(hŒ**inode->i_lock**”h]”hŒ inode->i_lock”…”�”}”(hj 7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj»6ubhŒ.”…”�”}”(hj»6h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:88: ./include/linux/writeback.h”h´KÙhj 6ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjñ2h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒinode_detach_wb (C function)”Œc.inode_detach_wb”hNt”auh1hÜhjñ2h²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”…”�”}”(hjD7h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj@7h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:88: ./include/linux/writeback.h”h´Kåubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjS7h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj@7h²hh³jR7h´Kåubhÿ)�”}”(hŒinode_detach_wb”h]”j)�”}”(hŒinode_detach_wb”h]”hŒinode_detach_wb”…”�”}”(hje7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhja7ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj@7h²hh³jR7h´Kåubj8)�”}”(hŒ(struct inode *inode)”h]”j>)�”}”(hŒstruct inode *inode”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj�7h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj}7ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽ7h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj}7ubh)�”}”(hhh]”j)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjŸ7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjœ7ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j¡7Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjg7sbŒc.inode_detach_wb”†”asbuh1hhj}7ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿7h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj}7ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÍ7h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj}7ubj)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjÚ7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj}7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjy7ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj@7h²hh³jR7h´Kåubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj<7h²hh³jR7h´Kåubah}”(h]”j77ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jR7h´Kåhj97h²hubj4)�”}”(hhh]”jM)�”}”(hŒ!disassociate an inode from its wb”h]”hŒ!disassociate an inode from its wb”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:88: ./include/linux/writeback.h”h´Kåhj8h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj97h²hh³jR7h´Kåubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj8jHj8jI‰jJ‰jK‰uh1híh²hhjñ2h³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&8h]”hŒ Parameters”…”�”}”(hj(8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj$8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:88: ./include/linux/writeback.h”h´Kéhj 8ubj¤)�”}”(hhh]”j©)�”}”(hŒ*``struct inode *inode`` inode of interest ”h]”(j¯)�”}”(hŒ``struct inode *inode``”h]”jS)�”}”(hjE8h]”hŒstruct inode *inode”…”�”}”(hjG8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjC8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:88: ./include/linux/writeback.h”h´Kæhj?8ubjÉ)�”}”(hhh]”jM)�”}”(hŒinode of interest”h]”hŒinode of interest”…”�”}”(hj^8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jZ8h´Kæhj[8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj?8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jZ8h´Kæhj<8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj 8ubjM)�”}”(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³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:88: ./include/linux/writeback.h”h´Kèhj 8ubjM)�”}”(hŒ.**inode** is being freed. Detach from its wb.”h]”(jŽ)�”}”(hŒ **inode**”h]”hŒinode”…”�”}”(hjš8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj–8ubhŒ% is being freed. Detach from its wb.”…”�”}”(hj–8h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:88: ./include/linux/writeback.h”h´Kçhj 8ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjñ2h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒwbc_init_bio (C function)”Œc.wbc_init_bio”hNt”auh1hÜhjñ2h²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Ó8h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÏ8h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:88: ./include/linux/writeback.h”h´K÷ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâ8h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÏ8h²hh³já8h´K÷ubhÿ)�”}”(hŒ wbc_init_bio”h]”j)�”}”(hŒ wbc_init_bio”h]”hŒ wbc_init_bio”…”�”}”(hjô8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjð8ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÏ8h²hh³já8h´K÷ubj8)�”}”(hŒ0(struct writeback_control *wbc, struct bio *bio)”h]”(j>)�”}”(hŒstruct writeback_control *wbc”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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 9ubh)�”}”(hhh]”j)�”}”(hŒwriteback_control”h]”hŒwriteback_control”…”�”}”(hj.9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj+9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j09Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjö8sbŒc.wbc_init_bio”†”asbuh1hhj 9ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjN9h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj 9ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj\9h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj 9ubj)�”}”(hŒwbc”h]”hŒwbc”…”�”}”(hji9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj 9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj9ubj>)�”}”(hŒstruct bio *bio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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~9ubh)�”}”(hhh]”j)�”}”(hŒbio”h]”hŒbio”…”�”}”(hj 9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j¢9Œmodname”NŒ classname”Njìjï)�”}”jò]”jJ9Œc.wbc_init_bio”†”asbuh1hhj~9ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾9h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj~9ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÌ9h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj~9ubj)�”}”(hŒbio”h]”hŒbio”…”�”}”(hjÙ9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj~9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj9ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÏ8h²hh³já8h´K÷ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjË8h²hh³já8h´K÷ubah}”(h]”jÆ8ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³já8h´K÷hjÈ8h²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:88: ./include/linux/writeback.h”h´K÷hj:h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÈ8h²hh³já8h´K÷ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj:jHj:jI‰jJ‰jK‰uh1híh²hhjñ2h³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:88: ./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)�”}”(hjD:h]”hŒstruct writeback_control *wbc”…”�”}”(hjF:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjB:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:88: ./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³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Œ*``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:88: ./include/linux/writeback.h”h´Kùhjw:ubjÉ)�”}”(hhh]”jM)�”}”(hŒbio to be initialized”h]”hŒbio to be initialized”…”�”}”(hj–:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j’:h´Kùhj“:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjw: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³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:88: ./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:88: ./include/linux/writeback.h”h´Kúhj:ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjñ2h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”•c]”(héŒ2balance_dirty_pages_ratelimited_flags (C function)”Œ'c.balance_dirty_pages_ratelimited_flags”hNt”auh1hÜhjñ2h²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:89: ./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Þubj8)�”}”(hŒ3(struct address_space *mapping, unsigned int flags)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjZ;h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjV;ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjg;h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjV;ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjx;h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhju;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jz;Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj@;sbŒ'c.balance_dirty_pages_ratelimited_flags”†”asbuh1hhjV;ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜;h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjV;ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¦;h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjV;ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj³;h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjV;ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjR;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=hjR;ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj;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:89: ./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&]”jFjAjGjF<jHjF<jI‰jJ‰jK‰uh1híh²hhjñ2h³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Ž)�”}”(hjP<h]”hŒ Parameters”…”�”}”(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:89: ./mm/page-writeback.c”h´MâhjJ<ubj¤)�”}”(hhh]”(j©)�”}”(hŒC``struct address_space *mapping`` address_space which was dirtied. ”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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´Mßhji<ubjÉ)�”}”(hhh]”jM)�”}”(hŒ address_space which was dirtied.”h]”hŒ address_space which was dirtied.”…”�”}”(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Œ"``unsigned int flags`` BDP 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&]”uh1jRhj¦<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´Màhj¢<ubjÉ)�”}”(hhh]”jM)�”}”(hŒ BDP flags.”h]”hŒ BDP 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àhjf<ubeh}”(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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´MâhjJ<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:89: ./mm/page-writeback.c”h´MáhjJ<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:89: ./mm/page-writeback.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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´MçhjJ<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”…”�”}”(hj7=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:89: ./mm/page-writeback.c”h´MèhjJ<ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjñ2h²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ñ2h²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”…”�”}”(hjp=h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjl=h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.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ÿ)�”}”(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þhjl=h²hh³j~=h´M)ubj8)�”}”(hŒ(struct address_space *mapping)”h]”j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj­=h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj©=ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjº=h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj©=ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jÍ=Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj“=sbŒ!c.balance_dirty_pages_ratelimited”†”asbuh1hhj©=ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjë=h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj©=ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjù=h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj©=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&]”jjuh1j7hjl=h²hh³j~=h´M)ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjh=h²hh³j~=h´M)ubah}”(h]”jc=ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j~=h´M)hje=h²hubj4)�”}”(hhh]”jM)�”}”(hŒbalance dirty memory state.”h]”hŒbalance dirty memory state.”…”�”}”(hj0>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M)hj->h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hje=h²hh³j~=h´M)ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjH>jHjH>jI‰jJ‰jK‰uh1híh²hhjñ2h³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Ž)�”}”(hjR>h]”hŒ Parameters”…”�”}”(hjT>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjP>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M-hjL>ubj¤)�”}”(hhh]”j©)�”}”(hŒC``struct address_space *mapping`` address_space which was dirtied. ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjq>h]”hŒstruct address_space *mapping”…”�”}”(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:89: ./mm/page-writeback.c”h´M*hjk>ubjÉ)�”}”(hhh]”jM)�”}”(hŒ address_space which was dirtied.”h]”hŒ address_space which was dirtied.”…”�”}”(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*hjh>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjL>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:89: ./mm/page-writeback.c”h´M,hjL>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:89: ./mm/page-writeback.c”h´M+hjL>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:89: ./mm/page-writeback.c”h´M/hjL>ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjñ2h²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ñ2h²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:89: ./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 ubj8)�”}”(hŒ;(struct address_space *mapping, pgoff_t start, pgoff_t end)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj=?h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj9?ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJ?h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj9?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”jèŒ reftarget”j]?Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj#?sbŒc.tag_pages_for_writeback”†”asbuh1hhj9?ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{?h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj9?ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj‰?h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj9?ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj–?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj9?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj5?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”jèŒ reftarget”j´?Œmodname”NŒ classname”Njìjï)�”}”jò]”jw?Œ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Œstart”h]”hŒstart”…”�”}”(hjÞ?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj«?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj5?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”jèŒ reftarget”jü?Œmodname”NŒ classname”Njìjï)�”}”jò]”jw?Œ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=hj5?ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjü>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”…”�”}”(hjP@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M hjM@h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjõ>h²hh³j?h´M ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjh@jHjh@jI‰jJ‰jK‰uh1híh²hhjñ2h³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Ž)�”}”(hjr@h]”hŒ Parameters”…”�”}”(hjt@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjp@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M hjl@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:89: ./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Œ&``pgoff_t start`` 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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M hjÄ@ubjÉ)�”}”(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ÈhjÄ@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jß@h´M hjˆ@ubj©)�”}”(hŒ.``pgoff_t end`` ending page index (inclusive) ”h]”(j¯)�”}”(hŒ``pgoff_t end``”h]”jS)�”}”(hjAh]”hŒ pgoff_t end”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M hjý@ubjÉ)�”}”(hhh]”jM)�”}”(hŒending page index (inclusive)”h]”hŒending page index (inclusive)”…”�”}”(hjAh²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ˆ@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjl@ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj>Ah]”hŒ Description”…”�”}”(hj@Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj!Bh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjBubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.Bh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjBubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj?Bh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj)�”}”(hŒstruct writeback_control *wbc”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj‘Bh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj�Bubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžBh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�Bubh)�”}”(hhh]”j)�”}”(hŒwriteback_control”h]”hŒwriteback_control”…”�”}”(hj¯Bh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¬Bubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j±BŒmodname”NŒ classname”Njìjï)�”}”jò]”jâAŒc.writeback_iter”†”asbuh1hhj�Bubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍBh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�Bubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÛBh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj�Bubj)�”}”(hŒwbc”h]”hŒwbc”…”�”}”(hjèBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�Bubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjBubj>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjýBubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjýBubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjCubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j!CŒmodname”NŒ classname”Njìjï)�”}”jò]”jâAŒc.writeback_iter”†”asbuh1hhjýBubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=Ch²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjýBubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjKCh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjýBubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjXCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjýBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjBubj>)�”}”(hŒ int *error”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjqCh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjmCubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjmCubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj�Ch²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjmCubj)�”}”(hŒerror”h]”hŒerror”…”�”}”(hjšCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjmCubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjBubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj£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Œ(iterate folio of a mapping for writeback”h]”hŒ(iterate folio of a mapping for writeback”…”�”}”(hjÄCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´Mƒ hjÁCh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjœAh²hh³j´Ah´Mƒ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÜCjHjÜCjI‰jJ‰jK‰uh1híh²hhjñ2h³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æCh]”hŒ Parameters”…”�”}”(hjèCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjäCubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M‡ hjàCubj¤)�”}”(hhh]”(j©)�”}”(hŒC``struct address_space *mapping`` address space structure to write ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjDh]”hŒstruct address_space *mapping”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjDubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M„ hjÿCubjÉ)�”}”(hhh]”jM)�”}”(hŒ address space structure to write”h]”hŒ address space structure to write”…”�”}”(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üCubj©)�”}”(hŒ4``struct writeback_control *wbc`` writeback context ”h]”(j¯)�”}”(hŒ!``struct writeback_control *wbc``”h]”jS)�”}”(hj>Dh]”hŒstruct writeback_control *wbc”…”�”}”(hj@Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjwritepages implementation.”h]”(hŒNThis function returns the next folio for the writeback operation described by ”…”�”}”(hjEh²hh³Nh´NubjŽ)�”}”(hŒ**wbc**”h]”hŒwbc”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjEubhŒ on ”…”�”}”(hjEh²hh³Nh´NubjŽ)�”}”(hŒ **mapping**”h]”hŒmapping”…”�”}”(hj-Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjEubhŒJ and should be called in a while loop in the ->writepages implementation.”…”�”}”(hjEh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´Mˆ hjàCubjM)�”}”(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, ”…”�”}”(hjFEh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjNEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjFEubhŒ is passed in the ”…”�”}”(hjFEh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj`Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjFEubhŒe argument, and for every subsequent iteration the folio returned previously should be passed back in.”…”�”}”(hjFEh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´MŒ hjàCubjM)�”}”(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, ”…”�”}”(hjyEh²hh³Nh´NubjŽ)�”}”(hŒ **error**”h]”hŒerror”…”�”}”(hj�Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjyEubhŒ" should be set to the error value.”…”�”}”(hjyEh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M� hjàCubjM)�”}”(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 ”…”�”}”(hjšEh²hh³Nh´NubjŽ)�”}”(hŒ**wbc**”h]”hŒwbc”…”�”}”(hj¢Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjšEubhŒ) has finished, this function will return ”…”�”}”(hjšEh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj´Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjšEubhŒ: and if there was an error in any iteration restore it to ”…”�”}”(hjšEh²hh³Nh´NubjŽ)�”}”(hŒ **error**”h]”hŒerror”…”�”}”(hjÆEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjšEubhŒ.”…”�”}”(hjšEh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M“ hjàCubjM)�”}”(hŒ**Note**”h]”jŽ)�”}”(hjáEh]”hŒNote”…”�”}”(hjãEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjßEubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M– hjàCubjM)�”}”(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÷Eh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjÿEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj÷EubhŒ.”…”�”}”(hj÷Eh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M— hjàCubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjFh]”hŒReturn”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjFubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´Mš hjàCubjM)�”}”(hŒ3the folio to write or ``NULL`` if the loop is done.”h]”(hŒthe folio to write or ”…”�”}”(hj0Fh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj8Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj0FubhŒ if the loop is done.”…”�”}”(hj0Fh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´Mš hjàCubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjñ2h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ filemap_dirty_folio (C function)”Œc.filemap_dirty_folio”hNt”auh1hÜhjñ2h²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”…”�”}”(hjqFh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjmFh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M} ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjmFh²hh³j~Fh´M} ubhÿ)�”}”(hŒfilemap_dirty_folio”h]”j)�”}”(hŒfilemap_dirty_folio”h]”hŒfilemap_dirty_folio”…”�”}”(hj‘Fh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�Fubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjmFh²hh³j~Fh´M} ubj8)�”}”(hŒ4(struct address_space *mapping, struct folio *folio)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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©Fubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjËFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÈFubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÍFŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj“FsbŒc.filemap_dirty_folio”†”asbuh1hhj©Fubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëFh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj©Fubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjùFh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj©Fubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj©Fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¥Fubj>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjGh²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òhjGubh)�”}”(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”jèŒ reftarget”j?GŒmodname”NŒ classname”Njìjï)�”}”jò]”jçFŒc.filemap_dirty_folio”†”asbuh1hhjGubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[Gh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjGubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjiGh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjGubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjvGh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjGubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¥Fubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjmFh²hh³j~Fh´M} ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjiFh²hh³j~Fh´M} ubah}”(h]”jdFah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j~Fh´M} hjfFh²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.”…”�”}”(hj Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M} hj�Gh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjfFh²hh³j~Fh´M} ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¸GjHj¸GjI‰jJ‰jK‰uh1híh²hhjñ2h³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Ž)�”}”(hjÂGh]”hŒ Parameters”…”�”}”(hjÄGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÀGubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M� hj¼Gubj¤)�”}”(hhh]”(j©)�”}”(hŒG``struct address_space *mapping`` Address space this folio belongs to. ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjáGh]”hŒstruct address_space *mapping”…”�”}”(hjãGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjßGubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M~ hjÛGubjÉ)�”}”(hhh]”jM)�”}”(hŒ$Address space this folio belongs to.”h]”hŒ$Address space this folio belongs to.”…”�”}”(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Œ5``struct folio *folio`` Folio to be marked as dirty. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjHh]”hŒstruct folio *folio”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjHubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M hjHubjÉ)�”}”(hhh]”jM)�”}”(hŒFolio to be marked as dirty.”h]”hŒFolio to be marked as dirty.”…”�”}”(hj3Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j/Hh´M hj0Hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjHubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j/Hh´M hjØGubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¼GubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjUHh]”hŒ Description”…”�”}”(hjWHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjSHubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M� hj¼GubjM)�”}”(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.”…”�”}”(hjkHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M€ hj¼GubjM)�”}”(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.”…”�”}”(hjzHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M… hj¼GubjM)�”}”(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.”…”�”}”(hj‰Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´MŠ hj¼Gubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjñ2h²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ñ2h²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”…”�”}”(hj¸Hh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj´Hh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.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Œfolio_redirty_for_writepage”h]”j)�”}”(hŒfolio_redirty_for_writepage”h]”hŒfolio_redirty_for_writepage”…”�”}”(hjØHh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÔHubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj´Hh²hh³jÅHh´MŸ ubj8)�”}”(hŒ4(struct writeback_control *wbc, struct folio *folio)”h]”(j>)�”}”(hŒstruct writeback_control *wbc”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjôHh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjðHubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjðHubh)�”}”(hhh]”j)�”}”(hŒwriteback_control”h]”hŒwriteback_control”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjIubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jIŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÚHsbŒc.folio_redirty_for_writepage”†”asbuh1hhjðHubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2Ih²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjðHubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj@Ih²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjðHubj)�”}”(hŒwbc”h]”hŒwbc”…”�”}”(hjMIh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjðHubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjìHubj>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjfIh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjbIubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsIh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjbIubh)�”}”(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”jèŒ reftarget”j†IŒmodname”NŒ classname”Njìjï)�”}”jò]”j.IŒc.folio_redirty_for_writepage”†”asbuh1hhjbIubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢Ih²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjbIubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj°Ih²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjbIubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj½Ih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjbIubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjìHubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj´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ŒDecline to write a dirty folio.”h]”hŒDecline to write a dirty folio.”…”�”}”(hjçIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.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ñ2h³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 Jh]”hŒ Parameters”…”�”}”(hj Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjJubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M£ hjJubj¤)�”}”(hhh]”(j©)�”}”(hŒ9``struct writeback_control *wbc`` The writeback control. ”h]”(j¯)�”}”(hŒ!``struct writeback_control *wbc``”h]”jS)�”}”(hj(Jh]”hŒstruct writeback_control *wbc”…”�”}”(hj*Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj&Jubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M  hj"JubjÉ)�”}”(hhh]”jM)�”}”(hŒThe writeback control.”h]”hŒThe writeback control.”…”�”}”(hjAJh²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Œ#``struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjaJh]”hŒstruct folio *folio”…”�”}”(hjcJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj_Jubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M¡ hj[JubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hjzJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jvJh´M¡ hjwJubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj[Jubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jvJh´M¡ hjJubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjJubjM)�”}”(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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M£ hjJubjM)�”}”(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 ”…”�”}”(hj²Jh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjºJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj²JubhŒ7 for some reason, it should call this function, unlock ”…”�”}”(hj²Jh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjÌJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj²JubhŒ and return 0.”…”�”}”(hj²Jh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M¢ hjJubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjçJh]”hŒReturn”…”�”}”(hjéJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjåJubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M¦ hjJubjM)�”}”(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ýJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M§ hjJubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjñ2h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_mark_dirty (C function)”Œc.folio_mark_dirty”hNt”auh1hÜhjñ2h²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,Kh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj(Kh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´Mà ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:Kh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj(Kh²hh³j9Kh´Mà ubhÿ)�”}”(hŒfolio_mark_dirty”h]”j)�”}”(hŒfolio_mark_dirty”h]”hŒfolio_mark_dirty”…”�”}”(hjLKh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjHKubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj(Kh²hh³j9Kh´Mà ubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjhKh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjdKubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuKh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjdKubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj†Kh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjƒKubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jˆKŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjNKsbŒc.folio_mark_dirty”†”asbuh1hhjdKubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦Kh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjdKubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj´Kh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjdKubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÁKh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjdKubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj`Kubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj(Kh²hh³j9Kh´Mà ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj$Kh²hh³j9Kh´Mà ubah}”(h]”jKah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j9Kh´Mà hj!Kh²hubj4)�”}”(hhh]”jM)�”}”(hŒMark a folio as being modified.”h]”hŒMark a folio as being modified.”…”�”}”(hjëKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´Mà hjèKh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj!Kh²hh³j9Kh´Mà ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjLjHjLjI‰jJ‰jK‰uh1híh²hhjñ2h³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 Lh]”hŒ Parameters”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj Lubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´MÇ hjLubj¤)�”}”(hhh]”j©)�”}”(hŒ#``struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj,Lh]”hŒstruct folio *folio”…”�”}”(hj.Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj*Lubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´MÄ hj&LubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hjELh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jALh´MÄ hjBLubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj&Lubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jALh´MÄ hj#Lubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjLubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjgLh]”hŒ Description”…”�”}”(hjiLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjeLubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´MÆ hjLubjM)�”}”(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}Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´MÅ hjLubhŒ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.”…”�”}”(hj’Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´MÍ hjŽLubah}”(h]”h ]”h"]”h$]”h&]”uh1jŒLhjLubjM)�”}”(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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´MÑ hjLubjM)�”}”(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.”…”�”}”(hj¿Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´MÒ hjLubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjñ2h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!folio_wait_writeback (C function)”Œc.folio_wait_writeback”hNt”auh1hÜhjñ2h²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îLh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjêLh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.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ÿ)�”}”(hŒfolio_wait_writeback”h]”j)�”}”(hŒfolio_wait_writeback”h]”hŒfolio_wait_writeback”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Mubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjêLh²hh³jüLh´Mç ubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj+Mh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj'Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8Mh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj'Mubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjIMh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjFMubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jKMŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjMsbŒc.folio_wait_writeback”†”asbuh1hhj'Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjiMh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj'Mubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjwMh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj'Mubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj„Mh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj'Mubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj#Mubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjê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Œ%Wait for a folio to finish writeback.”h]”hŒ%Wait for a folio to finish writeback.”…”�”}”(hj®Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´Mç hj«Mh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjãLh²hh³jüLh´Mç ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÆMjHjÆMjI‰jJ‰jK‰uh1híh²hhjñ2h³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Ž)�”}”(hjÐMh]”hŒ Parameters”…”�”}”(hjÒMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÎMubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´Më hjÊMubj¤)�”}”(hhh]”j©)�”}”(hŒ/``struct folio *folio`` The folio to wait for. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjïMh]”hŒstruct folio *folio”…”�”}”(hjñMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjíMubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´Mè hjéMubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to wait for.”h]”hŒThe folio to wait for.”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jNh´Mè hjNubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjéMubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jNh´Mè hjæMubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÊMubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj*Nh]”hŒ Description”…”�”}”(hj,Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj(Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´Mê hjÊMubjM)�”}”(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@Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´Mé hjÊMubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjQNh]”hŒContext”…”�”}”(hjSNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjONubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´Mì hjÊMubjM)�”}”(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.”…”�”•0}”(hjgNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´Mí hjÊMubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjñ2h²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ñ2h²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”…”�”}”(hj–Nh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj’Nh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´Mü ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥Nh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj’Nh²hh³j¤Nh´Mü ubhÿ)�”}”(hŒfolio_wait_writeback_killable”h]”j)�”}”(hŒfolio_wait_writeback_killable”h]”hŒfolio_wait_writeback_killable”…”�”}”(hj·Nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj³Nubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj’Nh²hh³j¤Nh´Mü ubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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)�”}”(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”jèŒ reftarget”jóNŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj¹NsbŒc.folio_wait_writeback_killable”†”asbuh1hhjÏNubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÏNubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÏNubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj,Oh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÏNubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjËNubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj’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Œ%Wait for a folio to finish writeback.”h]”hŒ%Wait for a folio to finish writeback.”…”�”}”(hjVOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´Mü hjSOh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj‹Nh²hh³j¤Nh´Mü ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjnOjHjnOjI‰jJ‰jK‰uh1híh²hhjñ2h³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Ž)�”}”(hjxOh]”hŒ Parameters”…”�”}”(hjzOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjvOubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M hjrOubj¤)�”}”(hhh]”j©)�”}”(hŒ/``struct folio *folio`` The folio to wait for. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj—Oh]”hŒstruct folio *folio”…”�”}”(hj™Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj•Oubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´Mý hj‘OubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to wait for.”h]”hŒThe folio to wait for.”…”�”}”(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£hjrOubjM)�”}”(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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´Mÿ hjrOubjM)�”}”(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èOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´Mþ hjrOubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjùOh]”hŒContext”…”�”}”(hjûOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj÷Oubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M hjrOubjM)�”}”(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.”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M hjrOubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj Ph]”hŒReturn”…”�”}”(hj"Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjPubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M hjrOubjM)�”}”(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.”…”�”}”(hj6Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M hjrOubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjñ2h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_wait_stable (C function)”Œc.folio_wait_stable”hNt”auh1hÜhjñ2h²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”…”�”}”(hjePh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjaPh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtPh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjaPh²hh³jsPh´M ubhÿ)�”}”(hŒfolio_wait_stable”h]”j)�”}”(hŒfolio_wait_stable”h]”hŒfolio_wait_stable”…”�”}”(hj†Ph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‚Pubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjaPh²hh³jsPh´M ubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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žPubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÀPh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj½Pubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÂPŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjˆPsbŒc.folio_wait_stable”†”asbuh1hhjžPubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàPh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjžPubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjîPh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjžPubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjûPh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjžPubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjšPubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjaPh²hh³jsPh´M ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj]Ph²hh³jsPh´M ubah}”(h]”jXPah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jsPh´M hjZPh²hubj4)�”}”(hhh]”jM)�”}”(hŒ+wait for writeback to finish, if necessary.”h]”hŒ+wait for writeback to finish, if necessary.”…”�”}”(hj%Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M hj"Qh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjZPh²hh³jsPh´M ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj=QjHj=QjI‰jJ‰jK‰uh1híh²hhjñ2h³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Ž)�”}”(hjGQh]”hŒ Parameters”…”�”}”(hjIQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjEQubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M hjAQubj¤)�”}”(hhh]”j©)�”}”(hŒ.``struct folio *folio`` The folio to wait on. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjfQh]”hŒstruct folio *folio”…”�”}”(hjhQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjdQubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M hj`QubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to wait on.”h]”hŒThe folio to wait on.”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j{Qh´M hj|Qubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj`Qubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j{Qh´M hj]Qubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjAQubjM)�”}”(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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M hjAQubjM)�”}”(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.”…”�”}”(hj·Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M hjAQubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjÈQh]”hŒContext”…”�”}”(hjÊQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÆQubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M hjAQubjM)�”}”(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ÞQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:89: ./mm/page-writeback.c”h´M hjAQubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjñ2h²hh³Nh´Nubeh}”(h]”Œ writeback”ah ]”h"]”Œ writeback”ah$]”h&]”uh1hµhjËh²hh³hÊh´KVubh¶)�”}”(hhh]”(h»)�”}”(hŒTruncate”h]”hŒTruncate”…”�”}”(hjÿQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjüQh²hh³hÊh´K]ubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_invalidate (C function)”Œc.folio_invalidate”hNt”auh1hÜhjüQh²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&Rh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj"Rh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Kyubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5Rh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj"Rh²hh³j4Rh´Kyubhÿ)�”}”(hŒfolio_invalidate”h]”j)�”}”(hŒfolio_invalidate”h]”hŒfolio_invalidate”…”�”}”(hjGRh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjCRubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj"Rh²hh³j4Rh´Kyubj8)�”}”(hŒ3(struct folio *folio, size_t offset, size_t length)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjcRh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj_Rubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjpRh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj_Rubh)�”}”(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”jèŒ reftarget”jƒRŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjIRsbŒc.folio_invalidate”†”asbuh1hhj_Rubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡Rh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj_Rubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¯Rh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj_Rubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj¼Rh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj_Rubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj[Rubj>)�”}”(hŒ size_t offset”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjØRh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕRubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÚRŒmodname”NŒ classname”Njìjï)�”}”jò]”j�RŒc.folio_invalidate”†”asbuh1hhjÑRubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöRh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÑRubj)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÑRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj[Rubj>)�”}”(hŒ size_t length”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj Sh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjSubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j"SŒmodname”NŒ classname”Njìjï)�”}”jò]”j�RŒc.folio_invalidate”†”asbuh1hhjSubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>Sh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjSubj)�”}”(hŒlength”h]”hŒlength”…”�”}”(hjLSh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjSubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj[Rubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj"Rh²hh³j4Rh´Kyubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjRh²hh³j4Rh´Kyubah}”(h]”jRah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j4Rh´KyhjRh²hubj4)�”}”(hhh]”jM)�”}”(hŒ"Invalidate part or all of a folio.”h]”hŒ"Invalidate part or all of a folio.”…”�”}”(hjvSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´KyhjsSh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjRh²hh³j4Rh´Kyubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjŽSjHjŽSjI‰jJ‰jK‰uh1híh²hhjüQh³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Ž)�”}”(hj˜Sh]”hŒ Parameters”…”�”}”(hjšSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj–Subah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´K}hj’Subj¤)�”}”(hhh]”(j©)�”}”(hŒ5``struct folio *folio`` The folio which is affected. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj·Sh]”hŒstruct folio *folio”…”�”}”(hj¹Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjµSubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Kzhj±SubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio which is affected.”h]”hŒThe folio which is affected.”…”�”}”(hjÐSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÌSh´KzhjÍSubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj±Subeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÌSh´Kzhj®Subj©)�”}”(hŒ3``size_t offset`` start of the range to invalidate ”h]”(j¯)�”}”(hŒ``size_t offset``”h]”jS)�”}”(hjðSh]”hŒ size_t offset”…”�”}”(hjòSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjîSubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´K{hjêSubjÉ)�”}”(hhh]”jM)�”}”(hŒ start of the range to invalidate”h]”hŒ start of the range to invalidate”…”�”}”(hj Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jTh´K{hjTubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjêSubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jTh´K{hj®Subj©)�”}”(hŒ4``size_t length`` length of the range to invalidate ”h]”(j¯)�”}”(hŒ``size_t length``”h]”jS)�”}”(hj)Th]”hŒ size_t length”…”�”}”(hj+Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj'Tubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´K|hj#TubjÉ)�”}”(hhh]”jM)�”}”(hŒ!length of the range to invalidate”h]”hŒ!length of the range to invalidate”…”�”}”(hjBTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j>Th´K|hj?Tubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj#Tubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j>Th´K|hj®Subeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj’SubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjdTh]”hŒ Description”…”�”}”(hjfTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjbTubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´K~hj’SubjM)�”}”(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.”…”�”}”(hjzTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´K}hj’SubjM)�”}”(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 ”…”�”}”(hj‰Th²hh³Nh´NubjŽ)�”}”(hŒ **offset**”h]”hŒoffset”…”�”}”(hj‘Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‰TubhŒ® 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.”…”�”}”(hj‰Th²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´K€hj’Subeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²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üQh²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”…”�”}”(hjÊTh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÆTh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´M}ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙTh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÆTh²hh³jØTh´M}ubhÿ)�”}”(hŒtruncate_inode_pages_range”h]”j)�”}”(hŒtruncate_inode_pages_range”h]”hŒtruncate_inode_pages_range”…”�”}”(hjëTh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjçTubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÆTh²hh³jØTh´M}ubj8)�”}”(hŒ;(struct address_space *mapping, loff_t lstart, uoff_t lend)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjUubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjUubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj%Uh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj"Uubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j'UŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjíTsbŒc.truncate_inode_pages_range”†”asbuh1hhjUubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEUh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjUubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjSUh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjUubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj`Uh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjUubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÿTubj>)�”}”(hŒ loff_t lstart”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj|Uh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjyUubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j~UŒmodname”NŒ classname”Njìjï)�”}”jò]”jAUŒc.truncate_inode_pages_range”†”asbuh1hhjuUubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšUh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjuUubj)�”}”(hŒlstart”h]”hŒlstart”…”�”}”(hj¨Uh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjuUubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÿTubj>)�”}”(hŒ uoff_t lend”h]”(h)�”}”(hhh]”j)�”}”(hŒuoff_t”h]”hŒuoff_t”…”�”}”(hjÄUh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÁUubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÆUŒmodname”NŒ classname”Njìjï)�”}”jò]”jAUŒc.truncate_inode_pages_range”†”asbuh1hhj½Uubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâUh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj½Uubj)�”}”(hŒlend”h]”hŒlend”…”�”}”(hjðUh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj½Uubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÿTubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÆTh²hh³jØTh´M}ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÂTh²hh³jØTh´M}ubah}”(h]”j½Tah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jØTh´M}hj¿Th²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”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´M}hjVh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¿Th²hh³jØTh´M}ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj2VjHj2VjI‰jJ‰jK‰uh1híh²hhjüQh³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 folios that are between specified offsets (and zeroing out partial folios if lstart or lend + 1 is not folio aligned). For mappings with a non-zero minimum folio order, the boundaries are aligned inwards to 1 << min_order so the edge sub-folio straddling the range is kept. 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Ž)�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj:Vubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´M�hj6Vubj¤)�”}”(hhh]”(j©)�”}”(hŒ6``struct address_space *mapping`` mapping to truncate ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj[Vh]”hŒstruct address_space *mapping”…”�”}”(hj]Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjYVubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´M~hjUVubjÉ)�”}”(hhh]”jM)�”}”(hŒmapping to truncate”h]”hŒmapping to truncate”…”�”}”(hjtVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jpVh´M~hjqVubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjUVubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jpVh´M~hjRVubj©)�”}”(hŒ0``loff_t lstart`` offset from which to truncate ”h]”(j¯)�”}”(hŒ``loff_t lstart``”h]”jS)�”}”(hj”Vh]”hŒ loff_t lstart”…”�”}”(hj–Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj’Vubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´MhjŽVubjÉ)�”}”(hhh]”jM)�”}”(hŒoffset from which to truncate”h]”hŒoffset from which to truncate”…”�”}”(hj­Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j©Vh´MhjªVubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjŽVubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j©Vh´MhjRVubj©)�”}”(hŒ8``uoff_t lend`` offset to which to truncate (inclusive) ”h]”(j¯)�”}”(hŒ``uoff_t lend``”h]”jS)�”}”(hjÍVh]”hŒ uoff_t lend”…”�”}”(hjÏVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjËVubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´M€hjÇVubjÉ)�”}”(hhh]”jM)�”}”(hŒ'offset to which to truncate (inclusive)”h]”hŒ'offset to which to truncate (inclusive)”…”�”}”(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€hjRVubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj6VubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjWh]”hŒ Description”…”�”}”(hj Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjWubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´M‚hj6VubjM)�”}”(hX8Truncate the page cache, removing the folios that are between specified offsets (and zeroing out partial folios if lstart or lend + 1 is not folio aligned). For mappings with a non-zero minimum folio order, the boundaries are aligned inwards to 1 << min_order so the edge sub-folio straddling the range is kept.”h]”hX8Truncate the page cache, removing the folios that are between specified offsets (and zeroing out partial folios if lstart or lend + 1 is not folio aligned). For mappings with a non-zero minimum folio order, the boundaries are aligned inwards to 1 << min_order so the edge sub-folio straddling the range is kept.”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´M�hj6VubjM)�”}”(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-Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´M‡hj6VubjM)�”}”(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.”…”�”}”(hjinvalidate_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.”…”�”}”(hjKWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´M‘hj6Vubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!truncate_inode_pages (C function)”Œc.truncate_inode_pages”hNt”auh1hÜhjüQh²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”…”�”}”(hjzWh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjvWh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰Wh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjvWh²hh³jˆWh´Mubhÿ)�”}”(hŒtruncate_inode_pages”h]”j)�”}”(hŒtruncate_inode_pages”h]”hŒtruncate_inode_pages”…”�”}”(hj›Wh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj—Wubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjvWh²hh³jˆWh´Mubj8)�”}”(hŒ.(struct address_space *mapping, loff_t lstart)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj·Wh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj³Wubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄWh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj³Wubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjÕWh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÒWubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j×WŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj�WsbŒc.truncate_inode_pages”†”asbuh1hhj³Wubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõWh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj³Wubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj³Wubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj³Wubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¯Wubj>)�”}”(hŒ loff_t lstart”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj,Xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj)Xubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j.XŒmodname”NŒ classname”Njìjï)�”}”jò]”jñWŒc.truncate_inode_pages”†”asbuh1hhj%Xubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJXh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj%Xubj)�”}”(hŒlstart”h]”hŒlstart”…”�”}”(hjXXh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj%Xubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¯Wubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjvWh²hh³jˆWh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjrWh²hh³jˆWh´Mubah}”(h]”jmWah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jˆWh´MhjoWh²hubj4)�”}”(hhh]”jM)�”}”(hŒ'truncate *all* the pages from an offset”h]”(hŒ truncate ”…”�”}”(hj‚Xh²hh³Nh´Nubjí )�”}”(hŒ*all*”h]”hŒall”…”�”}”(hjŠXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jì hj‚XubhŒ the pages from an offset”…”�”}”(hj‚Xh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´MhjXh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjoWh²hh³jˆWh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¬XjHj¬XjI‰jJ‰jK‰uh1híh²hhjüQh³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Ž)�”}”(hj¶Xh]”hŒ Parameters”…”�”}”(hj¸Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj´Xubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Mhj°Xubj¤)�”}”(hhh]”(j©)�”}”(hŒ6``struct address_space *mapping`` mapping to truncate ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjÕXh]”hŒstruct address_space *mapping”…”�”}”(hj×Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÓXubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´MhjÏXubjÉ)�”}”(hhh]”jM)�”}”(hŒmapping to truncate”h]”hŒmapping to truncate”…”�”}”(hjîXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jêXh´MhjëXubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÏXubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jêXh´MhjÌXubj©)�”}”(hŒ0``loff_t lstart`` offset from which to truncate ”h]”(j¯)�”}”(hŒ``loff_t lstart``”h]”jS)�”}”(hjYh]”hŒ loff_t lstart”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´MhjYubjÉ)�”}”(hhh]”jM)�”}”(hŒoffset from which to truncate”h]”hŒoffset from which to truncate”…”�”}”(hj'Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j#Yh´Mhj$Yubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjYubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j#Yh´MhjÌXubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj°XubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjIYh]”hŒ Description”…”�”}”(hjKYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjGYubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Mhj°XubjM)�”}”(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_Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Mhj°XubjM)�”}”(hŒ**Note**”h]”jŽ)�”}”(hjpYh]”hŒNote”…”�”}”(hjrYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjnYubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Mhj°XubjM)�”}”(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.”…”�”}”(hj†Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Mhj°Xubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²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üQh²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”…”�”}”(hjµYh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj±Yh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄYh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj±Yh²hh³jÃYh´Mubhÿ)�”}”(hŒtruncate_inode_pages_final”h]”j)�”}”(hŒtruncate_inode_pages_final”h]”hŒtruncate_inode_pages_final”…”�”}”(hjÖYh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÒYubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj±Yh²hh³jÃYh´Mubj8)�”}”(hŒ(struct address_space *mapping)”h]”j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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îYubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Zubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jZŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjØYsbŒc.truncate_inode_pages_final”†”asbuh1hhjîYubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0Zh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjîYubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj>Zh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjîYubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjKZh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjîYubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjêYubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj±Yh²hh³jÃYh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj­Yh²hh³jÃYh´Mubah}”(h]”j¨Yah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÃYh´MhjªYh²hubj4)�”}”(hhh]”jM)�”}”(hŒ&truncate *all* pages before inode dies”h]”(hŒ truncate ”…”�”}”(hjuZh²hh³Nh´Nubjí )�”}”(hŒ*all*”h]”hŒall”…”�”}”(hj}Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jì hjuZubhŒ pages before inode dies”…”�”}”(hjuZh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´MhjrZh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjªYh²hh³jÃYh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjŸZjHjŸZjI‰jJ‰jK‰uh1híh²hhjüQh³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Ž)�”}”(hj©Zh]”hŒ Parameters”…”�”}”(hj«Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj§Zubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Mhj£Zubj¤)�”}”(hhh]”j©)�”}”(hŒ6``struct address_space *mapping`` mapping to truncate ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjÈZh]”hŒstruct address_space *mapping”…”�”}”(hjÊZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÆZubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´MhjÂZubjÉ)�”}”(hhh]”jM)�”}”(hŒmapping to truncate”h]”hŒmapping to truncate”…”�”}”(hjáZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÝZh´MhjÞZubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÂZubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÝZh´Mhj¿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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Mhj£ZubjM)�”}”(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:95: ./mm/truncate.c”h´Mhj£ZubjM)�”}”(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:95: ./mm/truncate.c”h´Mhj£Zubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%invalidate_mapping_pages (C function)”Œc.invalidate_mapping_pages”hNt”auh1hÜhjüQh²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”…”�”}”(hjW[h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjS[h²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Msubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjf[h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjS[h²hh³je[h´Msubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjt[h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjS[h²hh³je[h´Msubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚[h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjS[h²hh³je[h´Msubhÿ)�”}”(hŒinvalidate_mapping_pages”h]”j)�”}”(hŒinvalidate_mapping_pages”h]”hŒinvalidate_mapping_pages”…”�”}”(hj”[h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�[ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjS[h²hh³je[h´Msubj8)�”}”(hŒ;(struct address_space *mapping, pgoff_t start, pgoff_t end)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj°[h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¬[ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½[h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¬[ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jÐ[Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj–[sbŒc.invalidate_mapping_pages”†”asbuh1hhj¬[ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî[h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¬[ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjü[h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¬[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”…”�”}”(hj%\h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj"\ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j'\Œmodname”NŒ classname”Njìjï)�”}”jò]”jê[Œc.invalidate_mapping_pages”†”asbuh1hhj\ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjC\h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj\ubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjQ\h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj\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”…”�”}”(hjm\h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjj\ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jo\Œmodname”NŒ classname”Njìjï)�”}”jò]”jê[Œc.invalidate_mapping_pages”†”asbuh1hhjf\ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹\h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjf\ubj)�”}”(hŒend”h]”hŒend”…”�”}”(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&]”jjuh1j7hjS[h²hh³je[h´Msubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjO[h²hh³je[h´Msubah}”(h]”jJ[ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³je[h´MshjL[h²hubj4)�”}”(hhh]”jM)�”}”(hŒ1Invalidate all clean, unlocked cache of one inode”h]”hŒ1Invalidate all clean, unlocked cache of one inode”…”�”}”(hjÃ\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´MshjÀ\h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjL[h²hh³je[h´Msubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÛ\jHjÛ\jI‰jJ‰jK‰uh1híh²hhjüQh³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:95: ./mm/truncate.c”h´Mwhjß\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:95: ./mm/truncate.c”h´Mthjþ\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´Mthj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjþ\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j]h´Mthjû\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:95: ./mm/truncate.c”h´Muhj7]ubjÉ)�”}”(hhh]”jM)�”}”(hŒ%the offset 'from' which to invalidate”h]”hŒ)the offset ‘from’ which to invalidate”…”�”}”(hjV]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jR]h´MuhjS]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj7]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jR]h´Muhjû\ubj©)�”}”(hŒ@``pgoff_t end`` the offset 'to' which to invalidate (inclusive) ”h]”(j¯)�”}”(hŒ``pgoff_t end``”h]”jS)�”}”(hjv]h]”hŒ pgoff_t end”…”�”}”(hjx]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjt]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Mvhjp]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´MvhjŒ]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjp]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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Mxhjß\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.”…”�”}”(hjÇ]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Mwhjß\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:95: ./mm/truncate.c”h´Mzhjß\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:95: ./mm/truncate.c”h´M}hjß\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:95: ./mm/truncate.c”h´M~hjß\ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²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üQh²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:95: ./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”…”�”}”(hjM^h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjI^ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj(^h²hh³j:^h´MÃubj8)�”}”(hŒ;(struct address_space *mapping, pgoff_t start, pgoff_t end)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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^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”jèŒ reftarget”j‰^Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjO^sbŒc.invalidate_inode_pages2_range”†”asbuh1hhje^ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§^h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhje^ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjµ^h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhje^ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjÂ^h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhje^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hja^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”jèŒ reftarget”jà^Œmodname”NŒ classname”Njìjï)�”}”jò]”j£^Œc.invalidate_inode_pages2_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=hja^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”jèŒ reftarget”j(_Œmodname”NŒ classname”Njìjï)�”}”jò]”j£^Œc.invalidate_inode_pages2_range”†”asbuh1hhj_ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD_h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj_ubj)�”}”(hŒend”h]”hŒend”…”�”}”(hjR_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&]”jjuh1j7hj(^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|_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´MÃhjy_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üQh³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Ž)�”}”(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:95: ./mm/truncate.c”h´MÇhj˜_ubj¤)�”}”(hhh]”(j©)�”}”(hŒ4``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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´MÄhj·_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´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 page 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:95: ./mm/truncate.c”h´MÅhjð_ubjÉ)�”}”(hhh]”jM)�”}”(hŒ*the page offset 'from' which to invalidate”h]”hŒ.the page offset ‘from’ which to 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ŒE``pgoff_t end`` the page offset 'to' which to invalidate (inclusive) ”h]”(j¯)�”}”(hŒ``pgoff_t end``”h]”jS)�”}”(hj/`h]”hŒ pgoff_t end”…”�”}”(hj1`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:95: ./mm/truncate.c”h´MÆhj)`ubjÉ)�”}”(hhh]”jM)�”}”(hŒ4the page offset 'to' which to invalidate (inclusive)”h]”hŒ8the page offset ‘to’ which to invalidate (inclusive)”…”�”}”(hjH`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jD`h´MÆhjE`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj)`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jD`h´MÆhj´_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj˜_ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjj`h]”hŒ Description”…”�”}”(hjl`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjh`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´MÈhj˜_ubjM)�”}”(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€`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.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:95: ./mm/truncate.c”h´MÊhj˜_ubjM)�”}”(hŒ--EBUSY if any pages could not be invalidated.”h]”hŒ--EBUSY if any pages could not be invalidated.”…”�”}”(hj§`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´MËhj˜_ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$invalidate_inode_pages2 (C function)”Œc.invalidate_inode_pages2”hNt”auh1hÜhjüQh²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Ö`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:95: ./mm/truncate.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Œinvalidate_inode_pages2”h]”j)�”}”(hŒinvalidate_inode_pages2”h]”hŒinvalidate_inode_pages2”…”�”}”(hj÷`h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjó`ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÒ`h²hh³jä`h´Mubj8)�”}”(hŒ(struct address_space *mapping)”h]”j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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òhjaubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj1ah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj.aubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j3aŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjù`sbŒc.invalidate_inode_pages2”†”asbuh1hhjaubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQah²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjaubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj_ah²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjaubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjlah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjaubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj aubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÒ`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Œ&remove all pages from an address_space”h]”hŒ&remove all pages from an address_space”…”�”}”(hj–ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Mhj“ah²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjË`h²hh³jä`h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj®ajHj®ajI‰jJ‰jK‰uh1híh²hhjüQh³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Ž)�”}”(hj¸ah]”hŒ Parameters”…”�”}”(hjºah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¶aubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Mhj²aubj¤)�”}”(hhh]”j©)�”}”(hŒ4``struct address_space *mapping`` the address_space ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj×ah]”hŒstruct address_space *mapping”…”�”}”(hjÙah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÕaubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´MhjÑaubjÉ)�”}”(hhh]”jM)�”}”(hŒthe address_space”h]”hŒthe address_space”…”�”}”(hjðah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jìah´Mhjíaubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÑaubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jìah´MhjÎaubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj²aubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjbh]”hŒ Description”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjbubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Mhj²aubjM)�”}”(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(bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Mhj²aubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj9bh]”hŒReturn”…”�”}”(hj;bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj7bubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´M hj²aubjM)�”}”(hŒ--EBUSY if any pages could not be invalidated.”h]”hŒ--EBUSY if any pages could not be invalidated.”…”�”}”(hjObh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”•h´M!hj²aubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒtruncate_pagecache (C function)”Œc.truncate_pagecache”hNt”auh1hÜhjüQh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ=void truncate_pagecache (struct inode *inode, loff_t newsize)”h]”hù)�”}”(hŒ)�”}”(hŒstruct inode *inode”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj»bh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj·bubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈbh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj·bubh)�”}”(hhh]”j)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjÙbh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÖbubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÛbŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj¡bsbŒc.truncate_pagecache”†”asbuh1hhj·bubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùbh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj·bubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj·bubj)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj·bubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj³bubj>)�”}”(hŒloff_t newsize”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj0ch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj-cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j2cŒmodname”NŒ classname”Njìjï)�”}”jò]”jõbŒc.truncate_pagecache”†”asbuh1hhj)cubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNch²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj)cubj)�”}”(hŒnewsize”h]”hŒnewsize”…”�”}”(hj\ch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj)cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj³bubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjzbh²hh³jŒbh´M*ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjvbh²hh³jŒbh´M*ubah}”(h]”jqbah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jŒbh´M*hjsbh²hubj4)�”}”(hhh]”jM)�”}”(hŒ2unmap and remove pagecache that has been truncated”h]”hŒ2unmap and remove pagecache that has been truncated”…”�”}”(hj†ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´M*hjƒch²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjsbh²hh³jŒbh´M*ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjžcjHjžcjI‰jJ‰jK‰uh1híh²hhjüQh³Nh´Nubj„)�”}”(hX+**Parameters** ``struct inode *inode`` inode ``loff_t newsize`` new file size **Description** inode's new i_size must already be written before truncate_pagecache is called. 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Ž)�”}”(hj¨ch]”hŒ Parameters”…”�”}”(hjªch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¦cubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´M.hj¢cubj¤)�”}”(hhh]”(j©)�”}”(hŒ``struct inode *inode`` inode ”h]”(j¯)�”}”(hŒ``struct inode *inode``”h]”jS)�”}”(hjÇch]”hŒstruct inode *inode”…”�”}”(hjÉch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÅcubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´M+hjÁcubjÉ)�”}”(hhh]”jM)�”}”(hŒinode”h]”hŒinode”…”�”}”(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Œ!``loff_t newsize`` new file size ”h]”(j¯)�”}”(hŒ``loff_t newsize``”h]”jS)�”}”(hjdh]”hŒloff_t newsize”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjþcubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´M,hjúcubjÉ)�”}”(hhh]”jM)�”}”(hŒ new file size”h]”hŒ new file size”…”�”}”(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�hj9dubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´M.hj¢cubjM)�”}”(hŒOinode's new i_size must already be written before truncate_pagecache is called.”h]”hŒQinode’s new i_size must already be written before truncate_pagecache is called.”…”�”}”(hjQdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´M-hj¢cubjM)�”}”(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.”…”�”}”(hj`dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´M0hj¢cubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒtruncate_setsize (C function)”Œc.truncate_setsize”hNt”auh1hÜhjüQh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ;void truncate_setsize (struct inode *inode, loff_t newsize)”h]”hù)�”}”(hŒ:void truncate_setsize(struct inode *inode, loff_t newsize)”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj�dh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj‹dh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´MMubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjždh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‹dh²hh³j�dh´MMubhÿ)�”}”(hŒtruncate_setsize”h]”j)�”}”(hŒtruncate_setsize”h]”hŒtruncate_setsize”…”�”}”(hj°dh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¬dubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj‹dh²hh³j�dh´MMubj8)�”}”(hŒ%(struct inode *inode, loff_t newsize)”h]”(j>)�”}”(hŒstruct inode *inode”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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Èdubh)�”}”(hhh]”j)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjêdh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjçdubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jìdŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj²dsbŒc.truncate_setsize”†”asbuh1hhjÈdubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj eh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÈdubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÈdubj)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj%eh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÈdubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÄdubj>)�”}”(hŒloff_t newsize”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjAeh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>eubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jCeŒmodname”NŒ classname”Njìjï)�”}”jò]”jeŒc.truncate_setsize”†”asbuh1hhj:eubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_eh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj:eubj)�”}”(hŒnewsize”h]”hŒnewsize”…”�”}”(hjmeh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj:eubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÄdubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj‹dh²hh³j�dh´MMubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj‡dh²hh³j�dh´MMubah}”(h]”j‚dah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j�dh´MMhj„dh²hubj4)�”}”(hhh]”jM)�”}”(hŒ.update inode and pagecache for a new file size”h]”hŒ.update inode and pagecache for a new file size”…”�”}”(hj—eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´MMhj”eh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj„dh²hh³j�dh´MMubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¯ejHj¯ejI‰jJ‰jK‰uh1híh²hhjüQh³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Ž)�”}”(hj¹eh]”hŒ Parameters”…”�”}”(hj»eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj·eubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´MQhj³eubj¤)�”}”(hhh]”(j©)�”}”(hŒ``struct inode *inode`` inode ”h]”(j¯)�”}”(hŒ``struct inode *inode``”h]”jS)�”}”(hjØeh]”hŒstruct inode *inode”…”�”}”(hjÚeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÖeubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´MNhjÒeubjÉ)�”}”(hhh]”jM)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjñeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jíeh´MNhjîeubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÒeubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jíeh´MNhjÏeubj©)�”}”(hŒ!``loff_t newsize`` new file size ”h]”(j¯)�”}”(hŒ``loff_t newsize``”h]”jS)�”}”(hjfh]”hŒloff_t newsize”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjfubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´MOhj fubjÉ)�”}”(hhh]”jM)�”}”(hŒ new file size”h]”hŒ new file size”…”�”}”(hj*fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j&fh´MOhj'fubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj fubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j&fh´MOhjÏeubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj³eubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjLfh]”hŒ Description”…”�”}”(hjNfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjJfubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´MQhj³eubjM)�”}”(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 ”…”�”}”(hjbfh²hh³Nh´NubjŽ)�”}”(hŒ **newsize**”h]”hŒnewsize”…”�”}”(hjjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjbfubhŒf. It will be typically be called from the filesystem’s setattr function when ATTR_SIZE is passed in.”…”�”}”(hjbfh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´MPhj³eubjM)�”}”(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.”…”�”}”(hjƒfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´MThj³eubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%pagecache_isize_extended (C function)”Œc.pagecache_isize_extended”hNt”auh1hÜhjüQh²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”…”�”}”(hj²fh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj®fh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Meubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁfh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj®fh²hh³jÀfh´Meubhÿ)�”}”(hŒpagecache_isize_extended”h]”j)�”}”(hŒpagecache_isize_extended”h]”hŒpagecache_isize_extended”…”�”}”(hjÓfh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÏfubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj®fh²hh³jÀfh´Meubj8)�”}”(hŒ-(struct inode *inode, loff_t from, loff_t to)”h]”(j>)�”}”(hŒstruct inode *inode”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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ëfubh)�”}”(hhh]”j)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj gubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jgŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÕfsbŒc.pagecache_isize_extended”†”asbuh1hhjëfubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-gh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjëfubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj;gh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjëfubj)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjHgh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjëfubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjçfubj>)�”}”(hŒ loff_t from”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjdgh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjagubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jfgŒmodname”NŒ classname”Njìjï)�”}”jò]”j)gŒc.pagecache_isize_extended”†”asbuh1hhj]gubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚gh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj]gubj)�”}”(hŒfrom”h]”hŒfrom”…”�”}”(hj�gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj]gubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjçfubj>)�”}”(hŒ loff_t to”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj¬gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj©gubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j®gŒmodname”NŒ classname”Njìjï)�”}”jò]”j)gŒc.pagecache_isize_extended”†”asbuh1hhj¥gubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊgh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¥gubj)�”}”(hŒto”h]”hŒto”…”�”}”(hjØgh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¥gubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjçfubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj®fh²hh³jÀfh´Meubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjªfh²hh³jÀfh´Meubah}”(h]”j¥fah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÀfh´Mehj§fh²hubj4)�”}”(hhh]”jM)�”}”(hŒ*update pagecache after extension of i_size”h]”hŒ*update pagecache after extension of i_size”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Mehjÿgh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj§fh²hh³jÀfh´Meubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjhjHjhjI‰jJ‰jK‰uh1híh²hhjüQh³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$hh]”hŒ Parameters”…”�”}”(hj&hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj"hubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Mihjhubj¤)�”}”(hhh]”(j©)�”}”(hŒ<``struct inode *inode`` inode for which i_size was extended ”h]”(j¯)�”}”(hŒ``struct inode *inode``”h]”jS)�”}”(hjChh]”hŒstruct inode *inode”…”�”}”(hjEhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjAhubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Mfhj=hubjÉ)�”}”(hhh]”jM)�”}”(hŒ#inode for which i_size was extended”h]”hŒ#inode for which i_size was extended”…”�”}”(hj\hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jXhh´MfhjYhubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj=hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jXhh´Mfhj:hubj©)�”}”(hŒ$``loff_t from`` original inode size ”h]”(j¯)�”}”(hŒ``loff_t from``”h]”jS)�”}”(hj|hh]”hŒ loff_t from”…”�”}”(hj~hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjzhubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´MghjvhubjÉ)�”}”(hhh]”jM)�”}”(hŒoriginal inode size”h]”hŒoriginal inode size”…”�”}”(hj•hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‘hh´Mghj’hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjvhubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‘hh´Mghj:hubj©)�”}”(hŒ``loff_t to`` new inode size ”h]”(j¯)�”}”(hŒ ``loff_t to``”h]”jS)�”}”(hjµhh]”hŒ loff_t to”…”�”}”(hj·hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj³hubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Mhhj¯hubjÉ)�”}”(hhh]”jM)�”}”(hŒnew inode size”h]”hŒnew inode size”…”�”}”(hjÎhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÊhh´MhhjËhubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¯hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÊhh´Mhhj:hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjhubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjðhh]”hŒ Description”…”�”}”(hjòhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjîhubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´MjhjhubjM)�”}”(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.”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´MihjhubjM)�”}”(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.”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´Mphjhubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%truncate_pagecache_range (C function)”Œc.truncate_pagecache_range”hNt”auh1hÜhjüQh²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”…”�”}”(hjDih²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj@ih²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:95: ./mm/truncate.c”h´M¤ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSih²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj@ih²hh³jRih´M¤ubhÿ)�”}”(hŒtruncate_pagecache_range”h]”j)�”}”(hŒtruncate_pagecache_range”h]”hŒtruncate_pagecache_range”…”�”}”(hjeih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjaiubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj@ih²hh³jRih´M¤ubj8)�”}”(hŒ1(struct inode *inode, loff_t lstart, loff_t lend)”h]”(j>)�”}”(hŒstruct inode *inode”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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}iubh)�”}”(hhh]”j)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjŸih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjœiubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j¡iŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjgisbŒc.truncate_pagecache_range”†”asbuh1hhj}iubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿ih²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj}iubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÍih²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj}iubj)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjÚih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj}iubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjyiubj>)�”}”(hŒ loff_t lstart”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjöih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjóiubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jøiŒmodname”NŒ classname”Njìjï)�”}”jò]”j»iŒc.truncate_pagecache_range”†”asbuh1hhjïiubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjïiubj)�”}”(hŒlstart”h]”hŒlstart”…”�”}”(hj"jh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjïiubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjyiubj>)�”}”(hŒ loff_t lend”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hj>jh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj;jubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j@jŒmodname”NŒ classname”Njìjï)�”}”jò]”j»iŒc.truncate_pagecache_range”†”asbuh1hhj7jubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\jh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj7jubj)�”}”(hŒlend”h]”hŒlend”…”�”}”(hjjjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7jubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjyiubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj@ih²hh³jRih´M¤ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjlubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjlubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj"lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjlubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j$lŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjêksbŒc.filemap_set_wb_err”†”asbuh1hhjlubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBlh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjlubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjPlh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjlubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj]lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjlubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjükubj>)�”}”(hŒint err”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjvlh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjrlubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„lh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjrlubj)�”}”(hŒerr”h]”hŒerr”…”�”}”(hj’lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjrlubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjükubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÃkh²hh³jÕkh´KDubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¿kh²hh³jÕkh´KDubah}”(h]”jºkah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÕkh´KDhj¼kh²hubj4)�”}”(hhh]”jM)�”}”(hŒ)set a writeback error on an address_space”h]”hŒ)set a writeback error on an address_space”…”�”}”(hj¼lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´KDhj¹lh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¼kh²hh³jÕkh´KDubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÔljHjÔljI‰jJ‰jK‰uh1híh²hhjüQh³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Þlh]”hŒ Parameters”…”�”}”(hjàlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÜlubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´KHhjØlubj¤)�”}”(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ýlh]”hŒstruct address_space *mapping”…”�”}”(hjÿlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjûlubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´KEhj÷lubjÉ)�”}”(hhh]”jM)�”}”(hŒ'mapping in which to set writeback error”h]”hŒ'mapping in which to set writeback error”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jmh´KEhjmubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj÷lubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jmh´KEhjôlubj©)�”}”(hŒ'``int err`` error to be set in mapping ”h]”(j¯)�”}”(hŒ ``int err``”h]”jS)�”}”(hj6mh]”hŒint err”…”�”}”(hj8mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj4mubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´KFhj0mubjÉ)�”}”(hhh]”jM)�”}”(hŒerror to be set in mapping”h]”hŒerror to be set in mapping”…”�”}”(hjOmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jKmh´KFhjLmubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj0mubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jKmh´KFhjôlubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjØlubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjqmh]”hŒ Description”…”�”}”(hjsmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjomubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´KHhjØlubjM)�”}”(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.”…”�”}”(hj‡mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´KGhjØlubjM)�”}”(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.”…”�”}”(hj–mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´KLhjØlubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²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üQh²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”…”�”}”(hjÅmh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÁmh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´KYubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔmh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÁmh²hh³jÓmh´KYubhÿ)�”}”(hŒfilemap_check_wb_err”h]”j)�”}”(hŒfilemap_check_wb_err”h]”hŒfilemap_check_wb_err”…”�”}”(hjæmh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjâmubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÁmh²hh³jÓmh´KYubj8)�”}”(hŒ/(struct address_space *mapping, errseq_t since)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjþmubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjþmubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjnubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j"nŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjèmsbŒc.filemap_check_wb_err”†”asbuh1hhjþmubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@nh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjþmubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjNnh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjþmubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj[nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjþmubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjúmubj>)�”}”(hŒerrseq_t since”h]”(h)�”}”(hhh]”j)�”}”(hŒerrseq_t”h]”hŒerrseq_t”…”�”}”(hjwnh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjtnubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jynŒmodname”NŒ classname”Njìjï)�”}”jò]”jerrseq_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Ùoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÖoubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÛoŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒfilemap_sample_wb_err”sbŒc.filemap_sample_wb_err”†”asbuh1hhjÒoh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Kiubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûoh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÒoh²hh³júoh´Kiubhÿ)�”}”(hŒfilemap_sample_wb_err”h]”j)�”}”(hj÷oh]”hŒfilemap_sample_wb_err”…”�”}”(hj ph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj pubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÒoh²hh³júoh´Kiubj8)�”}”(hŒ(struct address_space *mapping)”h]”j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj(ph²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj$pubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5ph²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj$pubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjFph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjCpubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jHpŒmodname”NŒ classname”Njìjï)�”}”jò]”jõoŒc.filemap_sample_wb_err”†”asbuh1hhj$pubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdph²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj$pubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjrph²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj$pubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj$pubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj pubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÒoh²hh³júoh´Kiubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÎoh²hh³júoh´Kiubah}”(h]”jÉoah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³júoh´KihjËoh²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©ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Kihj¦ph²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjËoh²hh³júoh´Kiubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÁpjHjÁpjI‰jJ‰jK‰uh1híh²hhjüQh³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Ž)�”}”(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:98: ./include/linux/pagemap.h”h´KmhjÅpubj¤)�”}”(hhh]”j©)�”}”(hŒ8``struct address_space *mapping`` mapping to be sampled ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjêph]”hŒstruct address_space *mapping”…”�”}”(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:98: ./include/linux/pagemap.h”h´KjhjäpubjÉ)�”}”(hhh]”jM)�”}”(hŒmapping to be sampled”h]”hŒmapping to be sampled”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÿph´Kjhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjäpubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÿph´Kjhjápubah}”(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:98: ./include/linux/pagemap.h”h´KlhjÅpubjM)�”}”(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;qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´KkhjÅpubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²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üQh²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”…”�”}”(hjmqh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjjqubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”joqŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒfile_sample_sb_err”sbŒc.file_sample_sb_err”†”asbuh1hhjfqh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Kuubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�qh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjfqh²hh³jŽqh´Kuubhÿ)�”}”(hŒfile_sample_sb_err”h]”j)�”}”(hj‹qh]”hŒfile_sample_sb_err”…”�”}”(hj¡qh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�qubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjfqh²hh³jŽqh´Kuubj8)�”}”(hŒ(struct file *file)”h]”j>)�”}”(hŒstruct file *file”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¼qh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¸qubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉqh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¸qubh)�”}”(hhh]”j)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjÚqh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj×qubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÜqŒmodname”NŒ classname”Njìjï)�”}”jò]”j‰qŒc.file_sample_sb_err”†”asbuh1hhj¸qubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjøqh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¸qubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¸qubj)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¸qubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj´qubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjfqh²hh³jŽqh´Kuubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjbqh²hh³jŽqh´Kuubah}”(h]”j]qah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jŽqh´Kuhj_qh²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=rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Kuhj:rh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj_qh²hh³jŽqh´Kuubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjUrjHjUrjI‰jJ‰jK‰uh1híh²hhjüQh³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Ž)�”}”(hj_rh]”hŒ Parameters”…”�”}”(hjarh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj]rubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´KyhjYrubj¤)�”}”(hhh]”j©)�”}”(hŒ1``struct file *file`` file pointer to be sampled ”h]”(j¯)�”}”(hŒ``struct file *file``”h]”jS)�”}”(hj~rh]”hŒstruct file *file”…”�”}”(hj€rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj|rubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´KvhjxrubjÉ)�”}”(hhh]”jM)�”}”(hŒfile pointer to be sampled”h]”hŒfile pointer to be sampled”…”�”}”(hj—rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j“rh´Kvhj”rubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjxrubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j“rh´Kvhjurubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjYrubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj¹rh]”hŒ Description”…”�”}”(hj»rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj·rubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´KxhjYrubjM)�”}”(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Ïrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´KwhjYrubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmapping_set_error (C function)”Œc.mapping_set_error”hNt”auh1hÜhjüQh²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þrh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjúrh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Kàubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj sh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjúrh²hh³j sh´Kàubhÿ)�”}”(hŒmapping_set_error”h]”j)�”}”(hŒmapping_set_error”h]”hŒmapping_set_error”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjsubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjúrh²hh³j sh´Kàubj8)�”}”(hŒ*(struct address_space *mapping, int error)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj;sh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj7subjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHsh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj7subh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjYsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjVsubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j[sŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj!ssbŒc.mapping_set_error”†”asbuh1hhj7subjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjysh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj7subjr)�”}”(hjuh]”hŒ*”…”�”}”(hj‡sh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj7subj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj”sh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7subeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj3subj>)�”}”(hŒ int error”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hj­sh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj©subjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»sh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj©subj)�”}”(hŒerror”h]”hŒerror”…”�”}”(hjÉsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj©subeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj3subeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjúrh²hh³j sh´Kàubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjörh²hh³j sh´Kàubah}”(h]”jñrah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j sh´Kàhjórh²hubj4)�”}”(hhh]”jM)�”}”(hŒ-record a writeback error in the address_space”h]”hŒ-record a writeback error in the address_space”…”�”}”(hjósh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Kàhjðsh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjórh²hh³j sh´Kàubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj tjHj tjI‰jJ‰jK‰uh1híh²hhjüQh³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Ž)�”}”(hjth]”hŒ Parameters”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjtubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Kähjtubj¤)�”}”(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)�”}”(hj4th]”hŒstruct address_space *mapping”…”�”}”(hj6th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj2tubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Káhj.tubjÉ)�”}”(hhh]”jM)�”}”(hŒ+the mapping in which an error should be set”h]”hŒ+the mapping in which an error should be set”…”�”}”(hjMth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jIth´KáhjJtubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj.tubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jIth´Káhj+tubj©)�”}”(hŒ.``int error`` the error to set in the mapping ”h]”(j¯)�”}”(hŒ ``int error``”h]”jS)�”}”(hjmth]”hŒ int error”…”�”}”(hjoth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjktubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´KâhjgtubjÉ)�”}”(hhh]”jM)�”}”(hŒthe error to set in the mapping”h]”hŒthe error to set in the mapping”…”�”}”(hj†th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‚th´Kâhjƒtubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjgtubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‚th´Kâhj+tubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjtubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj¨th]”hŒ Description”…”�”}”(hjªth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¦tubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´KähjtubjM)�”}”(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.”…”�”}”(hj¾th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´KãhjtubjM)�”}”(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Íth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Kèhjtubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²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üQh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ=void mapping_set_large_folios (struct address_space *mapping)”h]”hù)�”}”(hŒ)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj9uh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj5uubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFuh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj5uubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjWuh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjTuubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jYuŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjusbŒc.mapping_set_large_folios”†”asbuh1hhj5uubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwuh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj5uubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj…uh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj5uubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj’uh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj5uubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj1uubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjøth²hh³j uh´M¼ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjôth²hh³j uh´M¼ubah}”(h]”jïtah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j uh´M¼hjñth²hubj4)�”}”(hhh]”jM)�”}”(hŒ(Indicate the file supports large folios.”h]”hŒ(Indicate the file supports large folios.”…”�”}”(hj¼uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M¼hj¹uh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjñth²hh³j uh´M¼ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÔujHjÔujI‰jJ‰jK‰uh1híh²hhjüQh³Nh´Nubj„)�”}”(hXN**Parameters** ``struct address_space *mapping`` The address space of the file. **Description** The filesystem should call this function in its inode constructor to indicate that the VFS can use large folios to cache the contents of the file. **Context** This should not be called while the inode is active as it is non-atomic.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjÞuh]”hŒ Parameters”…”�”}”(hjàuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÜuubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MÀhjØuubj¤)�”}”(hhh]”j©)�”}”(hŒA``struct address_space *mapping`` The address space of the file. ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjýuh]”hŒstruct address_space *mapping”…”�”}”(hjÿuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjûuubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M½hj÷uubjÉ)�”}”(hhh]”jM)�”}”(hŒThe address space of the file.”h]”hŒThe address space of the file.”…”�”}”(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½hjôuubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjØuubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj8vh]”hŒ Description”…”�”}”(hj:vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj6vubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M¿hjØuubjM)�”}”(hŒ’The filesystem should call this function in its inode constructor to indicate that the VFS can use large folios to cache the contents of the file.”h]”hŒ’The filesystem should call this function in its inode constructor to indicate that the VFS can use large folios to cache the contents of the file.”…”�”}”(hjNvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”•Mh´M¾hjØuubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hj_vh]”hŒContext”…”�”}”(hjavh²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:98: ./include/linux/pagemap.h”h´MÂhjØuubjM)�”}”(hŒHThis should not be called while the inode is active as it is non-atomic.”h]”hŒHThis should not be called while the inode is active as it is non-atomic.”…”�”}”(hjuvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MÃhjØuubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ mapping_align_index (C function)”Œc.mapping_align_index”hNt”auh1hÜhjüQh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒPpgoff_t mapping_align_index (const struct address_space *mapping, pgoff_t index)”h]”hù)�”}”(hŒOpgoff_t mapping_align_index(const struct address_space *mapping, pgoff_t index)”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hj§vh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤vubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j©vŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒmapping_align_index”sbŒc.mapping_align_index”†”asbuh1hhj vh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”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Œmapping_align_index”h]”j)�”}”(hjÅvh]”hŒmapping_align_index”…”�”}”(hjÛvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj×vubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj vh²hh³jÈvh´Mèubj8)�”}”(hŒ4(const struct address_space *mapping, pgoff_t index)”h]”(j>)�”}”(hŒ#const struct address_space *mapping”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjövh²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òvubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjwh²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òvubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj/wh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj,wubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j1wŒmodname”NŒ classname”Njìjï)�”}”jò]”jÃvŒc.mapping_align_index”†”asbuh1hhjòvubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMwh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjòvubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj[wh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjòvubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjhwh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjòvubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjîvubj>)�”}”(hŒ pgoff_t index”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”jèŒ reftarget”j†wŒmodname”NŒ classname”Njìjï)�”}”jò]”jÃvŒc.mapping_align_index”†”asbuh1hhj}wubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢wh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj}wubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(hj°wh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj}wubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjîvubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj 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]”jM)�”}”(hŒAlign index for this mapping.”h]”hŒAlign index for this mapping.”…”�”}”(hjÚwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´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²hhjüQh³Nh´Nubj„)�”}”(hX **Parameters** ``const struct address_space *mapping`` The address_space. ``pgoff_t index`` The page index. **Description** The index of a folio must be naturally aligned. If you are adding a new folio to the page cache and need to know what index to give it, call this function.”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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mìhjöwubj¤)�”}”(hhh]”(j©)�”}”(hŒ;``const struct address_space *mapping`` The address_space. ”h]”(j¯)�”}”(hŒ'``const struct address_space *mapping``”h]”jS)�”}”(hjxh]”hŒ#const struct address_space *mapping”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjxubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MéhjxubjÉ)�”}”(hhh]”jM)�”}”(hŒThe address_space.”h]”hŒThe address_space.”…”�”}”(hj4xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j0xh´Méhj1xubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjxubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j0xh´Méhjxubj©)�”}”(hŒ"``pgoff_t index`` The page index. ”h]”(j¯)�”}”(hŒ``pgoff_t index``”h]”jS)�”}”(hjTxh]”hŒ pgoff_t index”…”�”}”(hjVxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjRxubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MêhjNxubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page index.”h]”hŒThe page index.”…”�”}”(hjmxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jixh´Mêhjjxubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjNxubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jixh´Mêhjxubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjöwubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj�xh]”hŒ Description”…”�”}”(hj‘xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�xubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MìhjöwubjM)�”}”(hŒœThe index of a folio must be naturally aligned. If you are adding a new folio to the page cache and need to know what index to give it, call this function.”h]”hŒœThe index of a folio must be naturally aligned. If you are adding a new folio to the page cache and need to know what index to give it, call this function.”…”�”}”(hj¥xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mëhjöwubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ&mapping_pmd_folio_support (C function)”Œc.mapping_pmd_folio_support”hNt”auh1hÜhjüQh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒDbool mapping_pmd_folio_support (const struct address_space *mapping)”h]”hù)�”}”(hŒCbool mapping_pmd_folio_support(const struct address_space *mapping)”h]”(já)�”}”(hj½h]”hŒbool”…”�”}”(hjÔxh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÐxh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâxh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÐxh²hh³jáxh´Mubhÿ)�”}”(hŒmapping_pmd_folio_support”h]”j)�”}”(hŒmapping_pmd_folio_support”h]”hŒmapping_pmd_folio_support”…”�”}”(hjôxh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjðxubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÐxh²hh³jáxh´Mubj8)�”}”(hŒ%(const struct address_space *mapping)”h]”j>)�”}”(hŒ#const struct address_space *mapping”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj yubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj yubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj+yh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj yubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8yh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj yubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjIyh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjFyubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jKyŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjöxsbŒc.mapping_pmd_folio_support”†”asbuh1hhj yubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjiyh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj yubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjwyh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj yubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj„yh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj yubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjyubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÐxh²hh³jáxh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÌxh²hh³jáxh´Mubah}”(h]”jÇxah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jáxh´MhjÉxh²hubj4)�”}”(hhh]”jM)�”}”(hŒ+Check if a mapping supports PMD-sized folio”h]”hŒ+Check if a mapping supports PMD-sized folio”…”�”}”(hj®yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mhj«yh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÉxh²hh³jáxh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÆyjHjÆyjI‰jJ‰jK‰uh1híh²hhjüQh³Nh´Nubj„)�”}”(hX�**Parameters** ``const struct address_space *mapping`` The address_space **Description** While some mappings support large folios, they might not support PMD-sized folios. This function checks whether a mapping supports PMD-sized folios. For example, khugepaged needs this information before attempting to collapsing THPs. **Return** True if PMD-sized folios are supported, otherwise false.”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:98: ./include/linux/pagemap.h”h´MhjÊyubj¤)�”}”(hhh]”j©)�”}”(hŒ:``const struct address_space *mapping`` The address_space ”h]”(j¯)�”}”(hŒ'``const struct address_space *mapping``”h]”jS)�”}”(hjïyh]”hŒ#const struct address_space *mapping”…”�”}”(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:98: ./include/linux/pagemap.h”h´MhjéyubjÉ)�”}”(hhh]”jM)�”}”(hŒThe address_space”h]”hŒThe address_space”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jzh´Mhjzubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjéyubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jzh´Mhjæyubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÊyubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj*zh]”hŒ Description”…”�”}”(hj,zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj(zubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MhjÊyubjM)�”}”(hŒéWhile some mappings support large folios, they might not support PMD-sized folios. This function checks whether a mapping supports PMD-sized folios. For example, khugepaged needs this information before attempting to collapsing THPs.”h]”hŒéWhile some mappings support large folios, they might not support PMD-sized folios. This function checks whether a mapping supports PMD-sized folios. For example, khugepaged needs this information before attempting to collapsing THPs.”…”�”}”(hj@zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MhjÊyubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjQzh]”hŒReturn”…”�”}”(hjSzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjOzubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M hjÊyubjM)�”}”(hŒ8True if PMD-sized folios are supported, otherwise false.”h]”hŒ8True if PMD-sized folios are supported, otherwise false.”…”�”}”(hjgzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M hjÊyubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ folio_flush_mapping (C function)”Œc.folio_flush_mapping”hNt”auh1hÜhjüQh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ@struct address_space * folio_flush_mapping (struct folio *folio)”h]”hù)�”}”(hŒ>struct address_space *folio_flush_mapping(struct folio *folio)”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj–zh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj’zh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M'ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤zh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj’zh²hh³j£zh´M'ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjµzh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj²zubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j·zŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒfolio_flush_mapping”sbŒc.folio_flush_mapping”†”asbuh1hhj’zh²hh³j£zh´M'ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖzh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj’zh²hh³j£zh´M'ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjäzh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj’zh²hh³j£zh´M'ubhÿ)�”}”(hŒfolio_flush_mapping”h]”j)�”}”(hjÓzh]”hŒfolio_flush_mapping”…”�”}”(hjõzh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñzubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj’zh²hh³j£zh´M'ubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj {ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj {ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj.{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj+{ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j0{Œmodname”NŒ classname”Njìjï)�”}”jò]”jÑzŒc.folio_flush_mapping”†”asbuh1hhj {ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjL{h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj {ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjZ{h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj {ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjg{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&]”jjuh1j7hj’zh²hh³j£zh´M'ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjŽzh²hh³j£zh´M'ubah}”(h]”j‰zah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j£zh´M'hj‹zh²hubj4)�”}”(hhh]”jM)�”}”(hŒ,Find the file mapping this folio belongs to.”h]”hŒ,Find the file mapping this folio belongs to.”…”�”}”(hj‘{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M'hjŽ{h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj‹zh²hh³j£zh´M'ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj©{jHj©{jI‰jJ‰jK‰uh1híh²hhjüQh³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Ž)�”}”(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:98: ./include/linux/pagemap.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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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³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:98: ./include/linux/pagemap.h”h´M*hj­{ubjM)�”}”(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#|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M)hj­{ubjM)�”}”(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().”…”�”}”(hj2|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M-hj­{ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_inode (C function)”Œ c.folio_inode”hNt”auh1hÜhjüQh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ0struct inode * folio_inode (struct folio *folio)”h]”hù)�”}”(hŒ.struct inode *folio_inode(struct folio *folio)”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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:98: ./include/linux/pagemap.h”h´M;ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjo|h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj]|h²hh³jn|h´M;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”jèŒ reftarget”j‚|Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒ folio_inode”sbŒ c.folio_inode”†”asbuh1hhj]|h²hh³jn|h´M;ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡|h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj]|h²hh³jn|h´M;ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¯|h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj]|h²hh³jn|h´M;ubhÿ)�”}”(hŒ folio_inode”h]”j)�”}”(hjž|h]”hŒ folio_inode”…”�”}”(hjÀ|h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¼|ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj]|h²hh³jn|h´M;ubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÛ|h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj×|ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjè|h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj×|ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjù|h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjö|ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jû|Œmodname”NŒ classname”Njìjï)�”}”jò]”jœ|Œ c.folio_inode”†”asbuh1hhj×|ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj×|ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj%}h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj×|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&]”jjuh1j7hj]|h²hh³jn|h´M;ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjY|h²hh³jn|h´M;ubah}”(h]”jT|ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jn|h´M;hjV|h²hubj4)�”}”(hhh]”jM)�”}”(hŒ"Get the host inode for this folio.”h]”hŒ"Get the host inode for this folio.”…”�”}”(hj\}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M;hjY}h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjV|h²hh³jn|h´M;ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjt}jHjt}jI‰jJ‰jK‰uh1híh²hhjüQh³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~}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:98: ./include/linux/pagemap.h”h´M?hjx}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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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³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:98: ./include/linux/pagemap.h”h´M>hjx}ubjM)�”}”(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î}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M=hjx}ubjM)�”}”(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ý}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M@hjx}ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!folio_attach_private (C function)”Œc.folio_attach_private”hNt”auh1hÜhjüQh²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,~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:98: ./include/linux/pagemap.h”h´MIubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;~h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj(~h²hh³j:~h´MIubhÿ)�”}”(hŒfolio_attach_private”h]”j)�”}”(hŒfolio_attach_private”h]”hŒfolio_attach_private”…”�”}”(hjM~h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjI~ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj(~h²hh³j:~h´MIubj8)�”}”(hŒ!(struct folio *folio, void *data)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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~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”jèŒ reftarget”j‰~Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjO~sbŒc.folio_attach_private”†”asbuh1hhje~ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§~h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhje~ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjµ~h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhje~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Œ void *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×~ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj÷~h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj×~ubj)�”}”(hŒdata”h]”hŒdata”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj×~ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hja~ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj(~h²hh³j:~h´MIubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj$~h²hh³j:~h´MIubah}”(h]”j~ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j:~h´MIhj!~h²hubj4)�”}”(hhh]”jM)�”}”(hŒAttach private data to a folio.”h]”hŒAttach private data to a folio.”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MIhj+h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj!~h²hh³j:~h´MIubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjFjHjFjI‰jJ‰jK‰uh1híh²hhjüQh³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Ž)�”}”(hjPh]”hŒ Parameters”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjNubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MMhjJubj¤)�”}”(hhh]”(j©)�”}”(hŒ1``struct folio *folio`` Folio to attach data to. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjoh]”hŒstruct folio *folio”…”�”}”(hjqh²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:98: ./include/linux/pagemap.h”h´MJhjiubjÉ)�”}”(hhh]”jM)�”}”(hŒFolio to attach data to.”h]”hŒFolio to attach data to.”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j„h´MJhj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjiubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j„h´MJhjfubj©)�”}”(hŒ(``void *data`` Data to attach to folio. ”h]”(j¯)�”}”(hŒ``void *data``”h]”jS)�”}”(hj¨h]”hŒ void *data”…”�”}”(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:98: ./include/linux/pagemap.h”h´MKhj¢ubjÉ)�”}”(hhh]”jM)�”}”(hŒData to attach to folio.”h]”hŒData to attach to folio.”…”�”}”(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´MKhjfubeh}”(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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MMhjJubjM)�”}”(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ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MLhjJubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!folio_change_private (C function)”Œc.folio_change_private”hNt”auh1hÜhjüQh²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(€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:98: ./include/linux/pagemap.h”h´MWubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7€h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj$€h²hh³j6€h´MWubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjE€h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj$€h²hh³j6€h´MWubhÿ)�”}”(hŒfolio_change_private”h]”j)�”}”(hŒfolio_change_private”h]”hŒfolio_change_private”…”�”}”(hjV€h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjR€ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj$€h²hh³j6€h´MWubj8)�”}”(hŒ!(struct folio *folio, void *data)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjr€h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjn€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”jèŒ reftarget”j’€Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjX€sbŒc.folio_change_private”†”asbuh1hhjn€ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°€h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjn€ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¾€h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjn€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€ubj>)�”}”(hŒ void *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à€ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjà€ubj)�”}”(hŒdata”h]”hŒdata”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjà€ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjj€ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj$€h²hh³j6€h´MWubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj €h²hh³j6€h´MWubah}”(h]”j€ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j6€h´MWhj€h²hubj4)�”}”(hhh]”jM)�”}”(hŒChange private data on a folio.”h]”hŒChange private data on a folio.”…”�”}”(hj7�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MWhj4�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj€h²hh³j6€h´MWubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjO�jHjO�jI‰jJ‰jK‰uh1híh²hhjüQh³Nh´Nubj„)�”}”(hXu**Parameters** ``struct folio *folio`` Folio to change the data on. ``void *data`` Data to set on the folio. **Description** Change the private data attached to a folio and return the old data. The page must previously have had data attached and the data must be detached before the folio will be freed. **Return** Data that was previously attached to the folio.”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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M[hjS�ubj¤)�”}”(hhh]”(j©)�”}”(hŒ5``struct folio *folio`` Folio to change the data on. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjx�h]”hŒstruct folio *folio”…”�”}”(hjz�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjv�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MXhjr�ubjÉ)�”}”(hhh]”jM)�”}”(hŒFolio to change the data on.”h]”hŒFolio to change the data on.”…”�”}”(hj‘�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j��h´MXhjŽ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjr�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j��h´MXhjo�ubj©)�”}”(hŒ)``void *data`` Data to set on the folio. ”h]”(j¯)�”}”(hŒ``void *data``”h]”jS)�”}”(hj±�h]”hŒ void *data”…”�”}”(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:98: ./include/linux/pagemap.h”h´MYhj«�ubjÉ)�”}”(hhh]”jM)�”}”(hŒData to set on the folio.”h]”hŒData to set on the folio.”…”�”}”(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´MYhjo�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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M[hjS�ubjM)�”}”(hŒ³Change the private data attached to a folio and return the old data. The page must previously have had data attached and the data must be detached before the folio will be freed.”h]”hŒ³Change the private data attached to a folio and return the old data. The page must previously have had data attached and the data must be detached before the folio will be freed.”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MZhjS�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:98: ./include/linux/pagemap.h”h´M^hjS�ubjM)�”}”(hŒ/Data that was previously attached to the folio.”h]”hŒ/Data that was previously attached to the folio.”…”�”}”(hj)‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M_hjS�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!folio_detach_private (C function)”Œc.folio_detach_private”hNt”auh1hÜhjüQh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ1void * folio_detach_private (struct folio *folio)”h]”hù)�”}”(hŒ/void *folio_detach_private(struct folio *folio)”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjX‚h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjT‚h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjg‚h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjT‚h²hh³jf‚h´Mjubjr)�”}”(hjuh]”hŒ*”…”�”}”(hju‚h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjT‚h²hh³jf‚h´Mjubhÿ)�”}”(hŒfolio_detach_private”h]”j)�”}”(hŒfolio_detach_private”h]”hŒfolio_detach_private”…”�”}”(hj†‚h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‚‚ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjT‚h²hh³jf‚h´Mjubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¢‚h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjž‚ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯‚h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjž‚ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÀ‚h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj½‚ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j‚Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjˆ‚sbŒc.folio_detach_private”†”asbuh1hhjž‚ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjà‚h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjž‚ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjî‚h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjž‚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&]”jjuh1j7hjT‚h²hh³jf‚h´Mjubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjP‚h²hh³jf‚h´Mjubah}”(h]”jK‚ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jf‚h´MjhjM‚h²hubj4)�”}”(hhh]”jM)�”}”(hŒ!Detach private data from a folio.”h]”hŒ!Detach private data from a folio.”…”�”}”(hj%ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mjhj"ƒh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjM‚h²hh³jf‚h´Mjubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj=ƒjHj=ƒjI‰jJ‰jK‰uh1híh²hhjüQh³Nh´Nubj„)�”}”(hŒì**Parameters** ``struct folio *folio`` Folio to detach data from. **Description** Removes the data that was previously attached to the folio and decrements the refcount on the page. **Return** Data that was attached to the folio.”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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MnhjAƒubj¤)�”}”(hhh]”j©)�”}”(hŒ3``struct folio *folio`` Folio to detach data from. ”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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mkhj`ƒubjÉ)�”}”(hhh]”jM)�”}”(hŒFolio to detach data from.”h]”hŒFolio to detach data 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]ƒubah}”(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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MmhjAƒubjM)�”}”(hŒcRemoves the data that was previously attached to the folio and decrements the refcount on the page.”h]”hŒcRemoves the data that was previously attached to the folio and decrements the refcount on the page.”…”�”}”(hj·ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MlhjAƒ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:98: ./include/linux/pagemap.h”h´MohjAƒubjM)�”}”(hŒ$Data that was attached to the folio.”h]”hŒ$Data that was attached to the folio.”…”�”}”(hjÞƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MphjAƒubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfgf_t (C type)”Œc.fgf_t”hNt”auh1hÜhjüQh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒfgf_t”h]”hù)�”}”(hŒ type fgf_t”h]”(jœ)�”}”(hŒtype”h]”hŒtype”…”�”}”(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:98: ./include/linux/pagemap.h”h´Muubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj „h²hh³j„h´Muubhÿ)�”}”(hŒfgf_t”h]”j)�”}”(hj„h]”hŒfgf_t”…”�”}”(hj.„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj*„ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj „h²hh³j„h´Muubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj„h²hh³j„h´Muubah}”(h]”j„ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j„h´Muhj„h²hubj4)�”}”(hhh]”jM)�”}”(hŒ-Flags for getting folios from the page cache.”h]”hŒ-Flags for getting folios from the page cache.”…”�”}”(hjP„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M¨hjM„h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj„h²hh³j„h´Muubeh}”(h]”h ]”(jAŒtype”eh"]”h$]”h&]”jFjAjGjh„jHjh„jI‰jJ‰jK‰uh1híh²hhjüQh³Nh´NubjM)�”}”(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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MªhjüQh²hubjM)�”}”(hXMost users of the page cache will not need to use these flags; there are convenience functions such as filemap_get_folio() and filemap_lock_folio(). For users which need more control over exactly what is done with the folios, these flags to __filemap_get_folio() are available.”h]”hXMost users of the page cache will not need to use these flags; there are convenience functions such as filemap_get_folio() and filemap_lock_folio(). For users which need more control over exactly what is done with the folios, these flags to __filemap_get_folio() are available.”…”�”}”(hj„„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M©hjüQh²hubj^)�”}”(hhh]”(jc)�”}”(hŒ5``FGP_ACCESSED`` - The folio will be marked accessed.”h]”jM)�”}”(hj˜„h]”(jS)�”}”(hŒ``FGP_ACCESSED``”h]”hŒ FGP_ACCESSED”…”�”}”(hj�„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjš„ubhŒ% - The folio will be marked accessed.”…”�”}”(hjš„h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M¯hj–„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj“„ubjc)�”}”(hŒ,``FGP_LOCK`` - The folio is returned locked.”h]”jM)�”}”(hj¾„h]”(jS)�”}”(hŒ ``FGP_LOCK``”h]”hŒFGP_LOCK”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÀ„ubhŒ - The folio is returned locked.”…”�”}”(hjÀ„h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M°hj¼„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj“„ubjc)�”}”(hŒ“``FGP_CREAT`` - If no folio is present then a new folio is allocated, added to the page cache and the VM's LRU list. The folio is returned locked.”h]”jM)�”}”(hŒ“``FGP_CREAT`` - If no folio is present then a new folio is allocated, added to the page cache and the VM's LRU list. The folio is returned locked.”h]”(jS)�”}”(hŒ ``FGP_CREAT``”h]”hŒ FGP_CREAT”…”�”}”(hjê„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjæ„ubhŒˆ - If no folio is present then a new folio is allocated, added to the page cache and the VM’s LRU list. The folio is returned locked.”…”�”}”(hjæ„h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M±hjâ„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj“„ubjc)�”}”(hŒ¾``FGP_FOR_MMAP`` - The caller wants to do its own locking dance if the folio is already in cache. If the folio was allocated, unlock it before returning so the caller can do the same dance.”h]”jM)�”}”(hŒ¾``FGP_FOR_MMAP`` - The caller wants to do its own locking dance if the folio is already in cache. If the folio was allocated, unlock it before returning so the caller can do the same dance.”h]”(jS)�”}”(hŒ``FGP_FOR_MMAP``”h]”hŒ FGP_FOR_MMAP”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj …ubhŒ® - The caller wants to do its own locking dance if the folio is already in cache. If the folio was allocated, unlock it before returning so the caller can do the same dance.”…”�”}”(hj …h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M´hj …ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj“„ubjc)�”}”(hŒ;``FGP_WRITE`` - The folio will be written to by the caller.”h]”jM)�”}”(hj2…h]”(jS)�”}”(hŒ ``FGP_WRITE``”h]”hŒ FGP_WRITE”…”�”}”(hj7…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj4…ubhŒ. - The folio will be written to by the caller.”…”�”}”(hj4…h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M·hj0…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj“„ubjc)�”}”(hŒ0``FGP_NOFS`` - __GFP_FS will get cleared in gfp.”h]”jM)�”}”(hjX…h]”(jS)�”}”(hŒ ``FGP_NOFS``”h]”hŒFGP_NOFS”…”�”}”(hj]…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjZ…ubhŒ$ - __GFP_FS will get cleared in gfp.”…”�”}”(hjZ…h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M¸hjV…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj“„ubjc)�”}”(hŒ/``FGP_NOWAIT`` - Don't block on the folio lock.”h]”jM)�”}”(hj~…h]”(jS)�”}”(hŒ``FGP_NOWAIT``”h]”hŒ FGP_NOWAIT”…”�”}”(hjƒ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj€…ubhŒ# - Don’t block on the folio lock.”…”�”}”(hj€…h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M¹hj|…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj“„ubjc)�”}”(hŒE``FGP_STABLE`` - Wait for the folio to be stable (finished writeback)”h]”jM)�”}”(hj¤…h]”(jS)�”}”(hŒ``FGP_STABLE``”h]”hŒ FGP_STABLE”…”�”}”(hj©…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¦…ubhŒ7 - Wait for the folio to be stable (finished writeback)”…”�”}”(hj¦…h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mºhj¢…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj“„ubjc)�”}”(hŒ(``FGP_DONTCACHE`` - Uncached buffered IO”h]”jM)�”}”(hjÊ…h]”(jS)�”}”(hŒ``FGP_DONTCACHE``”h]”hŒ FGP_DONTCACHE”…”�”}”(hjÏ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÌ…ubhŒ - Uncached buffered IO”…”�”}”(hjÌ…h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M»hjÈ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj“„ubjc)�”}”(hŒU``FGP_WRITEBEGIN`` - The flags to use in a filesystem write_begin() implementation. ”h]”jM)�”}”(hŒS``FGP_WRITEBEGIN`` - The flags to use in a filesystem write_begin() implementation.”h]”(jS)�”}”(hŒ``FGP_WRITEBEGIN``”h]”hŒFGP_WRITEBEGIN”…”�”}”(hjö…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjò…ubhŒA - The flags to use in a filesystem write_begin() implementation.”…”�”}”(hjò…h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M¼hjî…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj“„ubeh}”(h]”h ]”h"]”h$]”h&]”j‚juuh1j]h³jµ„h´M¯hjüQh²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfgf_set_order (C function)”Œc.fgf_set_order”hNt”auh1hÜhjüQh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ!fgf_t fgf_set_order (size_t size)”h]”hù)�”}”(hŒ fgf_t fgf_set_order(size_t size)”h]”(h)�”}”(hhh]”j)�”}”(hŒfgf_t”h]”hŒfgf_t”…”�”}”(hj7†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4†ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j9†Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒ fgf_set_order”sbŒc.fgf_set_order”†”asbuh1hhj0†h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MÚubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY†h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj0†h²hh³jX†h´MÚubhÿ)�”}”(hŒ fgf_set_order”h]”j)�”}”(hjU†h]”hŒ fgf_set_order”…”�”}”(hjk†h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjg†ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj0†h²hh³jX†h´MÚubj8)�”}”(hŒ (size_t size)”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”jèŒ reftarget”j‹†Œmodname”NŒ classname”Njìjï)�”}”jò]”jS†Œc.fgf_set_order”†”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~†ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj0†h²hh³jX†h´MÚubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj,†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Œ#Encode a length in the fgf_t flags.”h]”hŒ#Encode a length in the fgf_t flags.”…”�”}”(hj߆h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”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üQh³Nh´Nubj„)�”}”(hXÒ**Parameters** ``size_t size`` The suggested size of the folio to create. **Description** The caller of __filemap_get_folio() can use this to suggest a preferred size for the folio that is created. If there is already a folio at the index, it will be returned, no matter what its size. If a folio is freshly created, it may be of a different size than requested due to alignment constraints, memory pressure, or the presence of other folios at nearby indices.”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:98: ./include/linux/pagemap.h”h´MÞhjû†ubj¤)�”}”(hhh]”j©)�”}”(hŒ;``size_t size`` The suggested size of the folio to create. ”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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MÛhj‡ubjÉ)�”}”(hhh]”jM)�”}”(hŒ*The suggested size of the folio to create.”h]”hŒ*The suggested size of the folio to create.”…”�”}”(hj9‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j5‡h´MÛhj6‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j5‡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�hjY‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MÝhjû†ubjM)�”}”(hXsThe caller of __filemap_get_folio() can use this to suggest a preferred size for the folio that is created. If there is already a folio at the index, it will be returned, no matter what its size. If a folio is freshly created, it may be of a different size than requested due to alignment constraints, memory pressure, or the presence of other folios at nearby indices.”h]”hXsThe caller of __filemap_get_folio() can use this to suggest a preferred size for the folio that is created. If there is already a folio at the index, it will be returned, no matter what its size. If a folio is freshly created, it may be of a different size than requested due to alignment constraints, memory pressure, or the presence of other folios at nearby indices.”…”�”}”(hjq‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MÜhjû†ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"write_begin_get_folio (C function)”Œc.write_begin_get_folio”hNt”auh1hÜhjüQh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒystruct folio * write_begin_get_folio (const struct kiocb *iocb, struct address_space *mapping, pgoff_t index, size_t len)”h]”hù)�”}”(hŒwstruct folio *write_begin_get_folio(const struct kiocb *iocb, struct address_space *mapping, pgoff_t index, size_t len)”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj ‡h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjœ‡h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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)�”}”(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”jèŒ reftarget”jÁ‡Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒwrite_begin_get_folio”sbŒc.write_begin_get_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úubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjî‡h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjœ‡h²hh³j­‡h´Múubhÿ)�”}”(hŒwrite_begin_get_folio”h]”j)�”}”(hj݇h]”hŒwrite_begin_get_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úubj8)�”}”(hŒT(const struct kiocb *iocb, struct address_space *mapping, pgoff_t index, size_t len)”h]”(j>)�”}”(hŒconst struct kiocb *iocb”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj5ˆh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjˆubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBˆh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjˆubh)�”}”(hhh]”j)�”}”(hŒkiocb”h]”hŒkiocb”…”�”}”(hjSˆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjPˆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jUˆŒmodname”NŒ classname”Njìjï)�”}”jò]”jÛ‡Œc.write_begin_get_folio”†”asbuh1hhjˆubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqˆh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjˆubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjˆ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 address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¥ˆh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¡ˆubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²ˆh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¡ˆubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jňŒmodname”NŒ classname”Njìjï)�”}”jò]”jÛ‡Œc.write_begin_get_folio”†”asbuh1hhj¡ˆubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáˆh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¡ˆubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjïˆh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¡ˆ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”jèŒ reftarget”j‰Œmodname”NŒ classname”Njìjï)�”}”jò]”jÛ‡Œc.write_begin_get_folio”†”asbuh1hhj‰ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6‰h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‰ubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(hjD‰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”jèŒ reftarget”jb‰Œmodname”NŒ classname”Njìjï)�”}”jò]”jÛ‡Œc.write_begin_get_folio”†”asbuh1hhjY‰ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~‰h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjY‰ubj)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjŒ‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjY‰ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjˆubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjœ‡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 folio for write_begin with flags.”h]”hŒ%Get folio for write_begin with flags.”…”�”}”(hj¶‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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üQh³Nh´Nubj„)�”}”(hXÇ**Parameters** ``const struct kiocb *iocb`` The kiocb passed from write_begin (may be NULL). ``struct address_space *mapping`` The address space to search. ``pgoff_t index`` The page cache index. ``size_t len`` Length of data being written. **Description** This is a helper for filesystem write_begin() implementations. It wraps __filemap_get_folio(), setting appropriate flags in the write begin context. **Return** A folio or an ERR_PTR.”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:98: ./include/linux/pagemap.h”h´MþhjÒ‰ubj¤)�”}”(hhh]”(j©)�”}”(hŒN``const struct kiocb *iocb`` The kiocb passed from write_begin (may be NULL). ”h]”(j¯)�”}”(hŒ``const struct kiocb *iocb``”h]”jS)�”}”(hj÷‰h]”hŒconst struct kiocb *iocb”…”�”}”(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:98: ./include/linux/pagemap.h”h´Mûhjñ‰ubjÉ)�”}”(hhh]”jM)�”}”(hŒ0The kiocb passed from write_begin (may be NULL).”h]”hŒ0The kiocb passed from write_begin (may be NULL).”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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 address_space *mapping`` The address space to search. ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hj0Šh]”hŒstruct address_space *mapping”…”�”}”(hj2Š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:98: ./include/linux/pagemap.h”h´Mühj*ŠubjÉ)�”}”(hhh]”jM)�”}”(hŒThe address space to search.”h]”hŒThe address space to search.”…”�”}”(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Œ(``pgoff_t index`` The page cache index. ”h]”(j¯)�”}”(hŒ``pgoff_t index``”h]”jS)�”}”(hjiŠh]”hŒ pgoff_t index”…”�”}”(hjkŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjgŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MýhjcŠubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page cache index.”h]”hŒThe page cache index.”…”�”}”(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Œ-``size_t len`` Length of data being written. ”h]”(j¯)�”}”(hŒ``size_t len``”h]”jS)�”}”(hj¢Šh]”hŒ size_t len”…”�”}”(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:98: ./include/linux/pagemap.h”h´MþhjœŠubjÉ)�”}”(hhh]”jM)�”}”(hŒLength of data being written.”h]”hŒLength of data being written.”…”�”}”(hj»Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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:98: ./include/linux/pagemap.h”h´MhjÒ‰ubjM)�”}”(hŒ”This is a helper for filesystem write_begin() implementations. It wraps __filemap_get_folio(), setting appropriate flags in the write begin context.”h]”hŒ”This is a helper for filesystem write_begin() implementations. It wraps __filemap_get_folio(), setting appropriate flags in the write begin context.”…”�”}”(hjóŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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:98: ./include/linux/pagemap.h”h´MhjÒ‰ubjM)�”}”(hŒA folio or an ERR_PTR.”h]”hŒA folio or an ERR_PTR.”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”•Lh´MhjÒ‰ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfilemap_get_folio (C function)”Œc.filemap_get_folio”hNt”auh1hÜhjüQh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒOstruct folio * filemap_get_folio (struct address_space *mapping, pgoff_t index)”h]”hù)�”}”(hŒMstruct folio *filemap_get_folio(struct address_space *mapping, pgoff_t index)”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjI‹h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjE‹h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW‹h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjE‹h²hh³jV‹h´Mubh)�”}”(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”jèŒ reftarget”jj‹Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒfilemap_get_folio”sbŒc.filemap_get_folio”†”asbuh1hhjE‹h²hh³jV‹h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰‹h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjE‹h²hh³jV‹h´Mubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj—‹h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjE‹h²hh³jV‹h´Mubhÿ)�”}”(hŒfilemap_get_folio”h]”j)�”}”(hj†‹h]”hŒfilemap_get_folio”…”�”}”(hj¨‹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤‹ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjE‹h²hh³jV‹h´Mubj8)�”}”(hŒ.(struct address_space *mapping, pgoff_t index)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¿‹ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjЋh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¿‹ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j㋌modname”NŒ classname”Njìjï)�”}”jò]”j„‹Œc.filemap_get_folio”†”asbuh1hhj¿‹ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ‹h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¿‹ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj Œh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¿‹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”…”�”}”(hj6Œh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3Œubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j8ŒŒmodname”NŒ classname”Njìjï)�”}”jò]”j„‹Œc.filemap_get_folio”†”asbuh1hhj/Œubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTŒh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj/Œubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(hjbŒ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&]”jjuh1j7hjE‹h²hh³jV‹h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjA‹h²hh³jV‹h´Mubah}”(h]”j<‹ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jV‹h´Mhj>‹h²hubj4)�”}”(hhh]”jM)�”}”(hŒFind and get a folio.”h]”hŒFind and get a folio.”…”�”}”(hjŒŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mhj‰Œh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj>‹h²hh³jV‹h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¤ŒjHj¤ŒjI‰jJ‰jK‰uh1híh²hhjüQh³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 a folio is present, it is returned with an increased refcount. **Return** A folio or ERR_PTR(-ENOENT) if there is no folio in the cache for this index. Will not return a shadow, swap or DAX entry.”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:98: ./include/linux/pagemap.h”h´Mhj¨Œ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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MhjÇŒ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´MhjãŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÇŒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jâŒh´MhjÄŒ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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mhj�ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page index.”h]”hŒThe page 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´MhjÄŒ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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mhj¨ŒubjM)�”}”(hŒ|Looks up the page cache entry at **mapping** & **index**. If a folio is present, it is returned with an increased refcount.”h]”(hŒ!Looks up the page cache entry at ”…”�”}”(hjW�h²hh³Nh´NubjŽ)�”}”(hŒ **mapping**”h]”hŒmapping”…”�”}”(hj_�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjW�ubhŒ & ”…”�”}”(hjW�h²hh³Nh´NubjŽ)�”}”(hŒ **index**”h]”hŒindex”…”�”}”(hjq�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjW�ubhŒD. If a folio is present, it is returned with an increased refcount.”…”�”}”(hjW�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mhj¨ŒubjM)�”}”(hŒ{A folio or ERR_PTR(-ENOENT) if there is no folio in the cache for this index. Will not return a shadow, swap or DAX entry.”h]”hŒ{A folio or ERR_PTR(-ENOENT) if there is no folio in the cache for this index. Will not return a shadow, swap or DAX entry.”…”�”}”(hj¢�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mhj¨Œubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfilemap_lock_folio (C function)”Œc.filemap_lock_folio”hNt”auh1hÜhjüQh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒPstruct folio * filemap_lock_folio (struct address_space *mapping, pgoff_t index)”h]”hù)�”}”(hŒNstruct folio *filemap_lock_folio(struct address_space *mapping, pgoff_t index)”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÑ�h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÍ�h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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)�”}”(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”jèŒ reftarget”jò�Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒfilemap_lock_folio”sbŒc.filemap_lock_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&ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÍ�h²hh³jÞ�h´M&ubhÿ)�”}”(hŒfilemap_lock_folio”h]”j)�”}”(hjŽh]”hŒfilemap_lock_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&ubj8)�”}”(hŒ.(struct address_space *mapping, pgoff_t index)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjKŽh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjGŽubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXŽh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjGŽubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjiŽh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjfŽubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jkŽŒmodname”NŒ classname”Njìjï)�”}”jò]”j ŽŒc.filemap_lock_folio”†”asbuh1hhjGŽubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡Žh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjGŽubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj•Žh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjGŽubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj¢Žh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjGŽubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjCŽ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”jèŒ reftarget”jÀŽŒmodname”NŒ classname”Njìjï)�”}”jò]”j ŽŒc.filemap_lock_folio”†”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=hjCŽubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÍ�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 and lock a folio.”h]”hŒFind and 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:98: ./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üQh³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 a folio is present, it is returned locked with an increased refcount. **Context** May sleep. **Return** A folio or ERR_PTR(-ENOENT) if there is no folio in the cache for this index. Will not return a shadow, swap or DAX entry.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj6�h]”hŒ Parameters”…”�”}”(hj8�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj4�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M*hj0�ubj¤)�”}”(hhh]”(j©)�”}”(hŒ?``struct address_space *mapping`` The address_space to search. ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjU�h]”hŒstruct address_space *mapping”…”�”}”(hjW�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjS�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M'hjO�ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe address_space to search.”h]”hŒThe address_space to search.”…”�”}”(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'hjL�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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”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³j£�h´M(hj¤�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjˆ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j£�h´M(hjL�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj0�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:98: ./include/linux/pagemap.h”h´M*hj0�ubjM)�”}”(hŒƒLooks up the page cache entry at **mapping** & **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Œ **mapping**”h]”hŒmapping”…”�”}”(hjç�h²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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M)hj0�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:98: ./include/linux/pagemap.h”h´M,hj0�ubjM)�”}”(hŒ May sleep.”h]”hŒ May sleep.”…”�”}”(hj*�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M-hj0�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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M/hj0�ubjM)�”}”(hŒ{A folio or ERR_PTR(-ENOENT) if there is no folio in the cache for this index. Will not return a shadow, swap or DAX entry.”h]”hŒ{A folio or ERR_PTR(-ENOENT) if there is no folio in the cache for this index. Will not return a shadow, swap or DAX entry.”…”�”}”(hjQ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M.hj0�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfilemap_grab_folio (C function)”Œc.filemap_grab_folio”hNt”auh1hÜhjüQh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒPstruct folio * filemap_grab_folio (struct address_space *mapping, pgoff_t index)”h]”hù)�”}”(hŒNstruct folio *filemap_grab_folio(struct address_space *mapping, pgoff_t index)”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj€�h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj|�h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M8ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽ�h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj|�h²hh³j��h´M8ubh)�”}”(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”jèŒ reftarget”j¡�Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒfilemap_grab_folio”sbŒc.filemap_grab_folio”†”asbuh1hhj|�h²hh³j��h´M8ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀ�h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj|�h²hh³j��h´M8ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÎ�h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj|�h²hh³j��h´M8ubhÿ)�”}”(hŒfilemap_grab_folio”h]”j)�”}”(hj½�h]”hŒfilemap_grab_folio”…”�”}”(hjß�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÛ�ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj|�h²hh³j��h´M8ubj8)�”}”(hŒ.(struct address_space *mapping, pgoff_t index)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjú�h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjö�ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjö�ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j‘Œmodname”NŒ classname”Njìjï)�”}”jò]”j»�Œc.filemap_grab_folio”†”asbuh1hhjö�ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6‘h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjö�ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjD‘h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjö�ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjQ‘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”…”�”}”(hjm‘h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjj‘ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jo‘Œmodname”NŒ classname”Njìjï)�”}”jò]”j»�Œc.filemap_grab_folio”†”asbuh1hhjf‘ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹‘h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjf‘ubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(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&]”jjuh1j7hj|�h²hh³j��h´M8ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjx�h²hh³j��h´M8ubah}”(h]”js�ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j��h´M8hju�h²hubj4)�”}”(hhh]”jM)�”}”(hŒ grab a folio from the page cache”h]”hŒ grab a folio from the page cache”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M8hjÀ‘h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hju�h²hh³j��h´M8ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÛ‘jHjÛ‘jI‰jJ‰jK‰uh1híh²hhjüQh³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 no folio is found, a new folio is created. The folio is locked, marked as accessed, and returned. **Return** A found or created folio. ERR_PTR(-ENOMEM) if no folio is found and failed to create 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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M9hjþ‘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´M9hj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjþ‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j’h´M9hjû‘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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M:hj7’ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page index”h]”hŒThe page index”…”�”}”(hjV’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jR’h´M:hjS’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj7’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Ž)�”}”(hjx’h]”hŒ Description”…”�”}”(hjz’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjv’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M<hjß‘ubjM)�”}”(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Ž’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´NubjŽ)�”}”(hŒ **index**”h]”hŒindex”…”�”}”(hj¨’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjŽ’ubhŒf. If no folio is found, a new folio is created. The folio is locked, marked as accessed, and returned.”…”�”}”(hjŽ’h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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:98: ./include/linux/pagemap.h”h´M?hjß‘ubjM)�”}”(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Ù’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M@hjß‘ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfind_get_page (C function)”Œc.find_get_page”hNt”auh1hÜhjüQh²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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj“h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MLubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj“h²hh³j“h´MLubh)�”}”(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”jèŒ reftarget”j)“Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒ find_get_page”sbŒc.find_get_page”†”asbuh1hhj“h²hh³j“h´MLubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjH“h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj“h²hh³j“h´MLubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjV“h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj“h²hh³j“h´MLubhÿ)�”}”(hŒ find_get_page”h]”j)�”}”(hjE“h]”hŒ find_get_page”…”�”}”(hjg“h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjc“ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj“h²hh³j“h´MLubj8)�”}”(hŒ/(struct address_space *mapping, pgoff_t offset)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj‚“h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj~“ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�“h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj~“ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j¢“Œmodname”NŒ classname”Njìjï)�”}”jò]”jC“Œc.find_get_page”†”asbuh1hhj~“ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾“h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj~“ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÌ“h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj~“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Œpgoff_t offset”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”jèŒ reftarget”j÷“Œmodname”NŒ classname”Njìjï)�”}”jò]”jC“Œc.find_get_page”†”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=hjz“ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj“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Œfind and get a page reference”h]”hŒfind and get a page reference”…”�”}”(hjK”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MLhjH”h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjý’h²hh³j“h´MLubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjc”jHjc”jI‰jJ‰jK‰uh1híh²hhjüQh³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Ž)�”}”(hjm”h]”hŒ Parameters”…”�”}”(hjo”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjk”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MPhjg”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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MMhj†”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´MMhj¢”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj†”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¡”h´MMhjƒ”ubj©)�”}”(hŒ"``pgoff_t offset`` the page index ”h]”(j¯)�”}”(hŒ``pgoff_t offset``”h]”jS)�”}”(hjÅ”h]”hŒpgoff_t offset”…”�”}”(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:98: ./include/linux/pagemap.h”h´MNhj¿”ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe page index”h]”hŒthe page index”…”�”}”(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ƒ”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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MPhjg”ubjM)�”}”(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•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´NubjŽ)�”}”(hŒ **offset**”h]”hŒoffset”…”�”}”(hj0•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj•ubhŒL. If there is a page cache page, it is returned with an increased refcount.”…”�”}”(hj•h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MOhjg”ubjM)�”}”(hŒ Otherwise, ``NULL`` is returned.”h]”(hŒ Otherwise, ”…”�”}”(hjI•h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjQ•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjI•ubhŒ is returned.”…”�”}”(hjI•h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MRhjg”ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfind_lock_page (C function)”Œc.find_lock_page”hNt”auh1hÜhjüQh²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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjŠ•h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj†•h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.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Œpage”h]”hŒpage”…”�”}”(hj©•h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦•ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j«•Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒfind_lock_page”sbŒc.find_lock_page”†”asbuh1hhj†•h²hh³j—•h´Mbubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊ•h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj†•h²hh³j—•h´Mbubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjØ•h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj†•h²hh³j—•h´Mbubhÿ)�”}”(hŒfind_lock_page”h]”j)�”}”(hjÇ•h]”hŒfind_lock_page”…”�”}”(hjé•h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjå•ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj†•h²hh³j—•h´Mbubj8)�”}”(hŒ.(struct address_space *mapping, pgoff_t index)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj–ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj–ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j$–Œmodname”NŒ classname”Njìjï)�”}”jò]”jÅ•Œc.find_lock_page”†”asbuh1hhj–ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@–h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj–ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjN–h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj–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”jèŒ reftarget”jy–Œmodname”NŒ classname”Njìjï)�”}”jò]”jÅ•Œc.find_lock_page”†”asbuh1hhjp–ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•–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ü•ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj†•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Œ%locate, pin and lock a pagecache page”h]”hŒ%locate, pin and lock a pagecache page”…”�”}”(hjÍ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.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üQh³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ï–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:98: ./include/linux/pagemap.h”h´Mfhjé–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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mchj—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´Mchj$—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j#—h´Mchj—ubj©)�”}”(hŒ!``pgoff_t index`` the page index ”h]”(j¯)�”}”(hŒ``pgoff_t index``”h]”jS)�”}”(hjG—h]”hŒ pgoff_t index”…”�”}”(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:98: ./include/linux/pagemap.h”h´MdhjA—ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe page index”h]”hŒthe page index”…”�”}”(hj`—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j\—h´Mdhj]—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjA—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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mfhjé–ubjM)�”}”(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 ”…”�”}”(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´NubjŽ)�”}”(hŒ **index**”h]”hŒindex”…”�”}”(hj²—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj˜—ubhŒW. If there is a page cache page, it is returned locked and with an increased refcount.”…”�”}”(hj˜—h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mehjé–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:98: ./include/linux/pagemap.h”h´Mihjé–ubjM)�”}”(hŒ May sleep.”h]”hŒ May sleep.”…”�”}”(hjã—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mjhjé–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:98: ./include/linux/pagemap.h”h´Mlhjé–ubjM)�”}”(hŒJA struct page or ``NULL`` if there is no page in the cache for this index.”h]”(hŒA struct page or ”…”�”}”(hj ˜h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj ˜ubhŒ1 if there is no page in the cache for this index.”…”�”}”(hj ˜h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mkhjé–ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²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üQh²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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjK˜h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjG˜h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Muubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY˜h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjG˜h²hh³jX˜h´Muubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjj˜h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjg˜ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jl˜Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒfind_or_create_page”sbŒc.find_or_create_page”†”asbuh1hhjG˜h²hh³jX˜h´Muubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹˜h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjG˜h²hh³jX˜h´Muubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj™˜h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjG˜h²hh³jX˜h´Muubhÿ)�”}”(hŒfind_or_create_page”h]”j)�”}”(hjˆ˜h]”hŒfind_or_create_page”…”�”}”(hjª˜h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦˜ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjG˜h²hh³jX˜h´Muubj8)�”}”(hŒ>(struct address_space *mapping, pgoff_t index, gfp_t gfp_mask)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjŘh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÁ˜ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒ˜h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÁ˜ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j嘌modname”NŒ classname”Njìjï)�”}”jò]”j†˜Œc.find_or_create_page”†”asbuh1hhjÁ˜ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÁ˜ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÁ˜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”…”�”}”(hj8™h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj5™ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j:™Œmodname”NŒ classname”Njìjï)�”}”jò]”j†˜Œc.find_or_create_page”†”asbuh1hhj1™ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjV™h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj1™ubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(hjd™h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj1™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”jèŒ reftarget”j‚™Œmodname”NŒ classname”Njìjï)�”}”jò]”j†˜Œc.find_or_create_page”†”asbuh1hhjy™ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjž™h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjy™ubj)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hj¬™h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjy™ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj½˜ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjG˜h²hh³jX˜h´Muubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjC˜h²hh³jX˜h´Muubah}”(h]”j>˜ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jX˜h´Muhj@˜h²hubj4)�”}”(hhh]”jM)�”}”(hŒlocate or add a pagecache page”h]”hŒlocate or add a pagecache page”…”�”}”(hjÖ™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MuhjÓ™h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj@˜h²hh³jX˜h´Muubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjî™jHjî™jI‰jJ‰jK‰uh1híh²hhjüQh³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ø™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:98: ./include/linux/pagemap.h”h´Myhjò™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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MvhjšubjÉ)�”}”(hhh]”jM)�”}”(hŒthe page's address_space”h]”hŒthe page’s address_space”…”�”}”(hj0š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Œ4``pgoff_t index`` the page's index into the mapping ”h]”(j¯)�”}”(hŒ``pgoff_t index``”h]”jS)�”}”(hjPšh]”hŒ pgoff_t index”…”�”}”(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:98: ./include/linux/pagemap.h”h´MwhjJšubjÉ)�”}”(hhh]”jM)�”}”(hŒ!the page's index into the mapping”h]”hŒ#the page’s index into the mapping”…”�”}”(hjišh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ješh´Mwhjfšubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjJšubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³ješh´Mwhjšubj©)�”}”(hŒ(``gfp_t gfp_mask`` page allocation 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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MxhjƒšubjÉ)�”}”(hhh]”jM)�”}”(hŒpage allocation mode”h]”hŒpage allocation mode”…”�”}”(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š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:98: ./include/linux/pagemap.h”h´Mzhjò™ubjM)�”}”(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Úš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´NubjŽ)�”}”(hŒ **offset**”h]”hŒoffset”…”�”}”(hjôšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÚšubhŒW. If there is a page cache page, it is returned locked and with an increased refcount.”…”�”}”(hjÚšh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Myhjò™ubjM)�”}”(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 ›h²hh³Nh´NubjŽ)�”}”(hŒ **gfp_mask**”h]”hŒgfp_mask”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ›ubhŒr and added to the page cache and the VM’s LRU list. The page is returned locked and with an increased refcount.”…”�”}”(hj ›h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M}hjò™ubjM)�”}”(hŒ+On memory exhaustion, ``NULL`` is returned.”h]”(hŒOn memory exhaustion, ”…”�”}”(hj.›h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj6›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj.›ubhŒ is returned.”…”�”}”(hj.›h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M�hjò™ubjM)�”}”(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 ”…”�”}”(hjO›h²hh³Nh´NubjŽ)�”}”(hŒ **gfp_flags**”h]”hŒ gfp_flags”…”�”}”(hjW›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjO›ubhŒ specifies an atomic allocation!”…”�”}”(hjO›h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mƒhjò™ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²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üQh²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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj�›h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjŒ›h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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)�”}”(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”jèŒ reftarget”j±›Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒgrab_cache_page_nowait”sbŒc.grab_cache_page_nowait”†”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�ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÞ›h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjŒ›h²hh³j�›h´M�ubhÿ)�”}”(hŒgrab_cache_page_nowait”h]”j)�”}”(hjÍ›h]”hŒgrab_cache_page_nowait”…”�”}”(hjï›h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjë›ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjŒ›h²hh³j�›h´M�ubj8)�”}”(hŒ.(struct address_space *mapping, pgoff_t index)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj œh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjœubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjœubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j*œŒmodname”NŒ classname”Njìjï)�”}”jò]”jË›Œc.grab_cache_page_nowait”†”asbuh1hhjœubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFœh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjœubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjTœh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjœubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjaœ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&]”uh1jhjzœubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jœŒmodname”NŒ classname”Njìjï)�”}”jò]”jË›Œc.grab_cache_page_nowait”†”asbuh1hhjvœubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›œh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjvœubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(hj©œh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjvœubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjœubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjŒ›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Œ1returns locked page at given index in given cache”h]”hŒ1returns locked page at given index in given cache”…”�”}”(hjÓœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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üQh³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õœ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:98: ./include/linux/pagemap.h”h´M”hjïœubj¤)�”}”(hhh]”(j©)�”}”(hŒ7``struct address_space *mapping`` target 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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”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³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)�”}”(hjM�h]”hŒ pgoff_t index”…”�”}”(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:98: ./include/linux/pagemap.h”h´M’hjG�ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe page index”h]”hŒthe page index”…”�”}”(hjf�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jb�h´M’hjc�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjG�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jb�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:98: ./include/linux/pagemap.h”h´M”hjïœubjM)�”}”(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.”…”�”}”(hjž�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M“hjïœubjM)�”}”(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­�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M™hjïœubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_next_index (C function)”Œc.folio_next_index”hNt”auh1hÜhjüQh²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ß�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÜ�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”já�Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒfolio_next_index”sbŒc.folio_next_index”†”asbuh1hhjØ�h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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_next_index”h]”j)�”}”(hjý�h]”hŒfolio_next_index”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjžubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjØ�h²hh³jžh´M¦ubj8)�”}”(hŒ(const struct folio *folio)”h]”j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjIžh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj*ž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”jèŒ reftarget”jižŒmodname”NŒ classname”Njìjï)�”}”jò]”jû�Œc.folio_next_index”†”asbuh1hhj*žubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…žh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj*žubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj“žh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj*ž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&]”jjuh1j7hjØ�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 index of the next folio.”h]”hŒ Get the index of the next folio.”…”�”}”(hjÊžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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üQh³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ìž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:98: ./include/linux/pagemap.h”h´Mªhjæžubj¤)�”}”(hhh]”j©)�”}”(hŒ1``const struct folio *folio`` The current 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:98: ./include/linux/pagemap.h”h´M§hjŸubjÉ)�”}”(hhh]”jM)�”}”(hŒThe current folio.”h]”hŒThe current 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Œ **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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M©hjæžubjM)�”}”(hŒ)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjøŸh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÙŸubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÙŸubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j Œmodname”NŒ classname”Njìjï)�”}”jò]”jªŸŒc.folio_next_pos”†”asbuh1hhjÙŸubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÙŸubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjB h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÙŸubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(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&]”jjuh1j7hj‡Ÿ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 file position of the next folio.”h]”hŒ(Get the file position of the next folio.”…”�”}”(hjy h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M±hjv 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üQh³Nh´Nubj„)�”}”(hŒ�**Parameters** ``const struct folio *folio`` The current folio. **Return** The position of the folio which follows this folio in 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:98: ./include/linux/pagemap.h”h´Mµhj• ubj¤)�”}”(hhh]”j©)�”}”(hŒ1``const struct folio *folio`` The current 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:98: ./include/linux/pagemap.h”h´M²hj´ ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe current folio.”h]”hŒThe current 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Œ **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:98: ./include/linux/pagemap.h”•³h´M´hj• ubjM)�”}”(hŒ?The position of the folio which follows this folio in the file.”h]”hŒ?The position of the folio which follows this folio in the file.”…”�”}”(hj ¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M´hj• ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_file_page (C function)”Œc.folio_file_page”hNt”auh1hÜhjüQh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒBstruct page * folio_file_page (struct folio *folio, pgoff_t index)”h]”hù)�”}”(hŒ@struct page *folio_file_page(struct folio *folio, pgoff_t index)”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj:¡h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj6¡h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M¼ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjH¡h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj6¡h²hh³jG¡h´M¼ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjY¡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjV¡ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j[¡Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒfolio_file_page”sbŒc.folio_file_page”†”asbuh1hhj6¡h²hh³jG¡h´M¼ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjz¡h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj6¡h²hh³jG¡h´M¼ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjˆ¡h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj6¡h²hh³jG¡h´M¼ubhÿ)�”}”(hŒfolio_file_page”h]”j)�”}”(hjw¡h]”hŒfolio_file_page”…”�”}”(hj™¡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj•¡ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj6¡h²hh³jG¡h´M¼ubj8)�”}”(hŒ$(struct folio *folio, pgoff_t index)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj´¡h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj°¡ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁ¡h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj°¡ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÒ¡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÏ¡ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÔ¡Œmodname”NŒ classname”Njìjï)�”}”jò]”ju¡Œc.folio_file_page”†”asbuh1hhj°¡ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjð¡h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj°¡ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjþ¡h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj°¡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Œ 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”jèŒ reftarget”j)¢Œmodname”NŒ classname”Njìjï)�”}”jò]”ju¡Œc.folio_file_page”†”asbuh1hhj ¢ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjE¢h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj ¢ubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(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&]”jjuh1j7hj6¡h²hh³jG¡h´M¼ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj2¡h²hh³jG¡h´M¼ubah}”(h]”j-¡ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jG¡h´M¼hj/¡h²hubj4)�”}”(hhh]”jM)�”}”(hŒ The page for a particular index.”h]”hŒ The page for a particular index.”…”�”}”(hj}¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M¼hjz¢h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj/¡h²hh³jG¡h´M¼ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj•¢jHj•¢jI‰jJ‰jK‰uh1híh²hhjüQh³Nh´Nubj„)�”}”(hXL**Parameters** ``struct folio *folio`` The folio which contains this index. ``pgoff_t index`` The index we want to look up. **Description** Sometimes after looking up a folio in the page cache, we need to obtain the specific page for an index (eg a page fault). **Return** The page containing the file data for this 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:98: ./include/linux/pagemap.h”h´MÀhj™¢ubj¤)�”}”(hhh]”(j©)�”}”(hŒ=``struct folio *folio`` The folio which contains this index. ”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:98: ./include/linux/pagemap.h”h´M½hj¸¢ubjÉ)�”}”(hhh]”jM)�”}”(hŒ$The folio which contains this index.”h]”hŒ$The folio which contains this 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Œ0``pgoff_t index`` The index we want to look up. ”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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M¾hjñ¢ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe index we want to look up.”h]”hŒThe index we want to look up.”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MÀhj™¢ubjM)�”}”(hŒySometimes after looking up a folio in the page cache, we need to obtain the specific page for an index (eg a page fault).”h]”hŒySometimes after looking up a folio in the page cache, we need to obtain the specific page for an index (eg a page fault).”…”�”}”(hjH£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M¿hj™¢ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjY£h]”hŒReturn”…”�”}”(hj[£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjW£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MÂhj™¢ubjM)�”}”(hŒ1The page containing the file data for this index.”h]”hŒ1The page containing the file data for this index.”…”�”}”(hjo£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MÃhj™¢ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_contains (C function)”Œc.folio_contains”hNt”auh1hÜhjüQh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(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”…”�”}”(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:98: ./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_contains”h]”j)�”}”(hŒfolio_contains”h]”hŒfolio_contains”…”�”}”(hj¾£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjº£ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjš£h²hh³j«£h´MËubj8)�”}”(hŒ*(const struct folio *folio, pgoff_t index)”h]”(j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjõ£h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÖ£ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÖ£ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j¤Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÀ£sbŒc.folio_contains”†”asbuh1hhjÖ£ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3¤h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÖ£ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjA¤h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÖ£ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjN¤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”…”�”}”(hjj¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjg¤ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jl¤Œmodname”NŒ classname”Njìjï)�”}”jò]”j/¤Œc.folio_contains”†”asbuh1hhjc¤ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ¤h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjc¤ubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(hj–¤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&]”jjuh1j7hjš£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Œ#Does this folio contain this index?”h]”hŒ#Does this folio contain this index?”…”�”}”(hjÀ¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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üQh³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â¤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:98: ./include/linux/pagemap.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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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³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``pgoff_t index`` The page index within the file. ”h]”(j¯)�”}”(hŒ``pgoff_t index``”h]”jS)�”}”(hj:¥h]”hŒ pgoff_t index”…”�”}”(hj<¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj8¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MÍhj4¥ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page index within the file.”h]”hŒThe page index within the file.”…”�”}”(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ø¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjܤubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hju¥h]”hŒContext”…”�”}”(hjw¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjs¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MÏhjܤubjM)�”}”(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‹¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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:98: ./include/linux/pagemap.h”h´MÒhjܤubjM)�”}”(hŒtrue or false.”h]”hŒtrue or false.”…”�”}”(hj²¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MÑhjܤubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpage_pgoff (C function)”Œ c.page_pgoff”hNt”auh1hÜhjüQh²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ä¥h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjá¥ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j楌modname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒ page_pgoff”sbŒ c.page_pgoff”†”asbuh1hhjÝ¥h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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Œ page_pgoff”h]”j)�”}”(hj¦h]”hŒ page_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øubj8)�”}”(hŒ4(const struct folio *folio, const struct page *page)”h]”(j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hj3¦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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjN¦h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj/¦ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[¦h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj/¦ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjl¦h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhji¦ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jn¦Œmodname”NŒ classname”Njìjï)�”}”jò]”j¦Œ c.page_pgoff”†”asbuh1hhj/¦ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjЦh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj/¦ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj˜¦h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj/¦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 page *page”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÙ¦h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjº¦ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæ¦h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjº¦ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj÷¦h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjô¦ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jù¦Œmodname”NŒ classname”Njìjï)�”}”jò]”j¦Œ c.page_pgoff”†”asbuh1hhjº¦ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjº¦ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj#§h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjº¦ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(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&]”jjuh1j7hjÝ¥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Œ/Calculate the logical page offset of this page.”h]”hŒ/Calculate the logical page offset of this page.”…”�”}”(hjZ§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.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&]”jFjAjGjr§jHjr§jI‰jJ‰jK‰uh1híh²hhjüQh³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|§h]”hŒ Parameters”…”�”}”(hj~§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjz§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mühjv§ubj¤)�”}”(hhh]”(j©)�”}”(hŒ>``const struct folio *folio`` The folio containing this 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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mùhj•§ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio containing this page.”h]”hŒThe folio containing 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ŒB``const struct page *page`` The page which we need the offset 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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MúhjΧubjÉ)�”}”(hhh]”jM)�”}”(hŒ%The page which we need the offset of.”h]”hŒ%The page which we need the offset 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’§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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mühjv§ubjM)�”}”(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%¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mûhjv§ubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hj6¨h]”hŒContext”…”�”}”(hj8¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj4¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mhjv§ubjM)�”}”(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.”…”�”}”(hjL¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mhjv§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:98: ./include/linux/pagemap.h”h´Mhjv§ubjM)�”}”(hŒ!The offset in units of PAGE_SIZE.”h]”hŒ!The offset in units of PAGE_SIZE.”…”�”}”(hjs¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mhjv§ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_pos (C function)”Œ c.folio_pos”hNt”auh1hÜhjüQh²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”…”�”}”(hj¥¨h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¢¨ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j§¨Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒ folio_pos”sbŒ c.folio_pos”†”asbuh1hhjž¨h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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_pos”h]”j)�”}”(hjèh]”hŒ folio_pos”…”�”}”(hjÙ¨h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕ¨ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjž¨h²hh³jƨh´M ubj8)�”}”(hŒ(const struct folio *folio)”h]”j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjð¨ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjð¨ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj-©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj*©ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j/©Œmodname”NŒ classname”Njìjï)�”}”jò]”jÁ¨Œ c.folio_pos”†”asbuh1hhjð¨ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjK©h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjð¨ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjY©h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjð¨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&]”jjuh1j7hjž¨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Œ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:98: ./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üQh³Nh´Nubj„)�”}”(hŒ:**Parameters** ``const struct folio *folio`` 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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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:98: ./include/linux/pagemap.h”h´MhjË©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:98: ./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üQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒlinear_page_delta (C function)”Œc.linear_page_delta”hNt”auh1hÜhjüQh²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”jèŒ reftarget”j0ªŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒlinear_page_delta”sbŒc.linear_page_delta”†”asbuh1hhj'ªh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.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Œlinear_page_delta”h]”j)�”}”(hjLªh]”hŒlinear_page_delta”…”�”}”(hjbªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj^ªubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj'ªh²hh³jOªh´M(ubj8)�”}”(hŒ?(const struct vm_area_struct *vma, const unsigned long address)”h]”(j>)�”}”(hŒ const struct vm_area_struct *vma”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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ª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”jèŒ reftarget”j¸ªŒmodname”NŒ classname”Njìjï)�”}”jò]”jJªŒc.linear_page_delta”†”asbuh1hhjyªubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔªh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjyªubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjâªh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjyªubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjïªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjyªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjuªubj>)�”}”(hŒconst unsigned long address”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œunsigned”h]”hŒunsigned”…”�”}”(hj#«h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj«ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1«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=hjuªubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj'ªh²hh³jOªh´M(ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj#ªh²hh³jOªh´M(ubah}”(h]”jªah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jOª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 ”…”�”}”(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:98: ./include/linux/pagemap.h”h´M(hj‚«h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj ªh²hh³jOªh´M(ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÁ«jHjÁ«jI‰jJ‰jK‰uh1híh²hhjüQh³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Ž)�”}”(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:98: ./include/linux/pagemap.h”h´M,hjÅ«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:98: ./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)�”}”(hj5¬h]”hŒconst unsigned long address”…”�”}”(hj7¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj3¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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.”…”�”}”(hjN¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jJ¬h´M+hjK¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj/¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jJ¬h´M+hjá«ubeh}”(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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M-hjÅ«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 ”…”�”}”(hj†¬h²hh³Nh´NubjŽ)�”}”(hŒ **address**”h]”hŒaddress”…”�”}”(hjެh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj†¬ubhŒ lies from ”…”�”}”(hj†¬h²hh³Nh´NubjŽ)�”}”(hŒ**vma->vm_start**”h]”hŒ vma->vm_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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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:98: ./include/linux/pagemap.h”h´M/hjÅ«ubjM)�”}”(hŒ)�”}”(hŒ const struct vm_area_struct *vma”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjv­h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjr­ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒ­h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjr­ubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj‘­h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjr­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”jèŒ reftarget”j±­Œmodname”NŒ classname”Njìjï)�”}”jò]”jC­Œc.linear_page_index”†”asbuh1hhjr­ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍ­h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjr­ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÛ­h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjr­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=hjn­ubj>)�”}”(hŒconst unsigned long address”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œ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Œaddress”h]”hŒaddress”…”�”}”(hjT®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&]”jjuh1j7hj ­h²hh³jH­h´M9ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj­h²hh³jH­h´M9ubah}”(h]”j­ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jH­h´M9hj­h²hubj4)�”}”(hhh]”jM)�”}”(hŒADetermine the absolute page offset of **address** within **vma**.”h]”(hŒ&Determine the absolute 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:98: ./include/linux/pagemap.h”h´M9hj{®h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj­h²hh³jH­h´M9ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjº®jHjº®jI‰jJ‰jK‰uh1híh²hhjüQh³Nh´Nubj„)�”}”(hXe**Parameters** ``const struct vm_area_struct *vma`` The VMA in which **address** resides. ``const unsigned long address`` The address whose absolute page offset is required. **Description** See the comment for vma_start_pgoff() for a description of what the page offset signifies. **Return** The absolute page offset of **address** within **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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M=hj¾®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:98: ./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 absolute page offset is required. ”h]”(j¯)�”}”(hŒ``const unsigned long address``”h]”jS)�”}”(hj.¯h]”hŒconst unsigned long address”…”�”}”(hj0¯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:98: ./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.”…”�”}”(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Ú®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¾®ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hji¯h]”hŒ Description”…”�”}”(hjk¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjg¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M>hj¾®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:98: ./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:98: ./include/linux/pagemap.h”h´M@hj¾®ubjM)�”}”(hŒ7The absolute page offset of **address** within **vma**.”h]”(hŒThe absolute 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:98: ./include/linux/pagemap.h”h´MAhj¾®ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²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üQh²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”jèŒ reftarget”jþ¯Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒlinear_anon_page_index”sbŒc.linear_anon_page_index”†”asbuh1hhjõ¯h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MPubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjõ¯h²hh³j°h´MPubhÿ)�”}”(hŒlinear_anon_page_index”h]”j)�”}”(hj°h]”hŒlinear_anon_page_index”…”�”}”(hj0°h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj,°ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjõ¯h²hh³j°h´MPubj8)�”}”(hŒ?(const struct vm_area_struct *vma, const unsigned long address)”h]”(j>)�”}”(hŒ const struct vm_area_struct *vma”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjK°h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjG°ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjX°h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjG°ubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjf°h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjG°ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs°h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjG°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”jèŒ reftarget”j†°Œmodname”NŒ classname”Njìjï)�”}”jò]”j°Œc.linear_anon_page_index”†”asbuh1hhjG°ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢°h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjG°ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj°°h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjG°ubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hj½°h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjG°ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjC°ubj>)�”}”(hŒconst unsigned long address”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œ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=hjC°ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjõ¯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ŒKDetermine the absolute anonymous page offset of **address** within **vma**.”h]”(hŒ0Determine the absolute anonymous page offset of ”…”�”}”(hjS±h²hh³Nh´NubjŽ)�”}”(hŒ **address**”h]”hŒaddress”…”�”}”(hj[±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjS±ubhŒ within ”…”�”}”(hjS±h²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjm±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjS±ubhŒ.”…”�”}”(hjS±h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MPhjP±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üQh³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Ž)�”}”(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:98: ./include/linux/pagemap.h”h´MThj“±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)�”}”(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:98: ./include/linux/pagemap.h”h´MRhj²±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´MRhjαubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj²±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jͱh´MRhj¯±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:98: ./include/linux/pagemap.h”h´MShjý±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´MShj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjý±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j²h´MShj¯±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:98: ./include/linux/pagemap.h”h´MUhj“±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 ”…”�”}”(hjT²h²hh³Nh´NubjŽ)�”}”(hŒ **address**”h]”hŒaddress”…”�”}”(hj\²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjT²ubhŒW, which is the page offset the address possessed at the time the VMA was first faulted.”…”�”}”(hjT²h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MThj“±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().”…”�”}”(hju²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MWhj“±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 ”…”�”}”(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:98: ./include/linux/pagemap.h”h´MYhj“±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.”…”�”}”(hj¥²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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:98: ./include/linux/pagemap.h”h´M_hj“±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:98: ./include/linux/pagemap.h”h´M`hj“±ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_trylock (C function)”Œc.folio_trylock”hNt”auh1hÜhjüQh²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:98: ./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Žubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj[³h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjW³ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh³h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjW³ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjy³h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjv³ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j{³Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjA³sbŒc.folio_trylock”†”asbuh1hhjW³ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™³h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjW³ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj§³h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjW³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³ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj³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:98: ./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üQh³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:98: ./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:98: ./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.”…”�”}”(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´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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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.”…”�”}”(hjp´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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:98: ./include/linux/pagemap.h”h´M•hjú³ubjM)�”}”(hŒ Any context.”h]”hŒ Any context.”…”�”}”(hj—´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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:98: ./include/linux/pagemap.h”h´M˜hjú³ubjM)�”}”(hŒ+Whether the lock was successfully acquired.”h]”hŒ+Whether the lock was successfully acquired.”…”�”}”(hj¾´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M—hjú³ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_lock (C function)”Œ c.folio_lock”hNt”auh1hÜhjüQh²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:98: ./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§ubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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&µ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”jèŒ reftarget”jJµŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjµsbŒ c.folio_lock”†”asbuh1hhj&µubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhµh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj&µubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjvµh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj&µ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&]”jjuh1j7hjé´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:98: ./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üQh³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:98: ./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:98: ./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Ž)�”}”(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:98: ./include/linux/pagemap.h”h´Mªhjɵ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:98: ./include/linux/pagemap.h”h´M©hjɵ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.”…”�”}”(hjN¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M¯hjɵubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hj_¶h]”hŒContext”…”�”}”(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:98: ./include/linux/pagemap.h”h´Mµhjɵ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.”…”�”}”(hju¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M¶hjɵubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒlock_page (C function)”Œ c.lock_page”hNt”auh1hÜhjüQh²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”…”�”}”(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:98: ./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Œ lock_page”h]”j)�”}”(hŒ lock_page”h]”hŒ lock_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Äubj8)�”}”(hŒ(struct page *page)”h]”j>)�”}”(hŒstruct page *page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjá¶h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjݶubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî¶h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjݶubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÿ¶h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjü¶ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j·Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjǶsbŒ c.lock_page”†”asbuh1hhjݶubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjݶubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj-·h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjݶ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&]”jjuh1j7hj ¶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 folio containing this page.”h]”hŒ$Lock the folio containing this page.”…”�”}”(hjd·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.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üQh³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Ž)�”}”(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:98: ./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)�”}”(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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MÅhjŸ·ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page to lock.”h]”hŒThe page 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:98: ./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:98: ./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:98: ./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:98: ./include/linux/pagemap.h”h´MËhj€·ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ folio_lock_killable (C function)”Œc.folio_lock_killable”hNt”auh1hÜhjüQh²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”…”�”}”(hjL¸h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjH¸h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MÙubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[¸h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjH¸h²hh³jZ¸h´MÙubhÿ)�”}”(hŒfolio_lock_killable”h]”j)�”}”(hŒfolio_lock_killable”h]”hŒfolio_lock_killable”…”�”}”(hjm¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhji¸ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjH¸h²hh³jZ¸h´MÙubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj‰¸h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj…¸ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–¸h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj…¸ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj§¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤¸ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j©¸Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjo¸sbŒc.folio_lock_killable”†”asbuh1hhj…¸ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjǸh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj…¸ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÕ¸h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj…¸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&]”jjuh1j7hjH¸h²hh³jZ¸h´MÙubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjD¸h²hh³jZ¸h´MÙubah}”(h]”j?¸ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jZ¸h´MÙhjA¸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:98: ./include/linux/pagemap.h”h´MÙhj ¹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjA¸h²hh³jZ¸h´MÙubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj$¹jHj$¹jI‰jJ‰jK‰uh1híh²hhjüQh³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”…”�”}”(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:98: ./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)�”}”(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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MÚhjG¹ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to lock.”h]”hŒThe folio to lock.”…”�”}”(hjf¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jb¹h´MÚhjc¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjG¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jb¹h´MÚhjD¹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:98: ./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.”…”�”}”(hjž¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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:98: ./include/linux/pagemap.h”h´MÞhj(¹ubjM)�”}”(hŒMay sleep; see folio_lock().”h]”hŒMay sleep; see folio_lock().”…”�”}”(hjŹh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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:98: ./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:98: ./include/linux/pagemap.h”h´Màhj(¹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²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üQh²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:98: ./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Œ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&]”uh1jhj7ºubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjºh²hh³j(ºh´MSubj8)�”}”(hŒC(struct address_space *mapping, loff_t start_byte, loff_t end_byte)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjWºh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjSºubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdºh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjSºubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjuºh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjrºubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jwºŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj=ºsbŒc.filemap_range_needs_writeback”†”asbuh1hhjSºubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•ºh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjSºubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj£ºh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjSº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Œ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”jèŒ reftarget”jκŒmodname”NŒ classname”Njìjï)�”}”jò]”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Œ 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=hjOº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”jèŒ reftarget”j»Œmodname”NŒ classname”Njìjï)�”}”jò]”j‘ºŒc.filemap_range_needs_writeback”†”asbuh1hhj »ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2»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=hjOºubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjº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Œ*check if range potentially needs writeback”h]”hŒ*check if range potentially needs writeback”…”�”}”(hjj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MShjg»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üQh³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�hjŠ»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MWhj†»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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MThj¥»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´MThjÁ»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¥»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÀ»h´MThj¢»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:98: ./include/linux/pagemap.h”h´MUhjÞ»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´MUhjú»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÞ»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jù»h´MUhj¢»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:98: ./include/linux/pagemap.h”h´MVhj¼ubjÉ)�”}”(hhh]”jM)�”}”(hŒ0offset in bytes where the range ends (inclusive)”h]”hŒ0offset in bytes where the range ends (inclusive)”…”�”}”(hj6¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j2¼h´MVhj3¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j2¼h´MVhj¢»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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MXhj†»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.”…”�”}”(hjn¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MWhj†»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:98: ./include/linux/pagemap.h”h´M\hj†»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”…”�”}”(hj™¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj•¼ubhŒg if the caller should do filemap_write_and_wait_range() before doing O_DIRECT to a page in this 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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M]hj†»ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒreadahead_control (C struct)”Œc.readahead_control”hNt”auh1hÜhjüQh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒreadahead_control”h]”hù)�”}”(hŒstruct readahead_control”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjä¼h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjà¼h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.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Œ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´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Œ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:98: ./include/linux/pagemap.h”h´Mmhj#½h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÙ¼h²hh³jñ¼h´Mcubeh}”(h]”h ]”(jAŒstruct”eh"]”h$]”h&]”jFjAjGj>½jHj>½jI‰jJ‰jK‰uh1híh²hhjüQh³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”…”�”}”(hjJ½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjF½ubhŒ:”…”�”}”(hjF½h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MqhjB½ubj7 )�”}”(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; };”…”�”}”hjc½sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j6 h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MshjB½ubjM)�”}”(hŒ **Members**”h]”jŽ)�”}”(hjt½h]”hŒMembers”…”�”}”(hjv½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjr½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MyhjB½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)�”}”(hj“½h]”hŒfile”…”�”}”(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:98: ./include/linux/pagemap.h”h´Myhj�½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:98: ./include/linux/pagemap.h”h´Mxhj©½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¨½h´Myhjн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&]”uh1jRhj˽ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mzhjǽ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´Mzhjã½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjǽubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jâ½h´Mzhjн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:98: ./include/linux/pagemap.h”h´Mzhj¾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:98: ./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´Mzhjнubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjB½ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjI¾h]”hŒ Description”…”�”}”(hjK¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjG¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M~hjüQh²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:98: ./include/linux/pagemap.h”h´MnhjüQh²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.”…”�”}”(hjn¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MshjüQh²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ&page_cache_sync_readahead (C function)”Œc.page_cache_sync_readahead”hNt”auh1hÜhjüQh²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”…”�”}”(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:98: ./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Œpage_cache_sync_readahead”h]”j)�”}”(hŒpage_cache_sync_readahead”h]”hŒpage_cache_sync_readahead”…”�”}”(hj·¾h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj³¾ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj’¾h²hh³j¤¾h´M�ubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÓ¾h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjϾubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjà¾h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjϾubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jó¾Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj¹¾sbŒc.page_cache_sync_readahead”†”asbuh1hhjϾubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjϾubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjϾ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 file_ra_state *ra”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjE¿h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjA¿ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjR¿h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjA¿ubh)�”}”(hhh]”j)�”}”(hŒ file_ra_state”h]”hŒ file_ra_state”…”�”}”(hjc¿h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj`¿ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”je¿Œmodname”NŒ classname”Njìjï)�”}”jò]”j ¿Œc.page_cache_sync_readahead”†”asbuh1hhjA¿ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�¿h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjA¿ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj�¿h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjA¿ubj)�”}”(hŒra”h]”hŒra”…”�”}”(hjœ¿h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjA¿ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj˾ubj>)�”}”(hŒstruct file *file”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjµ¿h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj±¿ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj±¿ubh)�”}”(hhh]”j)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjÓ¿h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjпubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÕ¿Œmodname”NŒ classname”Njìjï)�”}”jò]”j ¿Œc.page_cache_sync_readahead”†”asbuh1hhj±¿ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñ¿h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj±¿ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÿ¿h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj±¿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Œ 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”jèŒ reftarget”j*ÀŒmodname”NŒ classname”Njìjï)�”}”jò]”j ¿Œc.page_cache_sync_readahead”†”asbuh1hhj!Àubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFÀh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj!Àubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(hjTÀh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj!Àubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj˾ubj>)�”}”(hŒunsigned long req_count”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjmÀh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjiÀubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{Àh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjiÀubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj‰Àh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjiÀubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—Àh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjiÀubj)�”}”(hŒ req_count”h]”hŒ req_count”…”�”}”(hj¥Àh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjiÀubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj˾ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj’¾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Œ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:98: ./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üQh³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:98: ./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:98: ./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)�”}”(hjIÁh]”hŒstruct file_ra_state *ra”…”�”}”(hjKÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjGÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MŸhjCÁubjÉ)�”}”(hhh]”jM)�”}”(hŒ-file_ra_state which holds the readahead state”h]”hŒ-file_ra_state which holds the readahead state”…”�”}”(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ŒA``struct file *file`` Used by the filesystem for authentication. ”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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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.”…”�”}”(hj›Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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``pgoff_t index`` Index of first page to be 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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M¡hjµÁ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ÈhjµÁ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:98: ./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”…”�”}”(hj1Â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:98: ./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.”…”�”}”(hjEÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M£hjëÀubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²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üQh²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”…”�”}”(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:98: ./include/linux/pagemap.h”h´M³ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒÂh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjpÂh²hh³j‚Âh´M³ubhÿ)�”}”(hŒpage_cache_async_readahead”h]”j)�”}”(hŒpage_cache_async_readahead”h]”hŒpage_cache_async_readahead”…”�”}”(hj•Âh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‘Âubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjpÂh²hh³j‚Âh´M³ubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj±Âh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj­Âubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾Âh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj­Âubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jÑÂŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj—ÂsbŒc.page_cache_async_readahead”†”asbuh1hhj­Âubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïÂh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj­Âubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjýÂh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj­Â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 file_ra_state *ra”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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Ãubh)�”}”(hhh]”j)�”}”(hŒ file_ra_state”h]”hŒ file_ra_state”…”�”}”(hjAÃh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>Ãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jCÃŒmodname”NŒ classname”Njìjï)�”}”jò]”jëÂŒc.page_cache_async_readahead”†”asbuh1hhjÃubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_Ãh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÃubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjmÃh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÃubj)�”}”(hŒra”h]”hŒra”…”�”}”(hjzÃ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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj“Ãh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj�Ãubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Ãh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�Ãubh)�”}”(hhh]”j)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj±Ãh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj®Ãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j³ÃŒmodname”NŒ classname”Njìjï)�”}”jò]”jëÂŒc.page_cache_async_readahead”†”asbuh1hhj�Ãubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏÃh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�Ãubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÝÃh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj�Ã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Œstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÿÃubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÿÃubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj!Äh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÄubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j#ÄŒmodname”NŒ classname”Njìjï)�”}”jò]”jëÂŒc.page_cache_async_readahead”†”asbuh1hhjÿÃubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?Äh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÿÃubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjMÄh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÿÃubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjZÄh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÿÃubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj©Âubj>)�”}”(hŒunsigned long req_count”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Œ req_count”h]”hŒ req_count”…”�”}”(hj«Äh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjoÄubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj©Âubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjpÂh²hh³j‚Âh´M³ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjlÂh²hh³j‚Âh´M³ubah}”(h]”jgÂah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j‚Âh´M³hjiÂ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:98: ./include/linux/pagemap.h”h´M³hjÒÄh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjiÂh²hh³j‚Âh´M³ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjíÄjHjíÄjI‰jJ‰jK‰uh1híh²hhjüQh³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:98: ./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:98: ./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)�”}”(hjOÅh]”hŒstruct file_ra_state *ra”…”�”}”(hjQÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjMÅubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MµhjIÅubjÉ)�”}”(hhh]”jM)�”}”(hŒ-file_ra_state which holds the readahead state”h]”hŒ-file_ra_state which holds the readahead state”…”�”}”(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ŒA``struct file *file`` Used by the filesystem for authentication. ”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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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.”…”�”}”(hj¡Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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 folio *folio`` The folio which triggered the readahead call. ”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:98: ./include/linux/pagemap.h”h´M·hj»Å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Èhj»Å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:98: ./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Ž)�”}”(hj5Æh]”hŒ Description”…”�”}”(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:98: ./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.”…”�”}”(hjKÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M¹hjñÄubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒreadahead_folio (C function)”Œc.readahead_folio”hNt”auh1hÜhjüQh²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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjzÆh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjvÆh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”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)�”}”(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”jèŒ reftarget”j›ÆŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒreadahead_folio”sbŒc.readahead_folio”†”asbuh1hhjvÆh²hh³j‡Æh´Mèubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºÆh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjvÆh²hh³j‡Æh´Mèubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÈÆh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjvÆh²hh³j‡Æh´Mèubhÿ)�”}”(hŒreadahead_folio”h]”j)�”}”(hj·Æh]”hŒreadahead_folio”…”�”}”(hjÙÆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕÆubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjvÆh²hh³j‡Æh´Mèubj8)�”}”(hŒ!(struct readahead_control *ractl)”h]”j>)�”}”(hŒstruct readahead_control *ractl”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjôÆh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjðÆubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjðÆubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jÇŒmodname”NŒ classname”Njìjï)�”}”jò]”jµÆŒc.readahead_folio”†”asbuh1hhjðÆubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0Çh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjðÆubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj>Çh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjðÆubj)�”}”(hŒractl”h]”hŒractl”…”�”}”(hjKÇ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&]”jjuh1j7hjvÆ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ŒGet the next folio to read.”h]”hŒGet the next folio to read.”…”�”}”(hjuÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MèhjrÇ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üQh³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Ž)�”}”(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:98: ./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)�”}”(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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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³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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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:98: ./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:98: ./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”…”�”}”(hj6È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:98: ./include/linux/pagemap.h”h´Míhj‘Çubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!readahead_folio_last (C function)”Œc.readahead_folio_last”hNt”auh1hÜhjüQh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒEstruct folio * readahead_folio_last (struct readahead_control *ractl)”h]”hù)�”}”(hŒCstruct folio *readahead_folio_last(struct readahead_control *ractl)”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjoÈh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjkÈh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”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)�”}”(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”jèŒ reftarget”j�ÈŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒreadahead_folio_last”sbŒc.readahead_folio_last”†”asbuh1hhjkÈh²hh³j|Èh´Mùubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯Èh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjkÈh²hh³j|Èh´Mùubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj½Èh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjkÈh²hh³j|Èh´Mùubhÿ)�”}”(hŒreadahead_folio_last”h]”j)�”}”(hj¬Èh]”hŒreadahead_folio_last”…”�”}”(hjÎÈh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÊÈubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjkÈh²hh³j|Èh´Mùubj8)�”}”(hŒ!(struct readahead_control *ractl)”h]”j>)�”}”(hŒstruct readahead_control *ractl”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjéÈh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjåÈubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöÈh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjåÈubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”j ÉŒmodname”NŒ classname”Njìjï)�”}”jò]”jªÈŒc.readahead_folio_last”†”asbuh1hhjåÈubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%Éh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjåÈubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj3Éh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjåÈ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&]”jjuh1j7hjkÈ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Œ*Get the next folio to read, from the tail.”h]”hŒ*Get the next folio to read, from the tail.”…”�”}”(hjjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MùhjgÉ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üQh³Nh´Nubj„)�”}”(hXŸ**Parameters** ``struct readahead_control *ractl`` The current readahead request. **Description** Like readahead_folio(), but walks the range back-to-front. The folio is returned locked with its refcount dropped; the caller unlocks it once I/O completes. Compound folios are returned once, at their head index. **Context** The folio is locked. **Return** A pointer to the next folio, or ``NULL`` when 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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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)�”}”(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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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³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:98: ./include/linux/pagemap.h”h´Mühj†ÉubjM)�”}”(hŒÔLike readahead_folio(), but walks the range back-to-front. The folio is returned locked with its refcount dropped; the caller unlocks it once I/O completes. Compound folios are returned once, at their head index.”h]”hŒÔLike readahead_folio(), but walks the range back-to-front. The folio is returned locked with its refcount dropped; the caller unlocks it once I/O completes. Compound folios are returned once, at their head index.”…”�”}”(hjüÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./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:98: ./include/linux/pagemap.h”h´Mÿhj†ÉubjM)�”}”(hŒThe folio is locked.”h]”hŒThe folio is locked.”…”�”}”(hj#Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mhj†ÉubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj4Êh]”hŒReturn”…”�”}”(hj6Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj2Êubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mhj†ÉubjM)�”}”(hŒ3A pointer to the next folio, or ``NULL`` when done.”h]”(hŒ A pointer to the next folio, or ”…”�”}”(hjJÊh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjRÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjJÊubhŒ when done.”…”�”}”(hjJÊh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mhj†Éubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒreadahead_pos (C function)”Œc.readahead_pos”hNt”auh1hÜhjüQh²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”jèŒ reftarget”j�ÊŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒ readahead_pos”sbŒc.readahead_pos”†”asbuh1hhj‡Êh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M5ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°Êh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”•3h$]”h&]”uh1jòhj‡Êh²hh³j¯Êh´M5ubhÿ)�”}”(hŒ readahead_pos”h]”j)�”}”(hj¬Êh]”hŒ readahead_pos”…”�”}”(hjÂÊh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾Êubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj‡Êh²hh³j¯Êh´M5ubj8)�”}”(hŒ%(const struct readahead_control *rac)”h]”j>)�”}”(hŒ#const struct readahead_control *rac”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjøÊh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÙÊubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÙÊubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jËŒmodname”NŒ classname”Njìjï)�”}”jò]”jªÊŒc.readahead_pos”†”asbuh1hhjÙÊubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4Ëh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÙÊubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjBËh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÙÊubj)�”}”(hŒrac”h]”hŒrac”…”�”}”(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&]”jjuh1j7hj‡Êh²hh³j¯Êh´M5ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjƒÊh²hh³j¯Êh´M5ubah}”(h]”j~Êah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¯Êh´M5hj€Ê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.”…”�”}”(hjyËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M5hjvËh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj€Êh²hh³j¯Êh´M5ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj‘ËjHj‘ËjI‰jJ‰jK‰uh1híh²hhjüQh³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:98: ./include/linux/pagemap.h”h´M9hj•Ë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:98: ./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:98: ./include/linux/pagemap.h”h´M6hjÐË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üQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒreadahead_length (C function)”Œc.readahead_length”hNt”auh1hÜhjüQh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ=size_t readahead_length (const struct readahead_control *rac)”h]”hù)�”}”(hŒubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9Ìh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÌh²hh³j8Ìh´M>ubhÿ)�”}”(hŒreadahead_length”h]”j)�”}”(hj5Ìh]”hŒreadahead_length”…”�”}”(hjKÌh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjGÌubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÌh²hh³j8Ìh´M>ubj8)�”}”(hŒ%(const struct readahead_control *rac)”h]”j>)�”}”(hŒ#const struct readahead_control *rac”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjfÌh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjbÌubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsÌh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjbÌubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj�Ìh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjbÌubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽÌh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjbÌ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”jèŒ reftarget”j¡ÌŒmodname”NŒ classname”Njìjï)�”}”jò]”j3ÌŒc.readahead_length”†”asbuh1hhjbÌubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½Ìh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjbÌubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjËÌh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjbÌubj)�”}”(hŒrac”h]”hŒrac”…”�”}”(hjØÌh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjbÌubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj^Ìubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÌh²hh³j8Ìh´M>ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj Ìh²hh³j8Ìh´M>ubah}”(h]”jÌah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j8Ìh´M>hj Ìh²hubj4)�”}”(hhh]”jM)�”}”(hŒ.The number of bytes in this readahead request.”h]”hŒ.The number of bytes 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:98: ./include/linux/pagemap.h”h´M>hjÿÌh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj Ìh²hh³j8Ìh´M>ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÍjHjÍjI‰jJ‰jK‰uh1híh²hhjüQh³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:98: ./include/linux/pagemap.h”h´MBhjÍubj¤)�”}”(hhh]”j©)�”}”(hŒ>``const struct readahead_control *rac`` The readahead request.”h]”(j¯)�”}”(hŒ'``const struct readahead_control *rac``”h]”jS)�”}”(hjCÍh]”hŒ#const struct readahead_control *rac”…”�”}”(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:98: ./include/linux/pagemap.h”h´MDhj=Í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:98: ./include/linux/pagemap.h”h´M?hjYÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj=Íubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jXÍh´MDhj:Íubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÍubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒreadahead_index (C function)”Œc.readahead_index”hNt”auh1hÜhjüQh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ=pgoff_t readahead_index (const struct readahead_control *rac)”h]”hù)�”}”(hŒ)�”}”(hŒ#const struct readahead_control *rac”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj Îh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjëÍubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjëÍubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”j*ÎŒmodname”NŒ classname”Njìjï)�”}”jò]”j¼ÍŒc.readahead_index”†”asbuh1hhjëÍubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFÎh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjëÍubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjTÎh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjëÍubj)�”}”(hŒrac”h]”hŒrac”…”�”}”(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&]”jjuh1j7hj™Í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Œ6The index of the first page in this readahead request.”h]”hŒ6The index of the first page 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:98: ./include/linux/pagemap.h”h´MGhjˆÎh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj’Íh²hh³jÁÍh´MGubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj£ÎjHj£ÎjI‰jJ‰jK‰uh1híh²hhjüQh³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:98: ./include/linux/pagemap.h”h´MKhj§Î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:98: ./include/linux/pagemap.h”h´MMhjÆÎ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:98: ./include/linux/pagemap.h”h´MHhjâÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÆÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jáÎh´MMhjÃÎubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj§Îubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒreadahead_count (C function)”Œc.readahead_count”hNt”auh1hÜhjüQh²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:98: ./include/linux/pagemap.h”h´MPubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5Ïh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj"Ïh²hh³j4Ïh´MPubjá)�”}”(hŒint”h]”hŒint”…”�”}”(hjCÏh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj"Ïh²hh³j4Ïh´MPubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQÏh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj"Ïh²hh³j4Ïh´MPubhÿ)�”}”(hŒreadahead_count”h]”j)�”}”(hŒreadahead_count”h]”hŒreadahead_count”…”�”}”(hjcÏh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj_Ïubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj"Ïh²hh³j4Ïh´MPubj8)�”}”(hŒ%(const struct readahead_control *rac)”h]”j>)�”}”(hŒ#const struct readahead_control *rac”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjšÏh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj{Ïubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§Ïh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj{Ïubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jºÏŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjeÏsbŒc.readahead_count”†”asbuh1hhj{Ïubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØÏh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj{Ïubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjæÏh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj{Ï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=hjwÏubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj"Ïh²hh³j4Ïh´MPubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÏh²hh³j4Ïh´MPubah}”(h]”jÏah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j4Ïh´MPhjÏ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:98: ./include/linux/pagemap.h”h´MPhjÐh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÏh²hh³j4Ïh´MPubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj5ÐjHj5ÐjI‰jJ‰jK‰uh1híh²hhjüQh³Nh´Nubj„)�”}”(hŒP**Parameters** ``const struct readahead_control *rac`` The readahead request.”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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MThj9Ð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:98: ./include/linux/pagemap.h”h´MVhjXÐubjÉ)�”}”(hhh]”jM)�”}”(hŒThe readahead request.”h]”hŒThe readahead request.”…”�”}”(hjwÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MQhjtÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjXÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jsÐh´MVhjUÐubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj9Ðubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ#readahead_batch_length (C function)”Œc.readahead_batch_length”hNt”auh1hÜhjüQh²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”…”�”}”(hj»Ðh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¸Ðubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j½ÐŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒreadahead_batch_length”sbŒc.readahead_batch_length”†”asbuh1hhj´Ðh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MYubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝÐh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj´Ðh²hh³jÜÐh´MYubhÿ)�”}”(hŒreadahead_batch_length”h]”j)�”}”(hjÙÐh]”hŒreadahead_batch_length”…”�”}”(hjïÐh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjëÐubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj´Ðh²hh³jÜÐh´MYubj8)�”}”(hŒ%(const struct readahead_control *rac)”h]”j>)�”}”(hŒ#const struct readahead_control *rac”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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Ñubh)�”}”(hhh]”j)�”}”(hŒreadahead_control”h]”hŒreadahead_control”…”�”}”(hjCÑh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj@Ñubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jEÑŒmodname”NŒ classname”Njìjï)�”}”jò]”j×ÐŒc.readahead_batch_length”†”asbuh1hhjÑubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjaÑh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÑubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjoÑh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÑ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&]”jjuh1j7hj´Ðh²hh³jÜÐh´MYubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj°Ðh²hh³jÜÐh´MYubah}”(h]”j«Ðah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÜÐh´MYhj­Ðh²hubj4)�”}”(hhh]”jM)�”}”(hŒ)The number of bytes in the current batch.”h]”hŒ)The number of bytes in the current batch.”…”�”}”(hj¦Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MYhj£Ñh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj­Ðh²hh³jÜÐh´MYubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¾ÑjHj¾ÑjI‰jJ‰jK‰uh1híh²hhjüQh³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:98: ./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:98: ./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:98: ./include/linux/pagemap.h”h´MZhjýÑ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üQh²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üQh²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”…”�”}”(hjDÒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjAÒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jFÒŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒfolio_mkwrite_check_truncate”sbŒc.folio_mkwrite_check_truncate”†”asbuh1hhj=Òh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mhubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfÒh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj=Òh²hh³jeÒh´Mhubhÿ)�”}”(hŒfolio_mkwrite_check_truncate”h]”j)�”}”(hjbÒh]”hŒfolio_mkwrite_check_truncate”…”�”}”(hjxÒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjtÒubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj=Òh²hh³jeÒh´Mhubj8)�”}”(hŒ6(const struct folio *folio, const struct inode *inode)”h]”(j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj®Òh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj�Òubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»Òh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�Òubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÌÒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÉÒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÎÒŒmodname”NŒ classname”Njìjï)�”}”jò]”j`ÒŒc.folio_mkwrite_check_truncate”†”asbuh1hhj�Òubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêÒh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�Òubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjøÒh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj�Ò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]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj9Ó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Óubh)�”}”(hhh]”j)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjWÓh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjTÓubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jYÓŒmodname”NŒ classname”Njìjï)�”}”jò]”j`ÒŒc.folio_mkwrite_check_truncate”†”asbuh1hhjÓubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuÓh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÓubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjƒÓh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÓ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&]”jjuh1j7hj=Òh²hh³jeÒh´Mhubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj9Òh²hh³jeÒh´Mhubah}”(h]”j4Òah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jeÒh´Mhhj6Òh²hubj4)�”}”(hhh]”jM)�”}”(hŒcheck if folio was truncated”h]”hŒcheck if 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:98: ./include/linux/pagemap.h”h´Mhhj·Óh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj6Òh²hh³jeÒh´Mhubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÒÓjHjÒÓjI‰jJ‰jK‰uh1híh²hhjüQh³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Ž)�”}”(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:98: ./include/linux/pagemap.h”h´MlhjÖÓ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:98: ./include/linux/pagemap.h”h´MihjõÓ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´MihjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjõÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÔh´MihjòÓubj©)�”}”(hŒC``const struct inode *inode`` the inode to check the folio against ”h]”(j¯)�”}”(hŒ``const struct inode *inode``”h]”jS)�”}”(hj4Ôh]”hŒconst struct inode *inode”…”�”}”(hj6Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj2Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´Mjhj.ÔubjÉ)�”}”(hhh]”jM)�”}”(hŒ$the inode to check the folio against”h]”hŒ$the inode to check the folio against”…”�”}”(hjMÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jIÔh´MjhjJÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj.Ôubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jIÔh´MjhjòÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MlhjÖÓ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:98: ./include/linux/pagemap.h”h´MlhjÖÓubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²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üQh²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”…”�”}”(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:98: ./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Œ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þhj°Ôh²hh³jÂÔh´M„ubj8)�”}”(hŒ6(const struct inode *inode, const struct folio *folio)”h]”(j>)�”}”(hŒconst struct inode *inode”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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 Õubh)�”}”(hhh]”j)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjFÕh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjCÕubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jHÕŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjóÔsbŒc.i_blocks_per_folio”†”asbuh1hhj Õubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfÕh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj Õubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjtÕh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj Õ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]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjµÕh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj–Õubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂÕh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj–Õubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÓÕh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÐÕubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÕÕŒmodname”NŒ classname”Njìjï)�”}”jò]”jbÕŒc.i_blocks_per_folio”†”asbuh1hhj–Õubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñÕh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj–Õubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÿÕh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj–Õ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&]”jjuh1j7hj°Ô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Œ"How many blocks fit in this folio.”h]”hŒ"How many blocks fit in this folio.”…”�”}”(hj6Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M„hj3Öh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj©Ôh²hh³jÂÔh´M„ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjNÖjHjNÖjI‰jJ‰jK‰uh1híh²hhjüQh³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Ž)�”}”(hjXÖh]”hŒ Parameters”…”�”}”(hjZÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjVÖubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MˆhjRÖubj¤)�”}”(hhh]”(j©)�”}”(hŒC``const struct inode *inode`` The inode which contains the blocks. ”h]”(j¯)�”}”(hŒ``const struct inode *inode``”h]”jS)�”}”(hjwÖh]”hŒconst struct inode *inode”…”�”}”(hjyÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjuÖubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M…hjqÖ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ÈhjqÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŒÖh´M…hjnÖubj©)�”}”(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:98: ./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³jÅÖh´M†hjÆÖubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjªÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÅÖh´M†hjnÖubeh}”(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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MˆhjRÖ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:98: ./include/linux/pagemap.h”h´M‡hjRÖ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:98: ./include/linux/pagemap.h”h´M‰hjRÖ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:98: ./include/linux/pagemap.h”h´MŠhjRÖubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj9×h]”hŒReturn”…”�”}”(hj;×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj7×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´M�hjRÖubjM)�”}”(hŒ6The number of filesystem blocks covered by this folio.”h]”hŒ6The number of filesystem blocks covered by this folio.”…”�”}”(hjO×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:98: ./include/linux/pagemap.h”h´MŒhjRÖubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjüQh²hh³Nh´Nubeh}”(h]”Œtruncate”ah ]”h"]”Œtruncate”ah$]”h&]”uh1hµhjËh²hh³hÊh´K]ubeh}”(h]”Œfile-mapping-and-page-cache”ah ]”h"]”Œfile mapping and page cache”ah$]”h&]”uh1hµhh·h²hh³hÊh´KDubh¶)�”}”(hhh]”(h»)�”}”(hŒ Memory pools”h]”hŒ Memory pools”…”�”}”(hjx×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhju×h²hh³hÊh´KfubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmempool_exit (C function)”Œc.mempool_exit”hNt”auh1hÜhju×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”…”�”}”(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:104: ./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_exit”h]”j)�”}”(hŒ mempool_exit”h]”hŒ mempool_exit”…”�”}”(hjÀ×h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¼×ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj›×h²hh³j­×h´KÏubj8)�”}”(hŒ(struct mempool *pool)”h]”j>)�”}”(hŒstruct mempool *pool”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÜ×h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjØ×ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé×h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjØ×ubh)�”}”(hhh]”j)�”}”(hŒmempool”h]”hŒmempool”…”�”}”(hjú×h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj÷×ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jü׌modname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÂ×sbŒc.mempool_exit”†”asbuh1hhjØ×ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjØ×ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj(Øh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjØ×ubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hj5Ø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&]”jjuh1j7hj›×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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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&]”jFjAjGjwØjHjwØjI‰jJ‰jK‰uh1híh²hhju×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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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)�”}”(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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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().”…”�”}”(hj¹Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´KÕhj{Øubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhju×h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmempool_destroy (C function)”Œc.mempool_destroy”hNt”auh1hÜhju×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”…”�”}”(hjTÙh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjPÙh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´Kåubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcÙh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjPÙh²hh³jbÙh´Kåubhÿ)�”}”(hŒmempool_destroy”h]”j)�”}”(hŒmempool_destroy”h]”hŒmempool_destroy”…”�”}”(hjuÙh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjqÙubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjPÙh²hh³jbÙh´Kåubj8)�”}”(hŒ(struct mempool *pool)”h]”j>)�”}”(hŒstruct mempool *pool”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj‘Ùh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj�Ùubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžÙh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�Ùubh)�”}”(hhh]”j)�”}”(hŒmempool”h]”hŒmempool”…”�”}”(hj¯Ùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¬Ùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j±ÙŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjwÙsbŒc.mempool_destroy”†”asbuh1hhj�Ùubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏÙh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�Ùubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÝÙh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj�Ù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&]”jjuh1j7hjPÙh²hh³jbÙh´Kåubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjLÙh²hh³jbÙh´Kåubah}”(h]”jGÙah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jbÙh´KåhjIÙ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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´KåhjÚh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjIÙh²hh³jbÙh´Kåubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj,ÚjHj,ÚjI‰jJ‰jK‰uh1híh²hhju×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Ž)�”}”(hj6Úh]”hŒ Parameters”…”�”}”(hj8Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj4Úubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´Kéhj0Ú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)�”}”(hjUÚh]”hŒstruct mempool *pool”…”�”}”(hjWÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjSÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´KçhjOÚ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().”…”�”}”(hjnÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´KæhjkÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjOÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jjÚh´KçhjLÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj0Ú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:104: ./mm/mempool.c”h´Kéhj0Ú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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´Kèhj0Úubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhju×h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmempool_init (C function)”Œc.mempool_init”hNt”auh1hÜhju×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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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´Mubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj7Ûh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj3Ûubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDÛh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj3Ûubh)�”}”(hhh]”j)�”}”(hŒmempool”h]”hŒmempool”…”�”}”(hjUÛh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjRÛubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jWÛŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÛsbŒc.mempool_init”†”asbuh1hhj3Ûubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuÛh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj3Ûubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjƒÛh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj3Ûubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hj�Ûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3Û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à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”jèŒ reftarget”jãÛŒmodname”NŒ classname”Njìjï)�”}”jò]”jqÛŒc.mempool_init”†”asbuh1hhjÚÛubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿÛh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÚÛubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj Üh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÚÛubj)�”}”(hŒalloc_fn”h]”hŒalloc_fn”…”�”}”(hjÜ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”…”�”}”(hj6Üh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3Üubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j8ÜŒmodname”NŒ classname”Njìjï)�”}”jò]”jqÛŒc.mempool_init”†”asbuh1hhj/Üubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTÜh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj/Üubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjbÜh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj/Üubj)�”}”(hŒfree_fn”h]”hŒfree_fn”…”�”}”(hjoÜ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„Üubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¤Üh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj„Ü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/Ûubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjöÚ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”…”�”}”(hjÛÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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²hhju×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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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”…”�”}”(hj5Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j1Ýh´Mhj2Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÝubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j1Ý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)�”}”(hjUÝh]”hŒ int min_nr”…”�”}”(hjWÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjSÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´M hjOÝ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.”…”�”}”(hjnÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´MhjkÝubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjOÝubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jjÝ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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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³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Œ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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´M"hjÂÝ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´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``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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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).”…”�”}”(hjRÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´M$hj÷ÜubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjcÞh]”hŒReturn”…”�”}”(hjeÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjaÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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&]”uh1jRhjyÞubhŒ+ on success, negative error code otherwise.”…”�”}”(hjyÞh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´M(hj÷Üubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhju×h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ mempool_create_node (C function)”Œc.mempool_create_node”hNt”auh1hÜhju×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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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:104: ./mm/mempool.c”h´M5ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄÞh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj²Þh²hh³jÃÞh´M5ubh)�”}”(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”jèŒ reftarget”j×ÞŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒmempool_create_node”sbŒc.mempool_create_node”†”asbuh1hhj²Þh²hh³jÃÞh´M5ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöÞh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj²Þh²hh³jÃÞh´M5ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj²Þh²hh³jÃÞ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þhj²Þh²hh³jÃÞh´M5ubj8)�”}”(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”…”�”}”(hj0ß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”…”�”}”(hjLß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”…”�”}”(hjhßh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjeßubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jjߌmodname”NŒ classname”Njìjï)�”}”jò]”jñÞŒc.mempool_create_node”†”asbuh1hhjaßubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†ßh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjaßubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj”ßh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjaßubj)�”}”(hŒalloc_fn”h]”hŒalloc_fn”…”�”}”(hj¡ßh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjaß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”jèŒ reftarget”j¿ßŒmodname”NŒ classname”Njìjï)�”}”jò]”jñÞŒc.mempool_create_node”†”asbuh1hhj¶ßubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛßh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¶ßubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjéßh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¶ß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 àubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj+àh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj àubj)�”}”(hŒ pool_data”h]”hŒ pool_data”…”�”}”(hj8à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”…”�”}”(hjTàh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjQàubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jVàŒmodname”NŒ classname”Njìjï)�”}”jò]”jñÞŒc.mempool_create_node”†”asbuh1hhjMàubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjràh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjMàubj)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hj€àh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjMà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”…”�”}”(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&]”jjuh1j7hj²Þh²hh³jÃÞh´M5ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj®Þh²hh³jÃÞh´M5ubah}”(h]”j©Þah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÃÞh´M5hj«Þh²hubj4)�”}”(hhh]”jM)�”}”(hŒcreate a memory pool”h]”hŒcreate a memory pool”…”�”}”(hjßàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´M5hjÜàh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj«Þh²hh³jÃÞh´M5ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj÷àjHj÷àjI‰jJ‰jK‰uh1híh²hhju×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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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.”…”�”}”(hj9áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´M6hj6áubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjáubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j5á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)�”}”(hjZáh]”hŒmempool_alloc_t *alloc_fn”…”�”}”(hj\áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjXáubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´M8hjTáubjÉ)�”}”(hhh]”jM)�”}”(hŒ)user-defined element-allocation function.”h]”hŒ)user-defined element-allocation function.”…”�”}”(hjsáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³joáh´M8hjpáubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjTáubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³joá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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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”…”�”}”(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:104: ./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á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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´M<hj8âubjÉ)�”}”(hhh]”jM)�”}”(hŒnuma node to allocate on”h]”hŒnuma node to allocate on”…”�”}”(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<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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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 ”…”�”}”(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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´MDhjûàubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhju×h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmempool_resize (C function)”Œc.mempool_resize”hNt”auh1hÜhju×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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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[ubj8)�”}”(hŒ&(struct mempool *pool, int new_min_nr)”h]”(j>)�”}”(hŒstruct mempool *pool”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj4ãh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj0ãubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAãh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj0ãubh)�”}”(hhh]”j)�”}”(hŒmempool”h]”hŒmempool”…”�”}”(hjRãh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjOãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jTãŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjãsbŒc.mempool_resize”†”asbuh1hhj0ãubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrãh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj0ãubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj€ãh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj0ãubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hj�ãh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj0ãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj,ãubj>)�”}”(hŒint new_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Œ new_min_nr”h]”hŒ new_min_nr”…”�”}”(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&]”jjuh1j7hjóâ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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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²hhju×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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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().”…”�”}”(hjFäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”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Œ```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)�”}”(hjgäh]”hŒint new_min_nr”…”�”}”(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:104: ./mm/mempool.c”h´M_hjaä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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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.”…”�”}”(hj¹äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´Mehjä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:104: ./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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´Mjhjäubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhju×h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmempool_alloc_bulk (C function)”Œc.mempool_alloc_bulk”hNt”auh1hÜhju×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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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”…”�”}”(hjMåh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjIåubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj(åh²hh³j:åh´Mçubj8)�”}”(hŒ8(struct mempool *pool, void **elems, unsigned int count)”h]”(j>)�”}”(hŒstruct mempool *pool”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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å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”jèŒ reftarget”j‰åŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjOåsbŒc.mempool_alloc_bulk”†”asbuh1hhjeåubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§åh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjeåubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjµåh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjeåubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hjÂåh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjeåubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjaå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×åubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj÷åh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj×åubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj×åubj)�”}”(hŒelems”h]”hŒelems”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj×åubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjaå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Œ ”…”�”}”(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Œcount”h]”hŒcount”…”�”}”(hjbæ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&]”jjuh1j7hj(å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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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²hhju×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Ž)�”}”(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:104: ./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”…”�”}”(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:104: ./mm/mempool.c”h´MèhjÇæ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´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 **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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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éhjÄæ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”…”�”}”(hjAç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:104: ./mm/mempool.c”h´Mêhj9çubjÉ)�”}”(hhh]”jM)�”}”(hŒ7number of entries in **elem** that need to be allocated”h]”(hŒnumber of entries in ”…”�”}”(hjXçh²hh³Nh´NubjŽ)�”}”(hŒ**elem**”h]”hŒelem”…”�”}”(hj`çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjXçubhŒ that need to be allocated”…”�”}”(hjXçh²hh³Nh´Nubeh}”(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ê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:104: ./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 ”…”�”}”(hj¢çh²hh³Nh´NubjŽ)�”}”(hŒ **count**”h]”hŒcount”…”�”}”(hjªçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¢çubhŒ elements into ”…”�”}”(hj¢çh²hh³Nh´NubjŽ)�”}”(hŒ **elems**”h]”hŒelems”…”�”}”(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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´Mëhj¨æubjM)�”}”(hŒ@On return all **count** elements in **elems** will be populated.”h]”(hŒOn return all ”…”�”}”(hjÕçh²hh³Nh´NubjŽ)�”}”(hŒ **count**”h]”hŒcount”…”�”}”(hjÝçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÕçubhŒ elements in ”…”�”}”(hjÕçh²hh³Nh´NubjŽ)�”}”(hŒ **elems**”h]”hŒelems”…”�”}”(hjïçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÕçubhŒ will be populated.”…”�”}”(hjÕçh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´Mòhj¨æubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhju×h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmempool_alloc (C function)”Œc.mempool_alloc”hNt”auh1hÜhju×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”…”�”}”(hjOèh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjKèh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^èh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjKèh²hh³j]èh´Mubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjlèh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjKè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&]”uh1jhjyèubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjKèh²hh³j]èh´Mubj8)�”}”(hŒ&(struct mempool *pool, gfp_t gfp_mask)”h]”(j>)�”}”(hŒstruct mempool *pool”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj™èh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj•èubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦èh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj•èubh)�”}”(hhh]”j)�”}”(hŒmempool”h]”hŒmempool”…”�”}”(hj·èh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj´èubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j¹èŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjèsbŒc.mempool_alloc”†”asbuh1hhj•èubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×èh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj•èubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjåèh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj•è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”jèŒ reftarget”jéŒmodname”NŒ classname”Njìjï)�”}”jò]”jÓèŒ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&]”jjuh1j7hjKèh²hh³j]èh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjGèh²hh³j]èh´Mubah}”(h]”jBèah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j]èh´MhjDèh²hubj4)�”}”(hhh]”jM)�”}”(hŒ&allocate an element from a memory pool”h]”hŒ&allocate an element from a memory pool”…”�”}”(hjdéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´Mhjaéh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjDèh²hh³j]èh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj|éjHj|éjI‰jJ‰jK‰uh1híh²hhju×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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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”…”�”}”(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:104: ./mm/mempool.c”h´M hjŸé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´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``gfp_t gfp_mask`` GFP_* flags. ``__GFP_ZERO`` is not supported. ”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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´M!hjØé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È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:104: ./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 ”…”�”}”(hjAêh²hh³Nh´NubjŽ)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hjIêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjAê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.”…”�”}”(hjAêh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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.”…”�”}”(hjbêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´M&hj€éubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjsêh]”hŒReturn”…”�”}”(hjuêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjqêubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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”…”�”}”(hj£ê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”…”�”}”(hjµêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‰êubhŒ.”…”�”}”(hj‰êh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´M*hj€éubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhju×h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ'mempool_alloc_preallocated (C function)”Œc.mempool_alloc_preallocated”hNt”auh1hÜhju×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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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´MWubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj ëh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjêê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´MWubj8)�”}”(hŒ(struct mempool *pool)”h]”j>)�”}”(hŒstruct mempool *pool”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj8ëh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj4ëubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEëh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj4ëubh)�”}”(hhh]”j)�”}”(hŒmempool”h]”hŒmempool”…”�”}”(hjVëh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjSëubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jXëŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjësbŒc.mempool_alloc_preallocated”†”asbuh1hhj4ëubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvëh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj4ëubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj„ëh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj4ëubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(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&]”jjuh1j7hjêê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ŒIallocate an element from preallocated elements belonging to a memory pool”h]”hŒIallocate an element from preallocated elements belonging to a memory pool”…”�”}”(hj»ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´MWhj¸ëh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjãêh²hh³jüêh´MWubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÓëjHjÓëjI‰jJ‰jK‰uh1híh²hhju×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Ž)�”}”(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:104: ./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”…”�”}”(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:104: ./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£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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´M[hj×ë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.”…”�”}”(hjMìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´MZhj×ë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:104: ./mm/mempool.c”h´M^hj×ëubjM)�”}”(hŒJpointer to the allocated element or ``NULL`` if no elements are available.”h]”(hŒ$pointer to the allocated element or ”…”�”}”(hjtìh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj|ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjtìubhŒ if no elements are available.”…”�”}”(hjtìh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´M_hj×ëubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhju×h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmempool_free_bulk (C function)”Œc.mempool_free_bulk”hNt”auh1hÜhju×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”…”�”}”(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:104: ./mm/mempool.c”h´Mlubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄìh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj±ìh²hh³jÃìh´Mlubjá)�”}”(hŒint”h]”hŒint”…”�”}”(hjÒìh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj±ìh²hh³jÃìh´Mlubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàìh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj±ìh²hh³jÃì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þhj±ìh²hh³jÃìh´Mlubj8)�”}”(hŒ8(struct mempool *pool, void **elems, unsigned int count)”h]”(j>)�”}”(hŒstruct mempool *pool”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj íubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj íubh)�”}”(hhh]”j)�”}”(hŒmempool”h]”hŒmempool”…”�”}”(hj,íh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj)íubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j.íŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjôìsbŒc.mempool_free_bulk”†”asbuh1hhj íubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLíh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj íubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjZíh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj íubj)�”}”(hŒpool”h]”hŒpool”…”�”}”(hjgí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|íubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjœíh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj|íubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj©íh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj|íubj)�”}”(hŒelems”h]”hŒelems”…”�”}”(hj¶í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”…”�”}”(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&]”jjuh1j7hj±ì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Œreturn elements to a mempool”h]”hŒreturn elements to a mempool”…”�”}”(hj1îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´Mlhj.îh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjªìh²hh³jÃìh´Mlubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjIîjHjIîjI‰jJ‰jK‰uh1híh²hhju×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Ž)�”}”(hjSîh]”hŒ Parameters”…”�”}”(hjUîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjQîubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´MphjMîubj¤)�”}”(hhh]”(j©)�”}”(hŒ4``struct mempool *pool`` pointer to the memory pool ”h]”(j¯)�”}”(hŒ``struct mempool *pool``”h]”jS)�”}”(hjrîh]”hŒstruct mempool *pool”…”�”}”(hjtîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjpîubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´Mmhjlî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Èhjlîubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‡îh´Mmhjiî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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´Mnhj¥îubjÉ)�”}”(hhh]”jM)�”}”(hŒelements to return”h]”hŒelements to return”…”�”}”(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´Mnhjiîubj©)�”}”(hŒ4``unsigned int count`` number of elements to return ”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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´MohjÞî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ÈhjÞîubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jùîh´Mohjiî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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´MqhjMî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 ”…”�”}”(hj5ïh²hh³Nh´NubjŽ)�”}”(hŒ**elem**”h]”hŒelem”…”�”}”(hj=ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj5ïubhŒ to ”…”�”}”(hj5ïh²hh³Nh´NubjŽ)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hjOïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj5ïubhŒ if ”…”�”}”(hj5ïh²hh³Nh´NubjŽ)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hjaïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj5ïubhŒ, needs replenishing and sets their slots in ”…”�”}”(hj5ïh²hh³Nh´NubjŽ)�”}”(hŒ**elem**”h]”hŒelem”…”�”}”(hjsïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj5ïubhŒ& to NULL. Other elements are left in ”…”�”}”(hj5ïh²hh³Nh´NubjŽ)�”}”(hŒ**elem**”h]”hŒelem”…”�”}”(hj…ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj5ïubhŒ.”…”�”}”(hj5ïh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´MphjMî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:104: ./mm/mempool.c”h´MthjMî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 ”…”�”}”(hj¶ïh²hh³Nh´NubjŽ)�”}”(hŒ**pool**”h]”hŒpool”…”�”}”(hj¾ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¶ïubhŒ9. Elements are always transferred from the beginning of ”…”�”}”(hj¶ïh²hh³Nh´NubjŽ)�”}”(hŒ**elem**”h]”hŒelem”…”�”}”(hjÐïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¶ïubhŒ4, so the return value can be used as an offset into ”…”�”}”(hj¶ïh²hh³Nh´NubjŽ)�”}”(hŒ**elem**”h]”hŒelem”…”�”}”(hjâïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¶ïubhŒ6 for the freeing the remaining elements in the caller.”…”�”}”(hj¶ïh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´MuhjMîubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhju×h²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmempool_free (C function)”Œc.mempool_free”hNt”auh1hÜhju×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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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&]”uh1jhj8ðubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjðh²hh³j)ðh´MÁubj8)�”}”(hŒ%(void *element, struct mempool *pool)”h]”(j>)�”}”(hŒ void *element”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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ðubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjtðh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjTðubj)�”}”(hŒelement”h]”hŒelement”…”�”}”(hj�ðh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjTðubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjPðubj>)�”}”(hŒstruct mempool *pool”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjšðh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj–ðubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§ðh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj–ðubh)�”}”(hhh]”j)�”}”(hŒmempool”h]”hŒmempool”…”�”}”(hj¸ðh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjµðubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jºðŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj>ðsbŒc.mempool_free”†”asbuh1hhj–ðubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØðh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj–ðubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjæðh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj–ð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=hjPðubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjð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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./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&]”jFjAjGj5ñjHj5ñjI‰jJ‰jK‰uh1híh²hhju×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”…”�”}”(hjAñ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:104: ./mm/mempool.c”h´MÅhj9ñ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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´MÂhjXñubjÉ)�”}”(hhh]”jM)�”}”(hŒelement to return”h]”hŒelement to return”…”�”}”(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ñ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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´MÃhj‘ñ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´MÃhj­ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‘ñubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¬ñh´MÃhjUñubeh}”(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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´MÅhj9ñ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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´MÄhj9ñ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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:104: ./mm/mempool.c”h´MÇhj9ñubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhju×h²hh³Nh´Nubeh}”(h]”Œ memory-pools”ah ]”h"]”Œ memory pools”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kfubh¶)�”}”(hhh]”(h»)�”}”(hŒ More Memory Management Functions”h]”hŒ More Memory Management Functions”…”�”}”(hjNòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjKòh²hh³hÊh´KlubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"zap_special_vma_range (C function)”Œc.zap_special_vma_range”hNt”auh1hÜhjKò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”…”�”}”(hjuòh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjqòh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.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Œ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þhjqòh²hh³jƒòh´M* ubj8)�”}”(hŒG(struct vm_area_struct *vma, unsigned long address, unsigned long size)”h]”(j>)�”}”(hŒstruct vm_area_struct *vma”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj²òh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj®òubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿òh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj®òubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jÒòŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj˜òsbŒc.zap_special_vma_range”†”asbuh1hhj®òubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðòh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj®òubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjþòh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj®ò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Œ ”…”�”}”(hj2ó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Œ ”…”�”}”(hjNó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”…”�”}”(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Œsize”h]”hŒsize”…”�”}”(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&]”jjuh1j7hjqò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Œ;zap all page table entries in a VMA which is not mm-managed”h]”hŒ;zap all page table entries in a VMA which is not mm-managed”…”�”}”(hj×óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.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²hhjKòh³Nh´Nubj„)�”}”(hXT**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 **vma** is mm-managed.”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:110: ./mm/memory.c”h´M. 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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M, hjôubjÉ)�”}”(hhh]”jM)�”}”(hŒ!the vma covering the range to zap”h]”hŒ!the vma covering the range to zap”…”�”}”(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Œ?``unsigned long address`` starting address of the range to zap ”h]”(j¯)�”}”(hŒ``unsigned long address``”h]”jS)�”}”(hjQôh]”hŒunsigned long address”…”�”}”(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:110: ./mm/memory.c”h´M- hjKôubjÉ)�”}”(hhh]”jM)�”}”(hŒ$starting address of the range to zap”h]”hŒ$starting address of 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ÈhjKôubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jfôh´M- 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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M. hj„ôubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of bytes to zap”h]”hŒnumber of bytes 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Œ**Description**”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:110: ./mm/memory.c”h´M0 hjóóubjM)�”}”(hŒ|This function does nothing when the provided address range is not fully contained in **vma**, or when **vma** is mm-managed.”h]”(hŒUThis function does nothing when the provided address range is not fully contained in ”…”�”}”(hjÛôh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjãôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÛôubhŒ , or when ”…”�”}”(hjÛôh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjõôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÛôubhŒ is mm-managed.”…”�”}”(hjÛôh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M/ hjóóubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvm_insert_pages (C function)”Œc.vm_insert_pages”hNt”auh1hÜhjKò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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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_insert_pages”h]”j)�”}”(hŒvm_insert_pages”h]”hŒvm_insert_pages”…”�”}”(hjOõh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjKõubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj*õh²hh³j<õh´M ubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjkõh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjgõubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxõh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjgõ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”jèŒ reftarget”j‹õŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjQõsbŒc.vm_insert_pages”†”asbuh1hhjgõubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©õh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjgõubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj·õh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjgõubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjÄõh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjgõubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjcõ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=hjcõubj>)�”}”(hŒstruct page **pages”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj.öh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj*öubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;öh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj*öubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjLöh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjIöubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jNöŒmodname”NŒ classname”Njìjï)�”}”jò]”j¥õŒc.vm_insert_pages”†”asbuh1hhj*öubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjöh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj*öubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjxöh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj*öubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj…öh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj*ö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=hjcõ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§öubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjãöh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj§ö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=hjcõubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj*õ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 multiple pages into user vma, batching the pmd lock.”h]”•DhŒ;insert multiple pages into user vma, batching the pmd lock.”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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&]”jFjAjGj2÷jHj2÷jI‰jJ‰jK‰uh1híh²hhjKò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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M hj6÷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&]”uh1jRhjY÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M hjU÷ubjÉ)�”}”(hhh]”jM)�”}”(hŒuser vma to map to”h]”hŒuser vma to map to”…”�”}”(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÷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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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 hjR÷ubj©)�”}”(hŒ,``struct page **pages`` 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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M hjÇ÷ubjÉ)�”}”(hhh]”jM)�”}”(hŒsource kernel pages”h]”hŒ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 hjR÷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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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´Nubjí )�”}”(hŒ*not*”h]”hŒnot”…”�”}”(hj'øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jì hjøubhŒ6 mapped. (0 means all pages were successfully mapped).”…”�”}”(hjøh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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 hjR÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj6÷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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M hj6÷ubjM)�”}”(hŒ>Preferred over vm_insert_page() when inserting multiple pages.”h]”hŒ>Preferred over vm_insert_page() when inserting multiple pages.”…”�”}”(hjjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M hj6÷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.”…”�”}”(hjyøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M hj6÷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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M hj6÷ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvm_insert_page (C function)”Œc.vm_insert_page”hNt”auh1hÜhjKò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”…”�”}”(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:110: ./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_insert_page”h]”j)�”}”(hŒvm_insert_page”h]”hŒvm_insert_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¶ ubj8)�”}”(hŒC(struct vm_area_struct *vma, unsigned long addr, struct page *page)”h]”(j>)�”}”(hŒstruct vm_area_struct *vma”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjôøh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjðøubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjðøubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jùŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÚøsbŒc.vm_insert_page”†”asbuh1hhjðøubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2ùh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjðøubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj@ùh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjðøubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjMù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”…”�”}”(hjfùh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjbùubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtùh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjbùubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj‚ùh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjbùubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�ùh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjbùubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjžùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjbùubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjìøubj>)�”}”(hŒstruct page *page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj·ùh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj³ùubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄùh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj³ùubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÕùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÒùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j×ùŒmodname”NŒ classname”Njìjï)�”}”jò]”j.ùŒc.vm_insert_page”†”asbuh1hhj³ùubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóùh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj³ùubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj³ù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ìøubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj³ø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 single page into user vma”h]”hŒ insert single page into user vma”…”�”}”(hj8úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M¶ hj5ú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²hhjKò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Ž)�”}”(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:110: ./mm/memory.c”h´Mº hjTú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)�”}”(hjyúh]”hŒstruct vm_area_struct *vma”…”�”}”(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:110: ./mm/memory.c”h´M· hjsú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Èhjsúubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŽúh´M· hjpú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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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¸ hjpú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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M¹ hjåú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Èhjåúubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jûh´M¹ hjpú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:110: ./mm/memory.c”h´M» hjTú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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Mº hjTú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()).”…”�”}”(hjKûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M¾ hjTú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!”…”�”}”(hjZûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Mà hjTúubjM)�”}”(hŒ&The page does not need to be reserved.”h]”hŒ&The page does not need to be reserved.”…”�”}”(hjiûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´MÉ hjTú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.”…”�”}”(hjxûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´MË hjTú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:110: ./mm/memory.c”h´MÐ hjTú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:110: ./mm/memory.c”h´MÑ hjTúubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvm_map_pages (C function)”Œc.vm_map_pages”hNt”auh1hÜhjKò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”…”�”}”(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:110: ./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”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þhjØûh²hh³jêûh´M ubj8)�”}”(hŒD(struct vm_area_struct *vma, struct page **pages, unsigned long num)”h]”(j>)�”}”(hŒstruct vm_area_struct *vma”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjüubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&üh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjüubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj7üh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4üubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j9üŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÿûsbŒc.vm_map_pages”†”asbuh1hhjüubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWüh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjüubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjeüh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjü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Œstruct page **pages”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj‹üh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj‡üubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜üh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‡üubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj©üh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦üubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j«üŒmodname”NŒ classname”Njìjï)�”}”jò]”jSüŒc.vm_map_pages”†”asbuh1hhj‡üubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇüh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‡üubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÕüh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj‡üubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjâüh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj‡ü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Œ ”…”�”}”(hj2ý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&]”jjuh1j7hjØû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Œ6maps range of kernel pages starts with non zero offset”h]”hŒ6maps range of kernel pages starts with non zero offset”…”�”}”(hjjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.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&]”jFjAjGj‚ýjHj‚ýjI‰jJ‰jK‰uh1híh²hhjKò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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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Œ@``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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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 hj¢ý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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M hjþubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages in page array”h]”hŒnumber of pages in page array”…”�”}”(hj6þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j2þh´M hj3þubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjþubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j2þh´M 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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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 ”…”�”}”(hjnþh²hh³Nh´NubjŽ)�”}”(hŒ**num**”h]”hŒnum”…”�”}”(hjvþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjnþubhŒ4 pages, catering for the user’s requested vm_pgoff”…”�”}”(hjnþh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M hj†ýubjM)�”}”(hŒ)Process context. Called by mmap handlers.”h]”hŒ)Process context. Called by mmap handlers.”…”�”}”(hj¶þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M hj†ý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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M hj†ýubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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 ubj8)�”}”(hŒD(struct vm_area_struct *vma, struct page **pages, unsigned long num)”h]”(j>)�”}”(hŒstruct vm_area_struct *vma”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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ÿubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjgÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjdÿubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jiÿŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj/ÿsbŒc.vm_map_pages_zero”†”asbuh1hhjEÿubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡ÿh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjEÿubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj•ÿh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjEÿubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hj¢ÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjEÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjAÿubj>)�”}”(hŒstruct page **pages”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj»ÿh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj·ÿubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈÿh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj·ÿubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÙÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÖÿubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÛÿŒmodname”NŒ classname”Njìjï)�”}”jò]”jƒÿŒc.vm_map_pages_zero”†”asbuh1hhj·ÿubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷ÿh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj·ÿubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj·ÿubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj·ÿubj)�”}”(hŒpages”h]”hŒpages”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj·ÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjAÿubj>)�”}”(hŒunsigned long num”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj4ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj4ubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj4ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj4ubj)�”}”(hŒnum”h]”hŒnum”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjAÿubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÿ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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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²hhjKò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Ž)�”}”(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:110: ./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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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Œ@``struct page **pages`` pointer to array of source kernel pages ”h]”(j¯)�”}”(hŒ``struct page **pages``”h]”jS)�”}”(hjh]”hŒstruct page **pages”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M hjubjÉ)�”}”(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Èhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j)h´M hjÒubj©)�”}”(hŒ4``unsigned long num`` number of pages in page array ”h]”(j¯)�”}”(hŒ``unsigned long num``”h]”jS)�”}”(hjMh]”hŒunsigned long num”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjKubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M hjGubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages in page array”h]”hŒnumber of pages in page array”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jbh´M hjcubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjGubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jbh´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:110: ./mm/memory.c”h´M hj¶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.”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M" hj¶ubjM)�”}”(hŒ)Process context. Called by mmap handlers.”h]”hŒ)Process context. Called by mmap handlers.”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M% hj¶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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M$ hj¶ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒvmf_insert_pfn_prot”sbŒc.vmf_insert_pfn_prot”†”asbuh1hhjh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Ma ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjh²hh³j?h´Ma ubhÿ)�”}”(hŒvmf_insert_pfn_prot”h]”j)�”}”(hj<h]”hŒvmf_insert_pfn_prot”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjNubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjh²hh³j?h´Ma ubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjiubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjiubh)�”}”(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”jèŒ reftarget”j�Œmodname”NŒ classname”Njìjï)�”}”jò]”j:Œc.vmf_insert_pfn_prot”†”asbuh1hhjiubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjiubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjiubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjiubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjeubj>)�”}”(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Œ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÙubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjeubj>)�”}”(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”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj*ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj*ubj)�”}”(hŒpfn”h]”hŒpfn”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjeubj>)�”}”(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&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j„Œmodname”NŒ classname”Njìjï)�”}”jò]”j:Œc.vmf_insert_pfn_prot”†”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=hjeubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjh²hh³j?h´Ma ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjh²hh³j?h´Ma ubah}”(h]”jah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j?h´Ma hjh²hubj4)�”}”(hhh]”jM)�”}”(hŒ5insert single pfn into user vma with specified pgprot”h]”hŒ5insert single pfn into user vma with specified pgprot”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Ma hjÕh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjh²hh³j?h´Ma ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjðjHjðjI‰jJ‰jK‰uh1híh²hhjKò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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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)�”}”(hjh]”hŒstruct vm_area_struct *vma”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Mb hjubjÉ)�”}”(hhh]”jM)�”}”(hŒuser vma to map to”h]”hŒuser vma to map to”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j.h´Mb hj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j.h´Mb hjubj©)�”}”(hŒ8``unsigned long addr`` target user address of this page ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hjRh]”hŒunsigned long addr”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Mc hjLubjÉ)�”}”(hhh]”jM)�”}”(hŒ target user address of this page”h]”hŒ target user address of this page”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jgh´Mc hjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jgh´Mc hjubj©)�”}”(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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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 hjubj©)�”}”(hŒ7``pgprot_t pgprot`` pgprot flags for the inserted page ”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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Me hj¾ubjÉ)�”}”(hhh]”jM)�”}”(hŒ"pgprot flags for the inserted page”h]”hŒ"pgprot flags for the inserted page”…”�”}”(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 hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjôubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÿh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjýubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Mg 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.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Mf 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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Mi 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 ”…”�”}”(hj3h²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�hj3ubhŒG when drivers set caching- and encryption bits different than those of ”…”�”}”(hj3h²hh³Nh´NubjŽ)�”}”(hŒ**vma->vm_page_prot**”h]”hŒvma->vm_page_prot”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj3ubhŒJ, because the caching- or encryption mode may not be known at mmap() time.”…”�”}”(hj3h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Mn 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 ”…”�”}”(hjfh²hh³Nh´NubjŽ)�”}”(hŒ**vma->vm_page_prot**”h]”hŒvma->vm_page_prot”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjfubhX$ 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()).”…”�”}”(hjfh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Mr 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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Mx 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:110: ./mm/memory.c”h´M} hjôubjM)�”}”(hŒ4Process context. May allocate using ``GFP_KERNEL``.”h]”(hŒ%Process context. May allocate using ”…”�”}”(hj®h²hh³Nh´NubjS)�”}”(hŒ``GFP_KERNEL``”h]”hŒ GFP_KERNEL”…”�”}”(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:110: ./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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M€ hjôubjM)�”}”(hŒvm_fault_t value.”h]”hŒvm_fault_t value.”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M hjôubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvmf_insert_pfn (C function)”Œc.vmf_insert_pfn”hNt”auh1hÜhjKò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”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒvmf_insert_pfn”sbŒc.vmf_insert_pfn”†”asbuh1hhjh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.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Œvmf_insert_pfn”h]”j)�”}”(hj7h]”hŒvmf_insert_pfn”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjIubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjh²hh³j:h´M  ubj8)�”}”(hŒC(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn)”h]”(j>)�”}”(hŒstruct vm_area_struct *vma”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjdubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjdubh)�”}”(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”jèŒ reftarget”jˆŒmodname”NŒ classname”Njìjï)�”}”jò]”j5Œc.vmf_insert_pfn”†”asbuh1hhjdubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjdubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjdubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjdubeh}”(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Œ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÔubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjh²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Œ ”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj%ubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj%ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj%ubj)�”}”(hŒpfn”h]”hŒpfn”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj`ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjh²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Œ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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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²hhjKò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”…”�”}”(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:110: ./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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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)�”}”(hjh]”hŒunsigned long addr”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M¢ hjÿubjÉ)�”}”(hhh]”jM)�”}”(hŒ target user address of this page”h]”hŒ target user address of this page”…”�”}”(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Œ(``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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M£ hj8ubjÉ)�”}”(hhh]”jM)�”}”(hŒsource kernel pfn”h]”hŒsource kernel pfn”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jSh´M£ hjTubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jSh´M£ hjÃubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj§ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjyh]”hŒ Description”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M¥ 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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M¤ 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.”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M§ 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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Mª 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.”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M¯ hj§ubjM)�”}”(hŒ4Process context. May allocate using ``GFP_KERNEL``.”h]”(hŒ%Process context. May allocate using ”…”�”}”(hjãh²hh³Nh´NubjS)�”}”(hŒ``GFP_KERNEL``”h]”hŒ GFP_KERNEL”…”�”}”(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:110: ./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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M² hj§ubjM)�”}”(hŒvm_fault_t value.”h]”hŒvm_fault_t value.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M± hj§ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒremap_pfn_range (C function)”Œc.remap_pfn_range”hNt”auh1hÜhjKò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”…”�”}”(hjK h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjG h²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M9 ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZ h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjG h²hh³jY h´M9 ubhÿ)�”}”(hŒremap_pfn_range”h]”j)�”}”(hŒremap_pfn_range”h]”hŒremap_pfn_range”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjh ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjG h²hh³jY h´M9 ubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjˆ h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj„ ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj• h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj„ ubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”j¨ Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjn sbŒc.remap_pfn_range”†”asbuh1hhj„ ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆ h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj„ ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÔ h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj„ 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”…”�”}”(hj2 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”…”�”}”(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Œpfn”h]”hŒpfn”…”�”}”(hjƒ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjG 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€ 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”jèŒ reftarget”jò Œmodname”NŒ classname”Njìjï)�”}”jò]”j Œ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&]”jjuh1j7hjG h²hh³jY h´M9 ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjC h²hh³jY h´M9 ubah}”(h]”j> ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jY h´M9 hj@ h²hubj4)�”}”(hhh]”jM)�”}”(hŒ remap kernel memory to userspace”h]”hŒ remap kernel memory to userspace”…”�”}”(hjF h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”•6h´M9 hjC h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj@ h²hh³jY h´M9 ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj^ jHj^ jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjh h]”hŒ Parameters”…”�”}”(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:110: ./mm/memory.c”h´M= hjb 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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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ŒD``unsigned long addr`` target page aligned user address to start at ”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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M; hjº ubjÉ)�”}”(hhh]”jM)�”}”(hŒ,target page aligned user address to start at”h]”hŒ,target page aligned user address to start at”…”�”}”(hjÙ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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Œ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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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)�”}”(hj2 h]”hŒunsigned long size”…”�”}”(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:110: ./mm/memory.c”h´M= hj, ubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of mapping area”h]”hŒsize of mapping area”…”�”}”(hjK h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jG h´M= hjH ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj, ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jG h´M= hj~ ubj©)�”}”(hŒ9``pgprot_t prot`` page protection flags for this mapping ”h]”(j¯)�”}”(hŒ``pgprot_t prot``”h]”jS)�”}”(hjk h]”hŒ pgprot_t prot”…”�”}”(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:110: ./mm/memory.c”h´M> hje 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Èhje ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j€ h´M> hj~ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjb 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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M@ hjb 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.”…”�”}”(hj¼ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M@ hjb 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:110: ./mm/memory.c”h´MB hjb 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:110: ./mm/memory.c”h´MB hjb ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvm_iomap_memory (C function)”Œc.vm_iomap_memory”hNt”auh1hÜhjKò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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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_iomap_memory”h]”j)�”}”(hŒvm_iomap_memory”h]”hŒvm_iomap_memory”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj= ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj h²hh³j. h´M‘ ubj8)�”}”(hŒB(struct vm_area_struct *vma, phys_addr_t start, unsigned long len)”h]”(j>)�”}”(hŒstruct vm_area_struct *vma”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj] h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjY ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjY ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjx ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j} Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjC sbŒc.vm_iomap_memory”†”asbuh1hhjY ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj› h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjY ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj© h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjY ubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hj¶ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjY ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjU ubj>)�”}”(hŒphys_addr_t start”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”jèŒ reftarget”jÔ Œmodname”NŒ classname”Njìjï)�”}”jò]”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=hjU ubj>)�”}”(hŒunsigned long len”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”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjubj)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjU ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj 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 memory to userspace”h]”hŒremap memory to userspace”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M‘ hjvh²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²hhjKò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”…”�”}”(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:110: ./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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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Œ@``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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”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”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jh´M“ hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjíubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jh´M“ hj±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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M” hj&ubjÉ)�”}”(hhh]”jM)�”}”(hŒ size of area”h]”hŒ size of area”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jAh´M” hjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jAh´M” hj±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj•ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjgh]”hŒ Description”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M– 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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M• 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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.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:110: ./mm/memory.c”h´M� hj•ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ unmap_mapping_pages (C function)”Œc.unmap_mapping_pages”hNt”auh1hÜhjKò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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjìh²hh³jþh´Móubj8)�”}”(hŒJ(struct address_space *mapping, pgoff_t start, pgoff_t nr, bool even_cows)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj)ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj)ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjHubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jMŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjsbŒc.unmap_mapping_pages”†”asbuh1hhj)ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj)ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj)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”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŸubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j¤Œmodname”NŒ classname”Njìjï)�”}”jò]”jgŒc.unmap_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=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&]”uh1jhjçubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jìŒmodname”NŒ classname”Njìjï)�”}”jò]”jgŒc.unmap_mapping_pages”†”asbuh1hhjãubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjãubj)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjã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”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj%ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjì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 pages from processes.”h]”hŒUnmap pages from processes.”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Móhjqh²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²hhjKò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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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)�”}”(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:110: ./mm/memory.c”h´Môhj¯ubjÉ)�”}”(hhh]”jM)�”}”(hŒ2The address space containing pages to be unmapped.”h]”hŒ2The address space containing pages 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Œ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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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.”…”�”}”(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Œ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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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”…”�”}”(hjbh²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:110: ./mm/memory.c”h´M÷hjZubjÉ)�”}”(hhh]”jM)�”}”(hŒ*Whether to unmap even private COWed pages.”h]”hŒ*Whether to unmap even private COWed pages.”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³juh´M÷hjvubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjZubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³juh´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:110: ./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.”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Møhj�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ unmap_mapping_range (C function)”Œc.unmap_mapping_range”hNt”auh1hÜhjKò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”…”�”}”(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:110: ./mm/memory.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Œunmap_mapping_range”h]”j)�”}”(hŒunmap_mapping_range”h]”hŒunmap_mapping_range”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjýubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÜh²hh³jîh´Mubj8)�”}”(hŒ\(struct address_space *mapping, loff_t const holebegin, loff_t const holelen, int even_cows)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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òhjubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj8ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j=Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjsbŒc.unmap_mapping_range”†”asbuh1hhjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjubj>)�”}”(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”jèŒ reftarget”j”Œmodname”NŒ classname”Njìjï)�”}”jò]”jWŒc.unmap_mapping_range”†”asbuh1hhj‹ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‹ubjœ)�”}”(hjŸh]”hŒconst”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj‹ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‹ubj)�”}”(hŒ holebegin”h]”hŒ holebegin”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‹ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjubj>)�”}”(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”jèŒ reftarget”j÷Œmodname”NŒ classname”Njìjï)�”}”jò]”jWŒc.unmap_mapping_range”†”asbuh1hhjîubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjîubjœ)�”}”(hjŸh]”hŒconst”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjî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=hjubj>)�”}”(hŒ int even_cows”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjQubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjQubj)�”}”(hŒ even_cows”h]”hŒ even_cows”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjQubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÜ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Œ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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.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²hhjKò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Ž)�”}”(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:110: ./mm/memory.c”h´Mhj·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)�”}”(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:110: ./mm/memory.c”h´MhjÖ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´Mhjòubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jñh´MhjÓ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)�”}”(hjh]”hŒloff_t const holebegin”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´MhjubjÉ)�”}”(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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Mhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j*h´MhjÓ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)�”}”(hjOh]”hŒloff_t const holelen”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´MhjIubjÉ)�”}”(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.”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Mhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjIubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jdh´MhjÓ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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Mhjƒ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.”…”�”}”(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·ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ follow_pfnmap_start (C function)”Œc.follow_pfnmap_start”hNt”auh1hÜhjKò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”…”�”}”(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:110: ./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_start”h]”j)�”}”(hŒfollow_pfnmap_start”h]”hŒfollow_pfnmap_start”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÿubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÞh²hh³jðh´M¤ubj8)�”}”(hŒ!(struct follow_pfnmap_args *args)”h]”j>)�”}”(hŒstruct follow_pfnmap_args *args”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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òhjubh)�”}”(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”jèŒ reftarget”j?Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjsbŒc.follow_pfnmap_start”†”asbuh1hhjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjubj)�”}”(hŒargs”h]”hŒargs”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÞ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Œ/Look up a pfn mapping at a user virtual address”h]”hŒ/Look up a pfn mapping at a user virtual address”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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²hhjKò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Ž)�”}”(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:110: ./mm/memory.c”h´M¨hj¾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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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”…”�”}”(hjh²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£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:110: ./mm/memory.c”h´M§hj¾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.”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M¦hj¾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.”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Mªhj¾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”…”�”}”(hjhh²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”…”�”}”(hjzh²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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M®hj¾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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Mµhj¾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.”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M¹hj¾ubjM)�”}”(hŒ5This function must not be used to modify PTE content.”h]”hŒ5This function must not be used to modify PTE content.”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M¿hj¾ubjM)�”}”(hŒ$zero on success, negative otherwise.”h]”hŒ$zero on success, negative otherwise.”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´MÀhj¾ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfollow_pfnmap_end (C function)”Œc.follow_pfnmap_end”hNt”auh1hÜhjKò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”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjh²hh³jh´Mubhÿ)�”}”(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þhjh²hh³jh´Mubj8)�”}”(hŒ!(struct follow_pfnmap_args *args)”h]”j>)�”}”(hŒstruct follow_pfnmap_args *args”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjDh²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@ubh)�”}”(hhh]”j)�”}”(hŒfollow_pfnmap_args”h]”hŒfollow_pfnmap_args”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj_ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jdŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj*sbŒc.follow_pfnmap_end”†”asbuh1hhj@ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj@ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj@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&]”jjuh1j7hjh²hh³jh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÿh²hh³jh´Mubah}”(h]”júah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jh´Mhjüh²hubj4)�”}”(hhh]”jM)�”}”(hŒ#End a follow_pfnmap_start() process”h]”hŒ#End a follow_pfnmap_start() process”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´MhjÄh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjüh²hh³jh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjßjHjßjI‰jJ‰jK‰uh1híh²hhjKò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�hjçubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Mhjã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)�”}”(hjh]”hŒstruct follow_pfnmap_args *args”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´MhjubjÉ)�”}”(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³jh´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jh´Mhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjãubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjQh]”hŒ Description”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjOubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Mhjã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.”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´Mhjãubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ generic_access_phys (C function)”Œc.generic_access_phys”hNt”auh1hÜhjKò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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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Œgeneric_access_phys”h]”j)�”}”(hŒgeneric_access_phys”h]”hŒgeneric_access_phys”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj³ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj’h²hh³j¤h´M,ubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÏubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÏubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jóŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj¹sbŒc.generic_access_phys”†”asbuh1hhjÏubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÏubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÏ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”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjAubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjAubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjAubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjAubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjAubeh}”(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’ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj’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Œ 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Œ ”…”�”}”(hjh²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&]”jjuh1j7hj’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Œ,generic implementation for iomem mmap access”h]”hŒ,generic implementation for iomem mmap access”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M,hjPh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj‹h²hh³j¤h´M,ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjkjHjkjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjuh]”hŒ Parameters”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjsubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M0hjoubj¤)�”}”(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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./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”…”�”}”(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:110: ./mm/memory.c”h´M.hjÇubjÉ)�”}”(hhh]”jM)�”}”(hŒ5userspace address, not relative offset within **vma**”h]”(hŒ.userspace address, not relative offset within ”…”�”}”(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³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 *buf`` buffer to read/write ”h]”(j¯)�”}”(hŒ ``void *buf``”h]”jS)�”}”(hjh]”hŒ void *buf”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M/hjubjÉ)�”}”(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Èhjubeh}”(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)�”}”(hjMh]”hŒint len”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjKubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M0hjGubjÉ)�”}”(hhh]”jM)�”}”(hŒlength of transfer”h]”hŒlength of transfer”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jbh´M0hjcubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjGubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jbh´M0hj‹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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M1hj€ubjÉ)�”}”(hhh]”jM)�”}”(hŒ1set to FOLL_WRITE when writing, otherwise reading”h]”hŒ1set to FOLL_WRITE when writing, otherwise reading”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j›h´M1hjœubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j›h´M1hj‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjoubjM)�”}”(hŒ**Description**”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:110: ./mm/memory.c”h´M3hjoubjM)�”}”(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 ”…”�”}”(hj×h²hh³Nh´Nubh)�”}”(hŒ<:c:type:`vm_operations_struct.access `”h]”jS)�”}”(hjáh]”hŒvm_operations_struct.access”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”(j%4jAŒc-type”eh"]”h$]”h&]”uh1jRhjßubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j14Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jìj74j:4Œvm_operations_struct”uh1hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:110: ./mm/memory.c”h´M2hj×ubhŒM for an iomem mapping. This callback is used by access_process_vm() when the ”…”�”}”(hj×h²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj×ubhŒ is not page based.”…”�”}”(hj×h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jþh´M2hjoubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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àhj7h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./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Œ__get_pfnblock_flags_mask”h]”j)�”}”(hŒ__get_pfnblock_flags_mask”h]”hŒ__get_pfnblock_flags_mask”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjtubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj7h²hh³jIh´M€ubj8)�”}”(hŒ@(const struct page *page, unsigned long pfn, unsigned long mask)”h]”(j>)�”}”(hŒconst struct page *page”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj�ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÊubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÏŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjzsbŒc.__get_pfnblock_flags_mask”†”asbuh1hhj�ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj�ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjh²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à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Œ ”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjubj)�”}”(hŒpfn”h]”hŒpfn”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjŒubj>)�”}”(hŒunsigned long mask”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Œmask”h]”hŒmask”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjnubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjŒubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj7h²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Œ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”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./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²hhjKò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Ž)�”}”(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:113: ./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)�”}”(hjh]”hŒconst struct page *page”…”�”}”(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:113: ./mm/page_alloc.c”h´M‚hjubjÉ)�”}”(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Èhjubeh}”(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)�”}”(hjNh]”hŒunsigned long pfn”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjLubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MƒhjHubjÉ)�”}”(hhh]”jM)�”}”(hŒThe target page frame number”h]”hŒThe target page frame number”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jch´Mƒhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjHubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jch´Mƒhj 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:113: ./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„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:113: ./mm/page_alloc.c”h´M†hjðubjM)�”}”(hŒpageblock_bits flags”h]”hŒpageblock_bits flags”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”•šh´M†hjðubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒget_pfnblock_bit (C function)”Œc.get_pfnblock_bit”hNt”auh1hÜhjKò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”…”�”}”(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:113: ./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Œ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þhj h²hh³j h´M›ubj8)�”}”(hŒH(const struct page *page, unsigned long pfn, enum pageblock_bits pb_bit)”h]”(j>)�”}”(hŒconst struct page *page”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjC 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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj^ h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj? ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjk 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&]”uh1jhjy ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j~ Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj) sbŒc.get_pfnblock_bit”†”asbuh1hhj? ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœ h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj? ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjª h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj? 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]”(jœ)�”}”(hŒenum”h]”hŒenum”…”�”}”(hj!!h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj!ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/!h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj!ubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jB!Œmodname”NŒ classname”Njìjï)�”}”jò]”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”…”�”}”(hjl!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&]”jjuh1j7hj 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 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:113: ./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²hhjKò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:113: ./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:113: ./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:113: ./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Œ6``enum pageblock_bits pb_bit`` pageblock bit to check ”h]”(j¯)�”}”(hŒ``enum pageblock_bits pb_bit``”h]”jS)�”}”(hjI"h]”hŒenum pageblock_bits pb_bit”…”�”}”(hjK"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjG"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MžhjC"ubjÉ)�”}”(hhh]”jM)�”}”(hŒpageblock bit to check”h]”hŒpageblock bit to check”…”�”}”(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Î!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:113: ./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:113: ./mm/page_alloc.c”h´M hj²!ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%get_pfnblock_migratetype (C function)”Œc.get_pfnblock_migratetype”hNt”auh1hÜhjKò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]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(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:113: ./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Œ migratetype”h]”hŒ migratetype”…”�”}”(hjè"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjå"ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jê"Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒget_pfnblock_migratetype”sbŒc.get_pfnblock_migratetype”†”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±ubhÿ)�”}”(hŒget_pfnblock_migratetype”h]”j)�”}”(hj#h]”hŒget_pfnblock_migratetype”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj#ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÅ"h²hh³jÖ"h´M±ubj8)�”}”(hŒ,(const struct page *page, unsigned long pfn)”h]”(j>)�”}”(hŒconst struct page *page”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hj6#h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj2#ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjC#h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj2#ubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjQ#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#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”jèŒ reftarget”jq#Œmodname”NŒ classname”Njìjï)�”}”jò]”j#Œc.get_pfnblock_migratetype”†”asbuh1hhj2#ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�#h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj2#ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj›#h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj2#ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj¨#h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2#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&]”jjuh1j7hjÅ"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 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:113: ./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²hhjKò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Ž)�”}”(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:113: ./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)�”}”(hjd$h]”hŒconst struct page *page”…”�”}”(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:113: ./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³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Œ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:113: ./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Ž)�”}”(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:113: ./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:113: ./mm/page_alloc.c”h´Mµ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:113: ./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:113: ./mm/page_alloc.c”h´M¶hj?$ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hjh%h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjd%h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”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Œ__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þhjd%h²hh³jv%h´MÊubj8)�”}”(hŒO(struct page *page, unsigned long pfn, unsigned long flags, unsigned long mask)”h]”(j>)�”}”(hŒstruct page *page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¥%h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¡%ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²%h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¡%ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÃ%h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÀ%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÅ%Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj‹%sbŒc.__set_pfnblock_flags_mask”†”asbuh1hhj¡%ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjã%h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¡%ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjñ%h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¡%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”…”�”}”(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Œpfn”h]”hŒpfn”…”�”}”(hjO&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”…”�”}”(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Œlong”h]”hŒlong”…”�”}”(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&ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj &h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjd&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&]”jjuh1j7hjd%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Œ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:113: ./mm/page_alloc.c”h´MÊhj'h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj]%h²hh³jv%h´MÊubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj3'jHj3'jI‰jJ‰jK‰uh1híh²hhjKò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:113: ./mm/page_alloc.c”h´MÎhj7'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&]”uh1jRhjZ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MÌhjV'ubjÉ)�”}”(hhh]”jM)�”}”(hŒ%The page within the block of interest”h]”hŒ%The page within the block of interest”…”�”}”(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Œ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:113: ./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ÍhjS'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:113: ./mm/page_alloc.c”h´MÎhjÈ'ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe flags to set”h]”hŒThe flags to set”…”�”}”(hjç'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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ŒD``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:113: ./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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./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ÐhjS'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj7'ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒset_pfnblock_bit (C function)”Œc.set_pfnblock_bit”hNt”auh1hÜhjKò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”…”�”}”(hja(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:113: ./mm/page_alloc.c”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Œ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³jo(h´Mãubj8)�”}”(hŒH(const struct page *page, unsigned long pfn, enum pageblock_bits pb_bit)”h]”(j>)�”}”(hŒconst struct page *page”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¹(h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjš(ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆ(h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjš(ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj×(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÔ(ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÙ(Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj„(sbŒc.set_pfnblock_bit”†”asbuh1hhjš(ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷(h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjš(ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjš(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Œ ”…”�”}”(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Œpfn”h]”hŒpfn”…”�”}”(hjc)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]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(hj|)h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjx)ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰)h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjx)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”jèŒ reftarget”jœ)Œmodname”NŒ classname”Njìjï)�”}”jò]”jó(Œc.set_pfnblock_bit”†”asbuh1hhjx)ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸)h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjx)ubj)�”}”(hŒpb_bit”h]”hŒpb_bit”…”�”}”(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&]”jjuh1j7hj](h²hh³jo(h´Mãubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjY(h²hh³jo(h´Mãubah}”(h]”jT(ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jo(h´MãhjV(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:113: ./mm/page_alloc.c”h´Mãhjí)h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjV(h²hh³jo(h´Mãubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj*jHj*jI‰jJ‰jK‰uh1híh²hhjKò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:113: ./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)�”}”(hj1*h]”hŒconst struct page *page”…”�”}”(hj3*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:113: ./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”…”�”}”(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Œ3``unsigned long pfn`` The target page frame number ”h]”(j¯)�”}”(hŒ``unsigned long pfn``”h]”jS)�”}”(hjj*h]”hŒunsigned long pfn”…”�”}”(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:113: ./mm/page_alloc.c”h´Måhjd*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Èhjd*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:113: ./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:113: ./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£hj *ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒclear_pfnblock_bit (C function)”Œc.clear_pfnblock_bit”hNt”auh1hÜhjKò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”…”�”}”(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:113: ./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Œ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þhjù*h²hh³j +h´M÷ubj8)�”}”(hŒH(const struct page *page, unsigned long pfn, enum pageblock_bits pb_bit)”h]”(j>)�”}”(hŒconst struct page *page”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hj:+h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj6+ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjG+h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj6+ubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjU+h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj6+ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjb+h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj6+ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjs+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjp+ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”ju+Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj +sbŒc.clear_pfnblock_bit”†”asbuh1hhj6+ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“+h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj6+ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¡+h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj6+ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj®+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj6+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj2+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=hj2+ubj>)�”}”(hŒenum pageblock_bits pb_bit”h]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj,ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%,h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj,ubh)�”}”(hhh]”j)�”}”(hŒpageblock_bits”h]”hŒpageblock_bits”…”�”}”(hj6,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3,ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j8,Œmodname”NŒ classname”Njìjï)�”}”jò]”j�+Œc.clear_pfnblock_bit”†”asbuh1hhj,ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjT,h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj,ubj)�”}”(hŒpb_bit”h]”hŒpb_bit”…”�”}”(hjb,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&]”jjuh1j7hjù*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 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:113: ./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²hhjKò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Ž)�”}”(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:113: ./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:113: ./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:113: ./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Œ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”…”�”}”(hjA-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:113: ./mm/page_alloc.c”h´Mûhj9-ubjÉ)�”}”(hhh]”jM)�”}”(hŒpageblock bit to clear”h]”hŒpageblock bit to clear”…”�”}”(hjX-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MúhjU-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj9-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jT-h´MûhjÄ,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¨,ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ&set_pageblock_migratetype (C function)”Œc.set_pageblock_migratetype”hNt”auh1hÜhjKò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”…”�”}”(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:113: ./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_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þhj•-h²hh³j§-h´M ubj8)�”}”(hŒ1(struct page *page, enum migratetype migratetype)”h]”(j>)�”}”(hŒstruct page *page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÖ-h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÒ-ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjã-h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÒ-ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjô-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñ-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jö-Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj¼-sbŒc.set_pageblock_migratetype”†”asbuh1hhjÒ-ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÒ-ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj".h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÒ-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]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(hjH.h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjD.ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjU.h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjD.ubh)�”}”(hhh]”j)�”}”(hŒ migratetype”h]”hŒ migratetype”…”�”}”(hjf.h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjc.ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jh.Œmodname”NŒ classname”Njìjï)�”}”jò]”j.Œc.set_pageblock_migratetype”†”asbuh1hhjD.ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„.h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjD.ubj)�”}”(hŒ migratetype”h]”hŒ migratetype”…”�”}”(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&]”jjuh1j7hj•-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 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:113: ./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²hhjKò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Ž)�”}”(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:113: ./mm/page_alloc.c”h´MhjØ.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:113: ./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``enum migratetype migratetype`` migratetype to set”h]”(j¯)�”}”(hŒ ``enum migratetype migratetype``”h]”jS)�”}”(hj6/h]”hŒenum migratetype migratetype”…”�”}”(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:113: ./mm/page_alloc.c”h´Mhj0/ubjÉ)�”}”(hhh]”jM)�”}”(hŒmigratetype to set”h]”hŒmigratetype to set”…”�”}”(hjO/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M hjL/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj0/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jK/h´Mhjô.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjØ.ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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:113: ./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Œ__move_freepages_block_isolate”h]”j)�”}”(hŒ__move_freepages_block_isolate”h]”hŒ__move_freepages_block_isolate”…”�”}”(hj°/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¬/ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjŒ/h²hh³j�/h´Mubj8)�”}”(hŒ4(struct zone *zone, struct page *page, bool isolate)”h]”(j>)�”}”(hŒstruct zone *zone”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÌ/h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÈ/ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙ/h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÈ/ubh)�”}”(hhh]”j)�”}”(hŒzone”h]”hŒzone”…”�”}”(hjê/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjç/ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jì/Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj²/sbŒ c.__move_freepages_block_isolate”†”asbuh1hhjÈ/ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 0h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÈ/ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÈ/ubj)�”}”(hŒzone”h]”hŒzone”…”�”}”(hj%0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÈ/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÄ/ubj>)�”}”(hŒstruct page *page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj>0h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj:0ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjK0h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj:0ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj\0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjY0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j^0Œmodname”NŒ classname”Njìjï)�”}”jò]”j0Œ c.__move_freepages_block_isolate”†”asbuh1hhj:0ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjz0h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj:0ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjˆ0h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj:0ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj•0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj:0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÄ/ubj>)�”}”(hŒ bool isolate”h]”(já)�”}”(hj½h]”hŒbool”…”�”}”(hj®0h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjª0ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»0h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjª0ubj)�”}”(hŒisolate”h]”hŒisolate”…”�”}”(hjÉ0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjª0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÄ/ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjŒ/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Œ+move free pages in block for page isolation”h]”hŒ+move free pages in block for page isolation”…”�”}”(hjó0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mhjð0h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj…/h²hh³j�/h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj 1jHj 1jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hj1h]”hŒ Parameters”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M"hj1ubj¤)�”}”(hhh]”(j©)�”}”(hŒ``struct zone *zone`` the zone ”h]”(j¯)�”}”(hŒ``struct zone *zone``”h]”jS)�”}”(hj41h]”hŒstruct zone *zone”…”�”}”(hj61h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj21ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mhj.1ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe zone”h]”hŒthe zone”…”�”}”(hjM1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jI1h´MhjJ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj.1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jI1h´Mhj+1ubj©)�”}”(hŒ)``struct page *page`` the pageblock page ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hjm1h]”hŒstruct page *page”…”�”}”(hjo1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjk1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M hjg1ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe pageblock page”h]”hŒthe pageblock page”…”�”}”(hj†1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‚1h´M hjƒ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjg1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‚1h´M hj+1ubj©)�”}”(hŒ@``bool isolate`` to isolate the given pageblock or unisolate it ”h]”(j¯)�”}”(hŒ``bool isolate``”h]”jS)�”}”(hj¦1h]”hŒ bool isolate”…”�”}”(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:113: ./mm/page_alloc.c”h´M!hj 1ubjÉ)�”}”(hhh]”jM)�”}”(hŒ.to isolate the given pageblock or unisolate it”h]”hŒ.to isolate the given pageblock or unisolate it”…”�”}”(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+1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj1ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjá1h]”hŒ Description”…”�”}”(hjã1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjß1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M#hj1ubjM)�”}”(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.”…”�”}”(hj÷1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M"hj1ubjM)�”}”(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.”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M&hj1ubjM)�”}”(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.”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M*hj1ubjM)�”}”(hŒ>Returns ``true`` if pages could be moved, ``false`` otherwise.”h]”(hŒReturns ”…”�”}”(hj$2h²hh³Nh´NubjS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj,2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj$2ubhŒ if pages could be moved, ”…”�”}”(hj$2h²hh³Nh´NubjS)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj>2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj$2ubhŒ otherwise.”…”�”}”(hj$2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M-hj1ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$__putback_isolated_page (C function)”Œc.__putback_isolated_page”hNt”auh1hÜhjKò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”…”�”}”(hjw2h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjs2h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M^ ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†2h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjs2h²hh³j…2h´M^ ubhÿ)�”}”(hŒ__putback_isolated_page”h]”j)�”}”(hŒ__putback_isolated_page”h]”hŒ__putback_isolated_page”…”�”}”(hj˜2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj”2ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjs2h²hh³j…2h´M^ ubj8)�”}”(hŒ/(struct page *page, unsigned int order, int mt)”h]”(j>)�”}”(hŒstruct page *page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj´2h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj°2ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁ2h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj°2ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÒ2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÏ2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÔ2Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjš2sbŒc.__putback_isolated_page”†”asbuh1hhj°2ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjò2h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj°2ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj°2ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj 3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj°2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¬2ubj>)�”}”(hŒunsigned int order”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj&3h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj"3ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj43h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj"3ubjá)�”}”(hŒint”h]”hŒint”…”�”}”(hjB3h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj"3ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjP3h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj"3ubj)�”}”(hŒorder”h]”hŒorder”…”�”}”(hj^3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj"3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¬2ubj>)�”}”(hŒint mt”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjw3h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjs3ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…3h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjs3ubj)�”}”(hŒmt”h]”hŒmt”…”�”}”(hj“3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjs3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¬2ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjs2h²hh³j…2h´M^ ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjo2h²hh³j…2h´M^ ubah}”(h]”jj2ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j…2h´M^ hjl2h²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½3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M^ hjº3h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjl2h²hh³j…2h´M^ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÕ3jHjÕ3jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjß3h]”hŒ Parameters”…”�”}”(hjá3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÝ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mb hjÙ3ubj¤)�”}”(hhh]”(j©)�”}”(hŒ-``struct page *page`` Page that was isolated ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hjþ3h]”hŒstruct page *page”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjü3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M_ hjø3ubjÉ)�”}”(hhh]”jM)�”}”(hŒPage that was isolated”h]”hŒPage that was isolated”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j4h´M_ hj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjø3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j4h´M_ hjõ3ubj©)�”}”(hŒ2``unsigned int order`` Order of the isolated page ”h]”(j¯)�”}”(hŒ``unsigned int order``”h]”jS)�”}”(hj74h]”hŒunsigned int order”…”�”}”(hj94h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj54ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M` hj14ubjÉ)�”}”(hhh]”jM)�”}”(hŒOrder of the isolated page”h]”hŒOrder of the isolated page”…”�”}”(hjP4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jL4h´M` hjM4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj14ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jL4h´M` hjõ3ubj©)�”}”(hŒ.``int mt`` The page's pageblock's migratetype ”h]”(j¯)�”}”(hŒ ``int mt``”h]”jS)�”}”(hjp4h]”hŒint mt”…”�”}”(hjr4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjn4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Ma hjj4ubjÉ)�”}”(hhh]”jM)�”}”(hŒ"The page's pageblock's migratetype”h]”hŒ&The page’s pageblock’s migratetype”…”�”}”(hj‰4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j…4h´Ma hj†4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j…4h´Ma hjõ3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÙ3ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj«4h]”hŒ Description”…”�”}”(hj­4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj©4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mc hjÙ3ubjM)�”}”(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Á4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mb hjÙ3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ__free_pages (C function)”Œc.__free_pages”hNt”auh1hÜhjKò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ð4h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjì4h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M²ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ4h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjì4h²hh³jþ4h´M²ubhÿ)�”}”(hŒ __free_pages”h]”j)�”}”(hŒ __free_pages”h]”hŒ __free_pages”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj 5ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjì4h²hh³jþ4h´M²ubj8)�”}”(hŒ'(struct page *page, unsigned int order)”h]”(j>)�”}”(hŒstruct page *page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj-5h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj)5ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:5h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj)5ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjK5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjH5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jM5Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj5sbŒc.__free_pages”†”asbuh1hhj)5ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjk5h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj)5ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjy5h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj)5ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj†5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj)5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj%5ubj>)�”}”(hŒunsigned int order”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjŸ5h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj›5ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­5h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj›5ubjá)�”}”(hŒint”h]”hŒint”…”�”}”(hj»5h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj›5ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉ5h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj›5ubj)�”}”(hŒorder”h]”hŒorder”…”�”}”(hj×5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj›5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj%5ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjì4h²hh³jþ4h´M²ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjè4h²hh³jþ4h´M²ubah}”(h]”jã4ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jþ4h´M²hjå4h²hubj4)�”}”(hhh]”jM)�”}”(hŒ(Free pages allocated with alloc_pages().”h]”hŒ(Free pages allocated with alloc_pages().”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M²hjþ5h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjå4h²hh³jþ4h´M²ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj6jHj6jI‰jJ‰jK‰uh1híh²hhjKò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#6h]”hŒ Parameters”…”�”}”(hj%6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj!6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M¶hj6ubj¤)�”}”(hhh]”(j©)�”}”(hŒD``struct page *page`` The page pointer returned from alloc_pages(). ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hjB6h]”hŒstruct page *page”…”�”}”(hjD6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj@6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M³hj<6ubjÉ)�”}”(hhh]”jM)�”}”(hŒ-The page pointer returned from alloc_pages().”h]”hŒ-The page pointer returned from alloc_pages().”…”�”}”(hj[6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jW6h´M³hjX6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj<6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jW6h´M³hj96ubj©)�”}”(hŒ4``unsigned int order`` The order of the allocation. ”h]”(j¯)�”}”(hŒ``unsigned int order``”h]”jS)�”}”(hj{6h]”hŒunsigned int order”…”�”}”(hj}6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjy6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M´hju6ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe order of the allocation.”h]”hŒThe order of the allocation.”…”�”}”(hj”6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�6h´M´hj‘6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhju6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�6h´M´hj96ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj6ubjM)�”}”(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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M¶hj6ubjM)�”}”(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Ì6h²hh³Nh´NubjŽ)�”}”(hŒ **order**”h]”hŒorder”…”�”}”(hjÔ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÌ6ubhŒŽ 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Ì6h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mµhj6ubjM)�”}”(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í6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mºhj6ubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjþ6h]”hŒContext”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjü6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MÁhj6ubjM)�”}”(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.”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MÂhj6ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfree_pages (C function)”Œ c.free_pages”hNt”auh1hÜhjKò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”…”�”}”(hjC7h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj?7h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MÕubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjR7h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj?7h²hh³jQ7h´MÕubhÿ)�”}”(hŒ free_pages”h]”j)�”}”(hŒ free_pages”h]”hŒ free_pages”…”�”}”(hjd7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj`7ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj?7h²hh³jQ7h´MÕubj8)�”}”(hŒ((unsigned long addr, unsigned int order)”h]”(j>)�”}”(hŒunsigned long addr”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj€7h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj|7ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽ7h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj|7ubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjœ7h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj|7ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª7h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj|7ubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj¸7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj|7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjx7ubj>)�”}”(hŒunsigned int order”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÑ7h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÍ7ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß7h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÍ7ubjá)�”}”(hŒint”h]”hŒint”…”�”}”(hjí7h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÍ7ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjû7h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÍ7ubj)�”}”(hŒorder”h]”hŒorder”…”�”}”(hj 8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÍ7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjx7ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj?7h²hh³jQ7h´MÕubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj;7h²hh³jQ7h´MÕubah}”(h]”j67ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jQ7h´MÕhj87h²hubj4)�”}”(hhh]”jM)�”}”(hŒ-Free pages allocated with __get_free_pages().”h]”hŒ-Free pages allocated with __get_free_pages().”…”�”}”(hj38h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MÕhj08h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj87h²hh³jQ7h´MÕubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjK8jHjK8jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjU8h]”hŒ Parameters”…”�”}”(hjW8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjS8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MÙhjO8ubj¤)�”}”(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)�”}”(hjt8h]”hŒunsigned long addr”…”�”}”(hjv8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjr8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MÖhjn8ubjÉ)�”}”(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�8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‰8h´MÖhjŠ8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjn8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‰8h´MÖhjk8ubj©)�”}”(hŒ4``unsigned int order`` The order of the allocation. ”h]”(j¯)�”}”(hŒ``unsigned int order``”h]”jS)�”}”(hj­8h]”hŒunsigned int order”…”�”}”(hj¯8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj«8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M×hj§8ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe order of the allocation.”h]”hŒThe order of the allocation.”…”�”}”(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×hjk8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjO8ubjM)�”}”(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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MÙhjO8ubjM)�”}”(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.”…”�”}”(hjþ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MØhjO8ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒalloc_pages_exact (C function)”Œc.alloc_pages_exact”hNt”auh1hÜhjKò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-9h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj)9h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mûubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<9h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj)9h²hh³j;9h´Mûubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjJ9h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj)9h²hh³j;9h´Mûubhÿ)�”}”(hŒalloc_pages_exact”h]”j)�”}”(hŒalloc_pages_exact”h]”hŒalloc_pages_exact”…”�”}”(hj[9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjW9ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj)9h²hh³j;9h´Mûubj8)�”}”(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”…”�”}”(hjz9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjw9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j|9Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj]9sbŒc.alloc_pages_exact”†”asbuh1hhjs9ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjš9h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjs9ubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj¨9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjs9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjo9ubj>)�”}”(hŒgfp_t gfp_mask”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”jèŒ reftarget”jÆ9Œmodname”NŒ classname”Njìjï)�”}”jò]”j–9Œc.alloc_pages_exact”†”asbuh1hhj½9ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâ9h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj½9ubj)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hjð9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj½9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjo9ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj)9h²hh³j;9h´Mûubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj%9h²hh³j;9h´Mûubah}”(h]”j 9ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j;9h´Mûhj"9h²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:113: ./mm/page_alloc.c”h´Mûhj:h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj"9h²hh³j;9h´Mûubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj2:jHj2:jI‰jJ‰jK‰uh1híh²hhjKò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:113: ./mm/page_alloc.c”h´Mÿhj6: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&]”uh1jRhjY:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MühjU:ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe number of bytes to allocate”h]”hŒthe number of bytes to allocate”…”�”}”(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: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)�”}”(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:113: ./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”…”�”}”(hj­:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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£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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mÿhj6: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.”…”�”}”(hjå:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mþhj6:ubjM)�”}”(hŒ0This function is also limited by MAX_PAGE_ORDER.”h]”hŒ0This function is also limited by MAX_PAGE_ORDER.”…”�”}”(hjô:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mhj6: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().”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mhj6: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:113: ./mm/page_alloc.c”h´Mhj6: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”…”�”}”(hj2;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:113: ./mm/page_alloc.c”h´Mhj6:ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(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:113: ./mm/page_alloc.c”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjz;h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjg;h²hh³jy;h´Mubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjˆ;h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjg;h²hh³jy;h´Mubhÿ)�”}”(hŒalloc_pages_exact_nid”h]”j)�”}”(hŒalloc_pages_exact_nid”h]”hŒalloc_pages_exact_nid”…”�”}”(hj™;h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj•;ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjg;h²hh³jy;h´Mubj8)�”}”(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à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Œ 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”jèŒ reftarget”jï;Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj›;sbŒ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Œ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”…”�”}”(hj7<h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j9<Œmodname”NŒ classname”Njìjï)�”}”jò]”j <Œc.alloc_pages_exact_nid”†”asbuh1hhj0<ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjU<h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj0<ubj)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hjc<h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj0<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj­;ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjg;h²hh³jy;h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjc;h²hh³jy;h´Mubah}”(h]”j^;ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jy;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:113: ./mm/page_alloc.c”h´MhjŠ<h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj`;h²hh³jy;h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¥<jHj¥<jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(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:113: ./mm/page_alloc.c”h´Mhj©<ubj¤)�”}”(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:113: ./mm/page_alloc.c”h´MhjÈ<ubjÉ)�”}”(hhh]”jM)�”}”(hŒ6the preferred node ID where memory should be allocated”h]”hŒ6the preferred node ID where memory should be allocated”…”�”}”(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Œ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:113: ./mm/page_alloc.c”h´Mhj=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´Mhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j=h´MhjÅ<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)�”}”(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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./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”…”�”}”(hjY=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jU=h´MhjV=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj:=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jU=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�hjy=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mhj©<ubjM)�”}”(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:113: ./mm/page_alloc.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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mhj©<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:113: ./mm/page_alloc.c”h´M hj©<ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfree_pages_exact (C function)”Œc.free_pages_exact”hNt”auh1hÜhjKò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”…”�”}”(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:113: ./mm/page_alloc.c”h´M1ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjõ=h²hh³j>h´M1ubhÿ)�”}”(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þhjõ=h²hh³j>h´M1ubj8)�”}”(hŒ(void *virt, size_t size)”h]”(j>)�”}”(hŒ void *virt”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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>ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjR>h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj2>ubj)�”}”(hŒvirt”h]”hŒvirt”…”�”}”(hj_>h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2>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&]”uh1jhjx>ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j}>Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj>sbŒc.free_pages_exact”†”asbuh1hhjt>ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›>h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjt>ubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(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&]”jjuh1j7hjõ=h²hh³j>h´M1ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjñ=h²hh³j>h´M1ubah}”(h]”jì=ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j>h´M1hjî=h²hubj4)�”}”(hhh]”jM)�”}”(hŒ0release memory allocated via alloc_pages_exact()”h]”hŒ0release memory allocated via 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:113: ./mm/page_alloc.c”h´M1hjÐ>h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjî=h²hh³j>h´M1ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjë>jHjë>jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(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:113: ./mm/page_alloc.c”h´M5hjï>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:113: ./mm/page_alloc.c”h´M2hj?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´M2hj*?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j)?h´M2hj ?ubj©)�”}”(hŒQ``size_t size`` size of allocation, same value as passed to alloc_pages_exact(). ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hjM?h]”hŒ size_t size”…”�”}”(hjO?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjK?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M3hjG?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().”…”�”}”(hjf?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jb?h´M3hjc?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjG?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jb?h´M3hj ?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:113: ./mm/page_alloc.c”h´M5hjï>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:113: ./mm/page_alloc.c”h´M4hjï>ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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àhjÉ?h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MDubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜ?h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÉ?h²hh³jÛ?h´MDubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjê?h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÉ?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´MDubhÿ)�”}”(hŒnr_free_zone_pages”h]”j)�”}”(hŒnr_free_zone_pages”h]”hŒnr_free_zone_pages”…”�”}”(hj @h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj@ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÉ?h²hh³jÛ?h´MDubj8)�”}”(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Œ ”…”�”}”(hj4@h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj"@ubj)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(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&]”jjuh1j7hjÉ?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Œ+count number of pages beyond high watermark”h]”hŒ+count number of pages beyond high watermark”…”�”}”(hjl@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MDhji@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²hhjKò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:113: ./mm/page_alloc.c”h´MHhjˆ@ubj¤)�”}”(hhh]”j©)�”}”(hŒ2``int offset`` The zone index of the highest zone ”h]”(j¯)�”}”(hŒ``int offset``”h]”jS)�”}”(hj­@h]”hŒ int offset”…”�”}”(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:113: ./mm/page_alloc.c”h´MEhj§@ubjÉ)�”}”(hhh]”jM)�”}”(hŒ"The zone index of the highest zone”h]”hŒ"The zone index of the highest zone”…”�”}”(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:113: ./mm/page_alloc.c”h´MGhjˆ@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:”…”�”}”(hjþ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MFhjˆ@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”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MJhj Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jAh´MJhjˆ@ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj(Ah]”hŒReturn”…”�”}”(hj*Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj&Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MLhjˆ@ubjM)�”}”(hŒ&number of pages beyond high watermark.”h]”hŒ&number of pages beyond high watermark.”…”�”}”(hj>Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MMhjˆ@ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hjmAh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjiAh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mdubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|Ah²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjiAh²hh³j{Ah´Mdubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjŠAh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjiAh²hh³j{Ah´Mdubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜Ah²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjiAh²hh³j{Ah´Mdubhÿ)�”}”(hŒnr_free_buffer_pages”h]”j)�”}”(hŒnr_free_buffer_pages”h]”hŒnr_free_buffer_pages”…”�”}”(hjªAh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦Aubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjiAh²hh³j{Ah´Mdubj8)�”}”(hŒ(void)”h]”j>)�”}”(hŒvoid”h]”já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÆAh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÂAubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¾Aubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjiAh²hh³j{Ah´Mdubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjeAh²hh³j{Ah´Mdubah}”(h]”j`Aah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j{Ah´MdhjbAh²hubj4)�”}”(hhh]”jM)�”}”(hŒ+count number of pages beyond high watermark”h]”hŒ+count number of pages beyond high watermark”…”�”}”(hjðAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MdhjíAh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjbAh²hh³j{Ah´Mdubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjBjHjBjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjBh]”hŒ Parameters”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mhhj Bubj¤)�”}”(hhh]”j©)�”}”(hŒ``void`` no arguments ”h]”(j¯)�”}”(hŒ``void``”h]”jS)�”}”(hj1Bh]”hŒvoid”…”�”}”(hj3Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj/Bubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Khj+BubjÉ)�”}”(hhh]”jM)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjJBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jFBh´KhjGBubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj+Bubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jFBh´Khj(Bubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj BubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjlBh]”hŒ Description”…”�”}”(hjnBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Khj BubjM)�”}”(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‚Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mehj BubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj“Bh]”hŒReturn”…”�”}”(hj•Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‘Bubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mhhj BubjM)�”}”(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.”…”�”}”(hj©Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mihj Bubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ#find_next_best_node_in (C function)”Œc.find_next_best_node_in”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ_int find_next_best_node_in (int node, nodemask_t *used_node_mask, const nodemask_t *candidates)”h]”hù)�”}”(hŒ^int find_next_best_node_in(int node, nodemask_t *used_node_mask, const nodemask_t *candidates)”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjØBh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÔBh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.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ÿ)�”}”(hŒfind_next_best_node_in”h]”j)�”}”(hŒfind_next_best_node_in”h]”hŒfind_next_best_node_in”…”�”}”(hjùBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjõBubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÔBh²hh³jæBh´M°ubj8)�”}”(hŒD(int node, nodemask_t *used_node_mask, const nodemask_t *candidates)”h]”(j>)�”}”(hŒint node”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjCubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#Ch²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjCubj)�”}”(hŒnode”h]”hŒnode”…”�”}”(hj1Ch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjCubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj Cubj>)�”}”(hŒnodemask_t *used_node_mask”h]”(h)�”}”(hhh]”j)�”}”(hŒ nodemask_t”h]”hŒ nodemask_t”…”�”}”(hjMCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjJCubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jOCŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjûBsbŒc.find_next_best_node_in”†”asbuh1hhjFCubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmCh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjFCubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj{Ch²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjFCubj)�”}”(hŒused_node_mask”h]”hŒused_node_mask”…”�”}”(hjˆCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjFCubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj Cubj>)�”}”(hŒconst nodemask_t *candidates”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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�Cubh)�”}”(hhh]”j)�”}”(hŒ nodemask_t”h]”hŒ nodemask_t”…”�”}”(hj¿Ch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¼Cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÁCŒmodname”NŒ classname”Njìjï)�”}”jò]”jiCŒc.find_next_best_node_in”†”asbuh1hhj�Cubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝCh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�Cubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjëCh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj�Cubj)�”}”(hŒ candidates”h]”hŒ candidates”…”�”}”(hjøCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�Cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj Cubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÔ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Œ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"Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M°hjDh²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²hhjKò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 ``const nodemask_t *candidates`` nodemask_t of nodes eligible for selection **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Ž)�”}”(hjDDh]”hŒ Parameters”…”�”}”(hjFDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjBDubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M´hj>Dubj¤)�”}”(hhh]”(j©)�”}”(hŒ6``int node`` node whose fallback list we're appending ”h]”(j¯)�”}”(hŒ ``int node``”h]”jS)�”}”(hjcDh]”hŒint node”…”�”}”(hjeDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjaDubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M±hj]DubjÉ)�”}”(hhh]”jM)�”}”(hŒ(node whose fallback list we're appending”h]”hŒ*node whose fallback list we’re appending”…”�”}”(hj|Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jxDh´M±hjyDubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj]Dubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jxDh´M±hjZDubj©)�”}”(hŒ@``nodemask_t *used_node_mask`` nodemask_t of already used nodes ”h]”(j¯)�”}”(hŒ``nodemask_t *used_node_mask``”h]”jS)�”}”(hjœDh]”hŒnodemask_t *used_node_mask”…”�”}”(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:113: ./mm/page_alloc.c”h´M²hj–DubjÉ)�”}”(hhh]”jM)�”}”(hŒ nodemask_t of already used nodes”h]”hŒ nodemask_t of already used nodes”…”�”}”(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²hjZDubj©)�”}”(hŒL``const nodemask_t *candidates`` nodemask_t of nodes eligible for selection ”h]”(j¯)�”}”(hŒ ``const nodemask_t *candidates``”h]”jS)�”}”(hjÕDh]”hŒconst nodemask_t *candidates”…”�”}”(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:113: ./mm/page_alloc.c”h´M³hjÏDubjÉ)�”}”(hhh]”jM)�”}”(hŒ*nodemask_t of nodes eligible for selection”h]”hŒ*nodemask_t of nodes eligible for selection”…”�”}”(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³hjZDubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj>DubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjEh]”hŒ Description”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjEubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mµhj>DubjM)�”}”(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&Eh²hh³Nh´NubjŽ)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hj.Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj&EubhX.’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&Eh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M´hj>DubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjIEh]”hŒReturn”…”�”}”(hjKEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjGEubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M¼hj>DubjM)�”}”(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_Eh²hh³Nh´NubjS)�”}”(hŒ``NUMA_NO_NODE``”h]”hŒ NUMA_NO_NODE”…”�”}”(hjgEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj_EubhŒ if no node is found.”…”�”}”(hj_Eh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M½hj>Dubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ free_reserved_pages (C function)”Œc.free_reserved_pages”hNt”auh1hÜhjKò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”…”�”}”(hj Eh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjœEh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯Eh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjœEh²hh³j®Eh´Mubhÿ)�”}”(hŒfree_reserved_pages”h]”j)�”}”(hŒfree_reserved_pages”h]”hŒfree_reserved_pages”…”�”}”(hjÁEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj½Eubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjœEh²hh³j®Eh´Mubj8)�”}”(hŒ'(struct page *page, unsigned int order)”h]”(j>)�”}”(hŒstruct page *page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÝEh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÙEubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêEh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÙEubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjûEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjøEubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jýEŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÃEsbŒc.free_reserved_pages”†”asbuh1hhjÙEubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÙEubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj)Fh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÙEubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj6Fh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÕEubj>)�”}”(hŒunsigned int order”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjOFh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjKFubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]Fh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjKFubjá)�”}”(hŒint”h]”hŒint”…”�”}”(hjkFh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjKFubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyFh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjKFubj)�”}”(hŒorder”h]”hŒorder”…”�”}”(hj‡Fh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjKFubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÕEubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjœEh²hh³j®Eh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj˜Eh²hh³j®Eh´Mubah}”(h]”j“Eah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j®Eh´Mhj•Eh²hubj4)�”}”(hhh]”jM)�”}”(hŒfree reserved pages”h]”hŒfree reserved pages”…”�”}”(hj±Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mhj®Fh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj•Eh²hh³j®Eh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÉFjHjÉFjI‰jJ‰jK‰uh1híh²hhjKò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ÓFh]”hŒ Parameters”…”�”}”(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:113: ./mm/page_alloc.c”h´M!hjÍFubj¤)�”}”(hhh]”(j©)�”}”(hŒ*``struct page *page`` First page to free. ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hjòFh]”hŒstruct page *page”…”�”}”(hjôFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjðFubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MhjìFubjÉ)�”}”(hhh]”jM)�”}”(hŒFirst page to free.”h]”hŒFirst page to free.”…”�”}”(hj Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jGh´MhjGubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjìFubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jGh´MhjéFubj©)�”}”(hŒ/``unsigned int order`` The page order to free. ”h]”(j¯)�”}”(hŒ``unsigned int order``”h]”jS)�”}”(hj+Gh]”hŒunsigned int order”…”�”}”(hj-Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj)Gubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mhj%GubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page order to free.”h]”hŒThe page order to free.”…”�”}”(hjDGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j@Gh´MhjAGubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj%Gubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j@Gh´MhjéFubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÍFubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjfGh]”hŒ Description”…”�”}”(hjhGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjdGubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M!hjÍFubjM)�”}”(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.”…”�”}”(hj|Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M hjÍFubjM)�”}”(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”…”�”}”(hj�Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‹GubhŒq must be naturally aligned to the order and the order must not exceed MAX_PAGE_ORDER. All pages must be reserved.”…”�”}”(hj‹Gh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M#hjÍFubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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ÈGh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÄGh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×Gh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÄGh²hh³jÖGh´Mubhÿ)�”}”(hŒsetup_per_zone_wmarks”h]”j)�”}”(hŒsetup_per_zone_wmarks”h]”hŒsetup_per_zone_wmarks”…”�”}”(hjéGh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjåGubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÄGh²hh³jÖGh´Mubj8)�”}”(hŒ(void)”h]”j>)�”}”(hŒvoid”h]”já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjHubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjýGubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÄGh²hh³jÖGh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÀGh²hh³jÖGh´Mubah}”(h]”j»Gah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÖGh´Mhj½Gh²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/Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mhj,Hh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj½Gh²hh³jÖGh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjGHjHjGHjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjQHh]”hŒ Parameters”…”�”}”(hjSHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjOHubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MhjKHubj¤)�”}”(hhh]”j©)�”}”(hŒ``void`` no arguments ”h]”(j¯)�”}”(hŒ``void``”h]”jS)�”}”(hjpHh]”hŒvoid”…”�”}”(hjrHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjnHubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´KhjjHubjÉ)�”}”(hhh]”jM)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj‰Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j…Hh´Khj†Hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjjHubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j…Hh´KhjgHubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjKHubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj«Hh]”hŒ Description”…”�”}”(hj­Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj©Hubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´KhjKHubjM)�”}”(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ÁHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MhjKHubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ __free_contig_range (C function)”Œc.__free_contig_range”hNt”auh1hÜhjKò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ðHh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjìHh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.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Œ__free_contig_range”h]”j)�”}”(hŒ__free_contig_range”h]”hŒ__free_contig_range”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Iubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjìHh²hh³jþHh´M±ubj8)�”}”(hŒ+(unsigned long pfn, unsigned long nr_pages)”h]”(j>)�”}”(hŒunsigned long pfn”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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Œlong”h]”hŒlong”…”�”}”(hjIIh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj)Iubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWIh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj)Iubj)�”}”(hŒpfn”h]”hŒpfn”…”�”}”(hjeIh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj)Iubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj%Iubj>)�”}”(hŒunsigned long nr_pages”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj~Ih²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjzIubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒIh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjzIubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjšIh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjzIubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨Ih²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjzIubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hj¶Ih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjzIubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj%Iubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjì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Œ'Free contiguous range of order-0 pages.”h]”hŒ'Free contiguous range of order-0 pages.”…”�”}”(hjàIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.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²hhjKò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Ž)�”}”(hjJh]”hŒ Parameters”…”�”}”(hjJh²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:113: ./mm/page_alloc.c”h´MµhjüIubj¤)�”}”(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!Jh]”hŒunsigned long pfn”…”�”}”(hj#Jh²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:113: ./mm/page_alloc.c”h´M²hjJubjÉ)�”}”(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:Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j6Jh´M²hj7Jubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjJubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j6Jh´M²hjJubj©)�”}”(hŒ4``unsigned long nr_pages`` Number of pages to free. ”h]”(j¯)�”}”(hŒ``unsigned long nr_pages``”h]”jS)�”}”(hjZJh]”hŒunsigned long nr_pages”…”�”}”(hj\Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjXJubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M³hjTJubjÉ)�”}”(hhh]”jM)�”}”(hŒNumber of pages to free.”h]”hŒNumber of pages to free.”…”�”}”(hjsJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³joJh´M³hjpJubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjTJubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³joJh´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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MµhjüIubjM)�”}”(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.”…”�”}”(hj«Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M´hjüIubjM)�”}”(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.”…”�”}”(hjºJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M¹hjüIubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjËJh]”hŒContext”…”�”}”(hjÍJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÉJubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M½hjüIubjM)�”}”(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áJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M¾hjüIubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj Kh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MSubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj Kh²hh³jKh´MSubhÿ)�”}”(hŒalloc_contig_frozen_range”h]”j)�”}”(hŒalloc_contig_frozen_range”h]”hŒalloc_contig_frozen_range”…”�”}”(hj1Kh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj-Kubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj Kh²hh³jKh´MSubj8)�”}”(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”…”�”}”(hjMKh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjIKubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[Kh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjIKubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjiKh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjIKubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwKh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjIKubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj…Kh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjIKubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjEKubj>)�”}”(hŒunsigned long end”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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Œlong”h]”hŒlong”…”�”}”(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Œend”h]”hŒend”…”�”}”(hjÖKh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjšKubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjEKubj>)�”}”(hŒacr_flags_t alloc_flags”h]”(h)�”}”(hhh]”j)�”}”(hŒ acr_flags_t”h]”hŒ acr_flags_t”…”�”}”(hjòKh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjïKubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jôKŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj3KsbŒc.alloc_contig_frozen_range”†”asbuh1hhjëKubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjëKubj)�”}”(hŒ alloc_flags”h]”hŒ alloc_flags”…”�”}”(hj Lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjëKubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjEKubj>)�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjLŒmodname”NŒ classname”Njìjï)�”}”jò]”jLŒc.alloc_contig_frozen_range”†”asbuh1hhj5Lubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZLh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj5Lubj)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hjhLh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj5Lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjEKubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj Kh²hh³jKh´MSubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjKh²hh³jKh´MSubah}”(h]”jKah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jKh´MShjKh²hubj4)�”}”(hhh]”j^)�”}”(hhh]”jc)�”}”(hŒ-tries to allocate given range of frozen pages”h]”jM)�”}”(hj—Lh]”hŒ-tries to allocate given range of frozen pages”…”�”}”(hj™Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MShj•Lubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj’Lh²hh³j¦Lh´Nubah}”(h]”h ]”h"]”h$]”h&]”j‚jƒuh1j]h³j¦Lh´MShj�Lh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjKh²hh³jKh´MSubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¼LjHj¼LjI‰jJ‰jK‰uh1híh²hhjKò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ÆLh]”hŒ Parameters”…”�”}”(hjÈLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÄLubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MWhjÀLubj¤)�”}”(hhh]”(j©)�”}”(hŒ.``unsigned long start`` start PFN to allocate ”h]”(j¯)�”}”(hŒ``unsigned long start``”h]”jS)�”}”(hjåLh]”hŒunsigned long start”…”�”}”(hjçLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjãLubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MThjßLubjÉ)�”}”(hhh]”jM)�”}”(hŒstart PFN to allocate”h]”hŒstart PFN to allocate”…”�”}”(hjþLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³júLh´MThjûLubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjßLubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³júLh´MThjÜLubj©)�”}”(hŒ8``unsigned long end`` one-past-the-last PFN to allocate ”h]”(j¯)�”}”(hŒ``unsigned long end``”h]”jS)�”}”(hjMh]”hŒunsigned long end”…”�”}”(hj Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MUhjMubjÉ)�”}”(hhh]”jM)�”}”(hŒ!one-past-the-last PFN to allocate”h]”hŒ!one-past-the-last PFN to allocate”…”�”}”(hj7Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j3Mh´MUhj4Mubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjMubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j3Mh´MUhjÜLubj©)�”}”(hŒ3``acr_flags_t alloc_flags`` allocation information ”h]”(j¯)�”}”(hŒ``acr_flags_t alloc_flags``”h]”jS)�”}”(hjWMh]”hŒacr_flags_t alloc_flags”…”�”}”(hjYMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjUMubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MVhjQMubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation information”h]”hŒallocation information”…”�”}”(hjpMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jlMh´MVhjmMubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjQMubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jlMh´MVhjÜLubj©)�”}”(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)�”}”(hj�Mh]”hŒgfp_t gfp_mask”…”�”}”(hj’Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjŽMubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MYhjŠMubjÉ)�”}”(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.”…”�”}”(hj©Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MWhj¦Mubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjŠMubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¥Mh´MYhjÜLubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÀLubjM)�”}”(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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M[hjÀLubjM)�”}”(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âMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MZhjÀLubjM)�”}”(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ñMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M]hjÀLubjM)�”}”(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.”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MahjÀLubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjNh]”hŒReturn”…”�”}”(hjNh²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:113: ./mm/page_alloc.c”h´MfhjÀLubjM)�”}”(hŒ'zero on success or negative error code.”h]”hŒ'zero on success or negative error code.”…”�”}”(hj'Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MghjÀLubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒalloc_contig_range (C function)”Œc.alloc_contig_range”hNt”auh1hÜhjKò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”…”�”}”(hjVNh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjRNh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Möubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeNh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjRNh²hh³jdNh´Möubhÿ)�”}”(hŒalloc_contig_range”h]”j)�”}”(hŒalloc_contig_range”h]”hŒalloc_contig_range”…”�”}”(hjwNh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjsNubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjRNh²hh³jdNh´Möubj8)�”}”(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”…”�”}”(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�Nubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(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�Nubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjËNh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�Nubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj‹Nubj>)�”}”(hŒunsigned long end”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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àNubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjàNubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjàNubj)�”}”(hŒend”h]”hŒend”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjàNubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj‹Nubj>)�”}”(hŒacr_flags_t alloc_flags”h]”(h)�”}”(hhh]”j)�”}”(hŒ acr_flags_t”h]”hŒ acr_flags_t”…”�”}”(hj8Oh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj5Oubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j:OŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjyNsbŒc.alloc_contig_range”†”asbuh1hhj1Oubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXOh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj1Oubj)�”}”(hŒ alloc_flags”h]”hŒ alloc_flags”…”�”}”(hjfOh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj1Oubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj‹Nubj>)�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj‚Oh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjOubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j„OŒmodname”NŒ classname”Njìjï)�”}”jò]”jTOŒc.alloc_contig_range”†”asbuh1hhj{Oubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Oh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj{Oubj)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(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&]”jjuh1j7hjRNh²hh³jdNh´Möubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjNNh²hh³jdNh´Möubah}”(h]”jINah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jdNh´MöhjKNh²hubj4)�”}”(hhh]”j^)�”}”(hhh]”jc)�”}”(hŒ&tries to allocate given range of pages”h]”jM)�”}”(hjÝOh]”hŒ&tries to allocate given range of pages”…”�”}”(hjßOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MöhjÛOubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjØOh²hh³jìOh´Nubah}”(h]”h ]”h"]”h$]”h&]”j‚jƒuh1j]h³jìOh´MöhjÕOh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjKNh²hh³jdNh´Möubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjPjHjPjI‰jJ‰jK‰uh1híh²hhjKò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 Ph]”hŒ Parameters”…”�”}”(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:113: ./mm/page_alloc.c”h´MúhjPubj¤)�”}”(hhh]”(j©)�”}”(hŒ.``unsigned long start`` start PFN to allocate ”h]”(j¯)�”}”(hŒ``unsigned long start``”h]”jS)�”}”(hj+Ph]”hŒunsigned long start”…”�”}”(hj-Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj)Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M÷hj%PubjÉ)�”}”(hhh]”jM)�”}”(hŒstart PFN to allocate”h]”hŒstart PFN to allocate”…”�”}”(hjDPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j@Ph´M÷hjAPubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj%Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j@Ph´M÷hj"Pubj©)�”}”(hŒ8``unsigned long end`` one-past-the-last PFN to allocate ”h]”(j¯)�”}”(hŒ``unsigned long end``”h]”jS)�”}”(hjdPh]”hŒunsigned long end”…”�”}”(hjfPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjbPubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Møhj^PubjÉ)�”}”(hhh]”jM)�”}”(hŒ!one-past-the-last PFN to allocate”h]”hŒ!one-past-the-last PFN to allocate”…”�”}”(hj}Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jyPh´MøhjzPubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj^Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jyPh´Møhj"Pubj©)�”}”(hŒ3``acr_flags_t alloc_flags`` allocation information ”h]”(j¯)�”}”(hŒ``acr_flags_t alloc_flags``”h]”jS)�”}”(hj�Ph]”hŒacr_flags_t alloc_flags”…”�”}”(hjŸPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj›Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mùhj—PubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation information”h]”hŒallocation information”…”�”}”(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"Pubj©)�”}”(hŒ``gfp_t gfp_mask`` GFP mask. ”h]”(j¯)�”}”(hŒ``gfp_t gfp_mask``”h]”jS)�”}”(hjÖPh]”hŒgfp_t gfp_mask”…”�”}”(hjØPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÔPubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MúhjÐPubjÉ)�”}”(hhh]”jM)�”}”(hŒ GFP mask.”h]”hŒ GFP mask.”…”�”}”(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"Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjPubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjQh]”hŒ Description”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjQubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MühjPubjM)�”}”(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'Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MûhjPubjM)�”}”(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.”…”�”}”(hj6Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MÿhjPubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjGQh]”hŒReturn”…”�”}”(hjIQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjEQubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MhjPubjM)�”}”(hŒ'zero on success or negative error code.”h]”hŒ'zero on success or negative error code.”…”�”}”(hj]Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MhjPubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjŒQh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjˆQh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MPubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšQh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjˆQh²hh³j™Qh´MPubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj«Qh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¨Qubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j­QŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒalloc_contig_frozen_pages”sbŒc.alloc_contig_frozen_pages”†”asbuh1hhjˆQh²hh³j™Qh´MPubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌQh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjˆQh²hh³j™Qh´MPubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÚQh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjˆQh²hh³j™Qh´MPubhÿ)�”}”(hŒalloc_contig_frozen_pages”h]”j)�”}”(hjÉQh]”hŒalloc_contig_frozen_pages”…”�”}”(hjëQh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjçQubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjˆQh²hh³j™Qh´MPubj8)�”}”(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”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjRubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjRubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj"Rh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjRubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0Rh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjRubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hj>Rh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjþQubj>)�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjZRh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjWRubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j\RŒmodname”NŒ classname”Njìjï)�”}”jò]”jÇQŒc.alloc_contig_frozen_pages”†”asbuh1hhjSRubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxRh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjSRubj)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hj†Rh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjSRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjþQubj>)�”}”(hŒint nid”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjŸRh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj›Rubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­Rh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj›Rubj)�”}”(hŒnid”h]”hŒnid”…”�”}”(hj»Rh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj›Rubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjþQubj>)�”}”(hŒnodemask_t *nodemask”h]”(h)�”}”(hhh]”j)�”}”(hŒ nodemask_t”h]”hŒ nodemask_t”…”�”}”(hj×Rh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÔRubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÙRŒmodname”NŒ classname”Njìjï)�”}”jò]”jÇQŒc.alloc_contig_frozen_pages”†”asbuh1hhjÐRubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõRh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÐRubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÐRubj)�”}”(hŒnodemask”h]”hŒnodemask”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÐRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjþQubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjˆQh²hh³j™Qh´MPubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj„Qh²hh³j™Qh´MPubah}”(h]”jQah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j™Qh´MPhj�Qh²hubj4)�”}”(hhh]”j^)�”}”(hhh]”jc)�”}”(hŒ;tries to find and allocate contiguous range of frozen pages”h]”jM)�”}”(hj?Sh]”hŒ;tries to find and allocate contiguous range of frozen pages”…”�”}”(hjASh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MPhj=Subah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj:Sh²hh³jNSh´Nubah}”(h]”h ]”h"]”h$]”h&]”j‚jƒuh1j]h³jNSh´MPhj7Sh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj�Qh²hh³j™Qh´MPubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjdSjHjdSjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjnSh]”hŒ Parameters”…”�”}”(hjpSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjlSubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MThjhSubj¤)�”}”(hhh]”(j©)�”}”(hŒB``unsigned long nr_pages`` Number of contiguous pages to allocate ”h]”(j¯)�”}”(hŒ``unsigned long nr_pages``”h]”jS)�”}”(hj�Sh]”hŒunsigned long nr_pages”…”�”}”(hj�Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‹Subah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MQhj‡SubjÉ)�”}”(hhh]”jM)�”}”(hŒ&Number of contiguous pages to allocate”h]”hŒ&Number of contiguous pages to allocate”…”�”}”(hj¦Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¢Sh´MQhj£Subah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‡Subeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¢Sh´MQhj„Subj©)�”}”(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ÆSh]”hŒgfp_t gfp_mask”…”�”}”(hjÈSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÄSubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MThjÀSubjÉ)�”}”(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ßSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MRhjÜSubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÀSubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÛSh´MThj„Subj©)�”}”(hŒ``int nid`` Target node ”h]”(j¯)�”}”(hŒ ``int nid``”h]”jS)�”}”(hjTh]”hŒint nid”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjþSubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MUhjúSubjÉ)�”}”(hhh]”jM)�”}”(hŒ Target node”h]”hŒ Target node”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jTh´MUhjTubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjúSubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jTh´MUhj„Subj©)�”}”(hŒ7``nodemask_t *nodemask`` Mask for other possible nodes ”h]”(j¯)�”}”(hŒ``nodemask_t *nodemask``”h]”jS)�”}”(hj9Th]”hŒnodemask_t *nodemask”…”�”}”(hj;Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj7Tubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MVhj3TubjÉ)�”}”(hhh]”jM)�”}”(hŒMask for other possible nodes”h]”hŒMask for other possible nodes”…”�”}”(hjRTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jNTh´MVhjOTubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj3Tubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jNTh´MVhj„Subeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjhSubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjtTh]”hŒ Description”…”�”}”(hjvTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjrTubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MXhjhSubjM)�”}”(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.”…”�”}”(hjŠTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MWhjhSubjM)�”}”(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™Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M]hjhSubjM)�”}”(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.”…”�”}”(hj¨Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MahjhSubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj¹Th]”hŒReturn”…”�”}”(hj»Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj·Tubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MfhjhSubjM)�”}”(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ÏTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MghjhSubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒalloc_contig_pages (C function)”Œc.alloc_contig_pages”hNt”auh1hÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjþTh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjúTh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M¢ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Uh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjúTh²hh³j Uh´M¢ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjUubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jUŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒalloc_contig_pages”sbŒc.alloc_contig_pages”†”asbuh1hhjúTh²hh³j Uh´M¢ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>Uh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjúTh²hh³j Uh´M¢ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjLUh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjúTh²hh³j Uh´M¢ubhÿ)�”}”(hŒalloc_contig_pages”h]”j)�”}”(hj;Uh]”hŒalloc_contig_pages”…”�”}”(hj]Uh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjYUubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjúTh²hh³j Uh´M¢ubj8)�”}”(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”…”�”}”(hjxUh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjtUubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†Uh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjtUubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj”Uh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjtUubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢Uh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjtUubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hj°Uh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjtUubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjpUubj>)�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjÌUh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÉUubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÎUŒmodname”NŒ classname”Njìjï)�”}”jò]”j9UŒc.alloc_contig_pages”†”asbuh1hhjÅUubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêUh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÅUubj)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hjøUh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÅUubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjpUubj>)�”}”(hŒint nid”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj Vubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj Vubj)�”}”(hŒnid”h]”hŒnid”…”�”}”(hj-Vh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Vubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjpUubj>)�”}”(hŒnodemask_t *nodemask”h]”(h)�”}”(hhh]”j)�”}”(hŒ nodemask_t”h]”hŒ nodemask_t”…”�”}”(hjIVh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjFVubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jKVŒmodname”NŒ classname”Njìjï)�”}”jò]”j9UŒc.alloc_contig_pages”†”asbuh1hhjBVubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgVh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjBVubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjuVh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjBVubj)�”}”(hŒnodemask”h]”hŒnodemask”…”�”}”(hj‚Vh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjBVubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjpUubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjúTh²hh³j Uh´M¢ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjöTh²hh³j Uh´M¢ubah}”(h]”jñTah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j Uh´M¢hjóTh²hubj4)�”}”(hhh]”j^)�”}”(hhh]”jc)�”}”(hŒ4tries to find and allocate contiguous range of pages”h]”jM)�”}”(hj±Vh]”hŒ4tries to find and allocate contiguous range of pages”…”�”}”(hj³Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M¢hj¯Vubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj¬Vh²hh³jÀVh´Nubah}”(h]”h ]”h"]”h$]”h&]”j‚jƒuh1j]h³jÀVh´M¢hj©Vh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjóTh²hh³j Uh´M¢ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÖVjHjÖVjI‰jJ‰jK‰uh1híh²hhjKò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àVh]”hŒ Parameters”…”�”}”(hjâVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÞVubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M¦hjÚVubj¤)�”}”(hhh]”(j©)�”}”(hŒB``unsigned long nr_pages`` Number of contiguous pages to allocate ”h]”(j¯)�”}”(hŒ``unsigned long nr_pages``”h]”jS)�”}”(hjÿVh]”hŒunsigned long nr_pages”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjýVubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M£hjùVubjÉ)�”}”(hhh]”jM)�”}”(hŒ&Number of contiguous pages to allocate”h]”hŒ&Number of contiguous pages to allocate”…”�”}”(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Œ``gfp_t gfp_mask`` GFP mask. ”h]”(j¯)�”}”(hŒ``gfp_t gfp_mask``”h]”jS)�”}”(hj8Wh]”hŒgfp_t gfp_mask”…”�”}”(hj:Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj6Wubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M¤hj2WubjÉ)�”}”(hhh]”jM)�”}”(hŒ GFP mask.”h]”hŒ GFP mask.”…”�”}”(hjQWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jMWh´M¤hjNWubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj2Wubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jMWh´M¤hjöVubj©)�”}”(hŒ``int nid`` Target node ”h]”(j¯)�”}”(hŒ ``int nid``”h]”jS)�”}”(hjqWh]”hŒint nid”…”�”}”(hjsWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjoWubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M¥hjkWubjÉ)�”}”(hhh]”jM)�”}”(hŒ Target node”h]”hŒ Target node”…”�”}”(hjŠWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j†Wh´M¥hj‡Wubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjkWubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j†Wh´M¥hjöVubj©)�”}”(hŒ7``nodemask_t *nodemask`` Mask for other possible nodes ”h]”(j¯)�”}”(hŒ``nodemask_t *nodemask``”h]”jS)�”}”(hjªWh]”hŒnodemask_t *nodemask”…”�”}”(hj¬Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¨Wubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M¦hj¤WubjÉ)�”}”(hhh]”jM)�”}”(hŒMask for other possible nodes”h]”hŒMask for other possible nodes”…”�”}”(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ö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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M¨hjÚVubjM)�”}”(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ûWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M§hjÚVubjM)�”}”(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 Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M«hjÚVubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjXh]”hŒReturn”…”�”}”(hjXh²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:113: ./mm/page_alloc.c”h´M®hjÚVubjM)�”}”(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.”…”�”}”(hj1Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´M¯hjÚVubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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`Xh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj\Xh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MÃubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoXh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj\Xh²hh³jnXh´MÃubhÿ)�”}”(hŒfree_contig_frozen_range”h]”j)�”}”(hŒfree_contig_frozen_range”h]”hŒfree_contig_frozen_range”…”�”}”(hj�Xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj}Xubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj\Xh²hh³jnXh´MÃubj8)�”}”(hŒ+(unsigned long pfn, unsigned long nr_pages)”h]”(j>)�”}”(hŒunsigned long pfn”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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Œlong”h]”hŒlong”…”�”}”(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Œpfn”h]”hŒpfn”…”�”}”(hjÕXh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™Xubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj•Xubj>)�”}”(hŒunsigned long nr_pages”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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Œlong”h]”hŒlong”…”�”}”(hj Yh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjêXubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjêXubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hj&Yh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjêXubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj•Xubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj\Xh²hh³jnXh´MÃubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjXXh²hh³jnXh´MÃubah}”(h]”jSXah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jnXh´MÃhjUXh²hubj4)�”}”(hhh]”j^)�”}”(hhh]”jc)�”}”(hŒ)free the contiguous range of frozen pages”h]”jM)�”}”(hjUYh]”hŒ)free the contiguous range of frozen pages”…”�”}”(hjWYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MÃhjSYubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjPYh²hh³jdYh´Nubah}”(h]”h ]”h"]”h$]”h&]”j‚jƒuh1j]h³jdYh´MÃhjMYh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjUXh²hh³jnXh´MÃubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjzYjHjzYjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hj„Yh]”hŒ Parameters”…”�”}”(hj†Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‚Yubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MÇhj~Yubj¤)�”}”(hhh]”(j©)�”}”(hŒ(``unsigned long pfn`` start PFN to free ”h]”(j¯)�”}”(hŒ``unsigned long pfn``”h]”jS)�”}”(hj£Yh]”hŒunsigned long pfn”…”�”}”(hj¥Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¡Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MÄhj�YubjÉ)�”}”(hhh]”jM)�”}”(hŒstart PFN to free”h]”hŒstart PFN to free”…”�”}”(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šYubj©)�”}”(hŒE``unsigned long nr_pages`` Number of contiguous frozen pages to free ”h]”(j¯)�”}”(hŒ``unsigned long nr_pages``”h]”jS)�”}”(hjÜYh]”hŒunsigned long nr_pages”…”�”}”(hjÞYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÚYubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MÅhjÖYubjÉ)�”}”(hhh]”jM)�”}”(hŒ)Number of contiguous frozen pages to free”h]”hŒ)Number of contiguous frozen pages to free”…”�”}”(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šYubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj~YubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjZh]”hŒ Description”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MÇhj~YubjM)�”}”(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-Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MÆhj~Yubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfree_contig_range (C function)”Œc.free_contig_range”hNt”auh1hÜhjKò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\Zh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjXZh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MÜubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkZh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjXZh²hh³jjZh´MÜubhÿ)�”}”(hŒfree_contig_range”h]”j)�”}”(hŒfree_contig_range”h]”hŒfree_contig_range”…”�”}”(hj}Zh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjyZubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjXZh²hh³jjZh´MÜubj8)�”}”(hŒ+(unsigned long pfn, unsigned long nr_pages)”h]”(j>)�”}”(hŒunsigned long pfn”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj™Zh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj•Zubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§Zh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj•Zubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjµZh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj•Zubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃZh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj•Zubj)�”}”(hŒpfn”h]”hŒpfn”…”�”}”(hjÑZh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj•Zubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj‘Zubj>)�”}”(hŒunsigned long nr_pages”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjêZh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjæZubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjøZh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjæZubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjæZubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjæZubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hj"[h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjæZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj‘Zubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjXZh²hh³jjZh´MÜubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjTZh²hh³jjZh´MÜubah}”(h]”jOZah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jjZh´MÜhjQZh²hubj4)�”}”(hhh]”j^)�”}”(hhh]”jc)�”}”(hŒ"free the contiguous range of pages”h]”jM)�”}”(hjQ[h]”hŒ"free the contiguous range of pages”…”�”}”(hjS[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MÜhjO[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjL[h²hh³j`[h´Nubah}”(h]”h ]”h"]”h$]”h&]”j‚jƒuh1j]h³j`[h´MÜhjI[h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjQZh²hh³jjZh´MÜubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjv[jHjv[jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(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:113: ./mm/page_alloc.c”h´Màhjz[ubj¤)�”}”(hhh]”(j©)�”}”(hŒ(``unsigned long pfn`` start PFN to free ”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:113: ./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³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 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:113: ./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£hjz[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:113: ./mm/page_alloc.c”h´Màhjz[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:113: ./mm/page_alloc.c”h´Mßhjz[ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒalloc_pages_nolock (C function)”Œc.alloc_pages_nolock”hNt”auh1hÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjX\h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjT\h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mgubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjf\h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjT\h²hh³je\h´Mgubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjw\h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjt\ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jy\Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒalloc_pages_nolock”sbŒc.alloc_pages_nolock”†”asbuh1hhjT\h²hh³je\h´Mgubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜\h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjT\h²hh³je\h´Mgubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¦\h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjT\h²hh³je\h´Mgubhÿ)�”}”(hŒalloc_pages_nolock”h]”j)�”}”(hj•\h]”hŒalloc_pages_nolock”…”�”}”(hj·\h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj³\ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjT\h²hh³je\h´Mgubj8)�”}”(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”jèŒ reftarget”j×\Œmodname”NŒ classname”Njìjï)�”}”jò]”j“\Œ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”…”�”}”(hj6]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”…”�”}”(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Œint”h]”hŒint”…”�”}”(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Œorder”h]”hŒorder”…”�”}”(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&]”jjuh1j7hjT\h²hh³je\h´Mgubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjP\h²hh³je\h´Mgubah}”(h]”jK\ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³je\h´MghjM\h²hubj4)�”}”(hhh]”jM)�”}”(hŒ3opportunistic reentrant allocation from any context”h]”hŒ3opportunistic reentrant allocation from any context”…”�”}”(hj±]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mghj®]h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjM\h²hh³je\h´Mgubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÉ]jHjÉ]jI‰jJ‰jK‰uh1híh²hhjKò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Ó]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:113: ./mm/page_alloc.c”h´MkhjÍ]ubj¤)�”}”(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ò]h]”hŒgfp_t gfp_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:113: ./mm/page_alloc.c”h´Mihjì]ubjÉ)�”}”(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 ^h²hh³Nh´NubjS)�”}”(hŒ``gfp_nolock``”h]”hŒ gfp_nolock”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj ^ubhŒ) are allowed.”…”�”}”(hj ^h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´Mhhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjì]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j^h´Mihjé]ubj©)�”}”(hŒ"``int nid`` node to allocate from ”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:113: ./mm/page_alloc.c”h´Mjhj8^ubjÉ)�”}”(hhh]”jM)�”}”(hŒnode to allocate from”h]”hŒnode to allocate from”…”�”}”(hjW^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jS^h´MjhjT^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj8^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jS^h´Mjhjé]ubj©)�”}”(hŒ-``unsigned int order`` allocation order size ”h]”(j¯)�”}”(hŒ``unsigned int order``”h]”jS)�”}”(hjw^h]”hŒunsigned int order”…”�”}”(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:113: ./mm/page_alloc.c”h´Mkhjq^ubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation order size”h]”hŒallocation order size”…”�”}”(hj�^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jŒ^h´Mkhj�^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjq^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŒ^h´Mkhjé]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:113: ./mm/page_alloc.c”h´MmhjÍ]ubjM)�”}”(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È^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MshjÍ]ubjM)�”}”(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ï^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:113: ./mm/page_alloc.c”h´MthjÍ]ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒnuma_nearest_node (C function)”Œc.numa_nearest_node”hNt”auh1hÜhjKò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_h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj_h²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./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ÿ)�”}”(hŒnuma_nearest_node”h]”j)�”}”(hŒnuma_nearest_node”h]”hŒnuma_nearest_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(ubj8)�”}”(hŒ(int node, unsigned int state)”h]”(j>)�”}”(hŒint node”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hj[_h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjW_ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hji_h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjW_ubj)�”}”(hŒnode”h]”hŒnode”…”�”}”(hjw_h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjW_ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjS_ubj>)�”}”(hŒunsigned int state”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Œstate”h]”hŒstate”…”�”}”(hjÈ_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&]”jjuh1j7hj_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 nearest node by state”h]”hŒFind nearest node by state”…”�”}”(hjò_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./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²hhjKò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`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:114: ./mm/mempolicy.c”h´M,hj`ubj¤)�”}”(hhh]”(j©)�”}”(hŒ)``int node`` Node id to start the search ”h]”(j¯)�”}”(hŒ ``int node``”h]”jS)�”}”(hj3`h]”hŒint node”…”�”}”(hj5`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj1`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M)hj-`ubjÉ)�”}”(hhh]”jM)�”}”(hŒNode id to start the search”h]”hŒNode id to start the search”…”�”}”(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Œ2``unsigned int state`` State to filter the search ”h]”(j¯)�”}”(hŒ``unsigned int state``”h]”jS)�”}”(hjl`h]”hŒunsigned int state”…”�”}”(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:114: ./mm/mempolicy.c”h´M*hjf`ubjÉ)�”}”(hhh]”jM)�”}”(hŒState to filter the search”h]”hŒState to filter the search”…”�”}”(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*`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:114: ./mm/mempolicy.c”h´M,hj`ubjM)�”}”(hŒ?Lookup the closest node by distance if **nid** is not in state.”h]”(hŒ'Lookup the closest node by distance if ”…”�”}”(hj½`h²hh³Nh´NubjŽ)�”}”(hŒ**nid**”h]”hŒnid”…”�”}”(hjÅ`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj½`ubhŒ is not in state.”…”�”}”(hj½`h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./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:114: ./mm/mempolicy.c”h´M-hj`ubjM)�”}”(hŒGthis **node** if it is in state, otherwise the closest node by distance”h]”(hŒthis ”…”�”}”(hjö`h²hh³Nh´NubjŽ)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hjþ`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjö`ubhŒ: if it is in state, otherwise the closest node by distance”…”�”}”(hjö`h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M.hj`ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"nearest_node_nodemask (C function)”Œc.nearest_node_nodemask”hNt”auh1hÜhjKò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”…”�”}”(hj7ah²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj3ah²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´MHubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFah²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj3ah²hh³jEah´MHubhÿ)�”}”(hŒnearest_node_nodemask”h]”j)�”}”(hŒnearest_node_nodemask”h]”hŒnearest_node_nodemask”…”�”}”(hjXah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjTaubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj3ah²hh³jEah´MHubj8)�”}”(hŒ(int node, nodemask_t *mask)”h]”(j>)�”}”(hŒint node”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjtah²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjpaubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚ah²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjpaubj)�”}”(hŒnode”h]”hŒnode”…”�”}”(hj�ah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjpaubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjlaubj>)�”}”(hŒnodemask_t *mask”h]”(h)�”}”(hhh]”j)�”}”(hŒ nodemask_t”h]”hŒ nodemask_t”…”�”}”(hj¬ah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj©aubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j®aŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjZasbŒc.nearest_node_nodemask”†”asbuh1hhj¥aubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌah²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¥aubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÚah²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¥aubj)�”}”(hŒmask”h]”hŒmask”…”�”}”(hjçah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¥aubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjlaubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj3ah²hh³jEah´MHubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj/ah²hh³jEah´MHubah}”(h]”j*aah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jEah´MHhj,ah²hubj4)�”}”(hhh]”jM)�”}”(hŒ@Find the node in **mask** at the nearest distance from **node**.”h]”(hŒFind the node in ”…”�”}”(hjbh²hh³Nh´NubjŽ)�”}”(hŒ**mask**”h]”hŒmask”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjbubhŒ at the nearest distance from ”…”�”}”(hjbh²hh³Nh´NubjŽ)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hj+bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjbubhŒ.”…”�”}”(hjbh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´MHhjbh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj,ah²hh³jEah´MHubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjMbjHjMbjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjWbh]”hŒ Parameters”…”�”}”(hjYbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjUbubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´MLhjQbubj¤)�”}”(hhh]”(j©)�”}”(hŒ7``int node`` a valid node ID to start the search from. ”h]”(j¯)�”}”(hŒ ``int node``”h]”jS)�”}”(hjvbh]”hŒint node”…”�”}”(hjxbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjtbubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´MKhjpbubjÉ)�”}”(hhh]”jM)�”}”(hŒ)a valid node ID to start the search from.”h]”hŒ)a valid node ID to start the search from.”…”�”}”(hj�bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‹bh´MKhjŒbubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjpbubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‹bh´MKhjmbubj©)�”}”(hŒM``nodemask_t *mask`` a pointer to a nodemask representing the allowed nodes. ”h]”(j¯)�”}”(hŒ``nodemask_t *mask``”h]”jS)�”}”(hj¯bh]”hŒnodemask_t *mask”…”�”}”(hj±bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj­bubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´MLhj©bubjÉ)�”}”(hhh]”jM)�”}”(hŒ7a pointer to a nodemask representing the allowed nodes.”h]”hŒ7a pointer to a nodemask representing the allowed nodes.”…”�”}”(hjÈbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÄbh´MLhjÅbubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj©bubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÄbh´MLhjmbubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjQbubjM)�”}”(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³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´MNhjQbubjM)�”}”(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 ”…”�”}”(hjch²hh³Nh´NubjŽ)�”}”(hŒ**mask**”h]”hŒmask”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjcubhŒ/ and calculates the distance from the starting ”…”�”}”(hjch²hh³Nh´NubjŽ)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjcubhŒ5, then it returns the node ID that is the closest to ”…”�”}”(hjch²hh³Nh´NubjŽ)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hj,ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjcubhŒ&, or MAX_NUMNODES if no node is found.”…”�”}”(hjch²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´MMhjQbubjM)�”}”(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 ”…”�”}”(hjEch²hh³Nh´NubjŽ)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hjMch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjEcubhŒ• 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.”…”�”}”(hjEch²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´MQhjQbubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hj†ch²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj‚ch²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´MJubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”ch²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‚ch²hh³j“ch´MJubhÿ)�”}”(hŒfolio_can_map_prot_numa”h]”j)�”}”(hŒfolio_can_map_prot_numa”h]”hŒfolio_can_map_prot_numa”…”�”}”(hj¦ch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¢cubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj‚ch²hh³j“ch´MJubj8)�”}”(hŒR(struct folio *folio, struct vm_area_struct *vma, bool is_private_single_threaded)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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¾cubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjàch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÝcubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jâcŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj¨csbŒc.folio_can_map_prot_numa”†”asbuh1hhj¾cubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¾cubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¾cubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjºcubj>)�”}”(hŒstruct vm_area_struct *vma”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj4dh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj0dubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAdh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj0dubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjRdh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjOdubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jTdŒmodname”NŒ classname”Njìjï)�”}”jò]”jücŒc.folio_can_map_prot_numa”†”asbuh1hhj0dubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjpdh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj0dubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj~dh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj0dubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hj‹dh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj0dubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjºcubj>)�”}”(hŒbool is_private_single_threaded”h]”(já)�”}”(hj½h]”hŒbool”…”�”}”(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Œis_private_single_threaded”h]”hŒis_private_single_threaded”…”�”}”(hj¿dh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj dubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjºcubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj‚ch²hh³j“ch´MJubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj~ch²hh³j“ch´MJubah}”(h]”jycah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j“ch´MJhj{ch²hubj4)�”}”(hhh]”jM)�”}”(hŒ)check whether the folio can map prot numa”h]”hŒ)check whether the folio can map prot numa”…”�”}”(hjédh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´MJhjædh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj{ch²hh³j“ch´MJubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjejHjejI‰jJ‰jK‰uh1híh²hhjKò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 eh]”hŒ Parameters”…”�”}”(hj eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj eubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´MNhjeubj¤)�”}”(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*eh]”hŒstruct folio *folio”…”�”}”(hj,eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj(eubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´MKhj$eubjÉ)�”}”(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”…”�”}”(hjCeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j?eh´MKhj@eubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj$eubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j?eh´MKhj!eubj©)�”}”(hŒB``struct vm_area_struct *vma`` The VMA that the folio belongs to. ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hjceh]”hŒstruct vm_area_struct *vma”…”�”}”(hjeeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjaeubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´MLhj]eubjÉ)�”}”(hhh]”jM)�”}”(hŒ"The VMA that the folio belongs to.”h]”hŒ"The VMA that the folio belongs to.”…”�”}”(hj|eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jxeh´MLhjyeubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj]eubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jxeh´MLhj!eubj©)�”}”(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)�”}”(hjœeh]”hŒbool is_private_single_threaded”…”�”}”(hjžeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjšeubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´MMhj–eubjÉ)�”}”(hhh]”jM)�”}”(hŒ,Is this a single-threaded private VMA or not”h]”hŒ,Is this a single-threaded private VMA or not”…”�”}”(hjµeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j±eh´MMhj²eubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj–eubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j±eh´MMhj!eubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjeubjM)�”}”(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³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´MOhjeubjM)�”}”(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íeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´MNhjeubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjþeh]”hŒReturn”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjüeubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´MShjeubjM)�”}”(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.”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´MThjeubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒalloc_pages_mpol (C function)”Œc.alloc_pages_mpol”hNt”auh1hÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjCfh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj?fh²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M™ ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQfh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj?fh²hh³jPfh´M™ ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjbfh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj_fubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jdfŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒalloc_pages_mpol”sbŒc.alloc_pages_mpol”†”asbuh1hhj?fh²hh³jPfh´M™ ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒfh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj?fh²hh³jPfh´M™ ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj‘fh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj?fh²hh³jPfh´M™ ubhÿ)�”}”(hŒalloc_pages_mpol”h]”j)�”}”(hj€fh]”hŒalloc_pages_mpol”…”�”}”(hj¢fh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjžfubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj?fh²hh³jPfh´M™ ubj8)�”}”(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Àfh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj½fubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÂfŒmodname”NŒ classname”Njìjï)�”}”jò]”j~fŒc.alloc_pages_mpol”†”asbuh1hhj¹fubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞfh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¹fubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjìfh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¹fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjµfubj>)�”}”(hŒunsigned int order”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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Œint”h]”hŒint”…”�”}”(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Œorder”h]”hŒorder”…”�”}”(hj=gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjgubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjµfubj>)�”}”(hŒstruct mempolicy *pol”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjVgh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjRgubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcgh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjRgubh)�”}”(hhh]”j)�”}”(hŒ mempolicy”h]”hŒ mempolicy”…”�”}”(hjtgh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjqgubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jvgŒmodname”NŒ classname”Njìjï)�”}”jò]”j~fŒc.alloc_pages_mpol”†”asbuh1hhjRgubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’gh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjRgubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj gh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjRgubj)�”}”(hŒpol”h]”hŒpol”…”�”}”(hj­gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjRgubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjµfubj>)�”}”(hŒ pgoff_t ilx”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjÉgh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÆgubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jËgŒmodname”NŒ classname”Njìjï)�”}”jò]”j~fŒc.alloc_pages_mpol”†”asbuh1hhjÂgubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçgh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÂgubj)�”}”(hŒilx”h]”hŒilx”…”�”}”(hjõgh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÂgubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjµfubj>)�”}”(hŒint nid”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj hubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj hubj)�”}”(hŒnid”h]”hŒnid”…”�”}”(hj*hh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj hubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjµfubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj?fh²hh³jPfh´M™ ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj;fh²hh³jPfh´M™ ubah}”(h]”j6fah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jPfh´M™ hj8fh²hubj4)�”}”(hhh]”jM)�”}”(hŒ+Allocate pages according to NUMA mempolicy.”h]”hŒ+Allocate pages according to NUMA mempolicy.”…”�”}”(hjThh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M™ hjQhh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj8fh²hh³jPfh´M™ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjlhjHjlhjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjvhh]”hŒ Parameters”…”�”}”(hjxhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjthubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M� hjphubj¤)�”}”(hhh]”(j©)�”}”(hŒ``gfp_t gfp`` GFP 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³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mš hj�hubjÉ)�”}”(hhh]”jM)�”}”(hŒ GFP flags.”h]”hŒ GFP 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Œhubj©)�”}”(hŒ5``unsigned int order`` Order of the page allocation. ”h]”(j¯)�”}”(hŒ``unsigned int order``”h]”jS)�”}”(hjÎhh]”hŒunsigned int order”…”�”}”(hjÐhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÌhubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M› hjÈhubjÉ)�”}”(hhh]”jM)�”}”(hŒOrder of the page allocation.”h]”hŒOrder of the page allocation.”…”�”}”(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Œ9``struct mempolicy *pol`` Pointer to the NUMA mempolicy. ”h]”(j¯)�”}”(hŒ``struct mempolicy *pol``”h]”jS)�”}”(hjih]”hŒstruct mempolicy *pol”…”�”}”(hj ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mœ hjiubjÉ)�”}”(hhh]”jM)�”}”(hŒPointer to the NUMA mempolicy.”h]”hŒPointer to the NUMA mempolicy.”…”�”}”(hj ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jih´Mœ hjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjiubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jih´Mœ hjŒhubj©)�”}”(hŒS``pgoff_t ilx`` Index for interleave mempolicy (also distinguishes alloc_pages()). ”h]”(j¯)�”}”(hŒ``pgoff_t ilx``”h]”jS)�”}”(hj@ih]”hŒ pgoff_t ilx”…”�”}”(hjBih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj>iubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M� hj:iubjÉ)�”}”(hhh]”jM)�”}”(hŒBIndex for interleave mempolicy (also distinguishes alloc_pages()).”h]”hŒBIndex for interleave mempolicy (also distinguishes alloc_pages()).”…”�”}”(hjYih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jUih´M� hjViubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj:iubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jUih´M� hjŒhubj©)�”}”(hŒR``int nid`` Preferred node (usually numa_node_id() but **mpol** may override it). ”h]”(j¯)�”}”(hŒ ``int nid``”h]”jS)�”}”(hjyih]”hŒint nid”…”�”}”(hj{ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjwiubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mž hjsiubjÉ)�”}”(hhh]”jM)�”}”(hŒEPreferred node (usually numa_node_id() but **mpol** may override it).”h]”(hŒ+Preferred node (usually numa_node_id() but ”…”�”}”(hj’ih²hh³Nh´NubjŽ)�”}”(hŒ**mpol**”h]”hŒmpol”…”�”}”(hjših²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj’iubhŒ may override it).”…”�”}”(hj’ih²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jŽih´Mž hj�iubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjsiubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŽih´Mž hjŒhubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjphubjM)�”}”(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³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M  hjphubjM)�”}”(hŒ0The page on success or NULL if allocation fails.”h]”hŒ0The page on success or NULL if allocation fails.”…”�”}”(hjÜih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M  hjphubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvma_alloc_folio (C function)”Œc.vma_alloc_folio”hNt”auh1hÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj jh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjjh²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mì ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjjh²hh³jjh´Mì ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj*jh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj'jubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j,jŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒvma_alloc_folio”sbŒc.vma_alloc_folio”†”asbuh1hhjjh²hh³jjh´Mì ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjjh²hh³jjh´Mì ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjYjh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjjh²hh³jjh´Mì ubhÿ)�”}”(hŒvma_alloc_folio”h]”j)�”}”(hjHjh]”hŒvma_alloc_folio”…”�”}”(hjjjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjfjubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjjh²hh³jjh´Mì ubj8)�”}”(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”…”�”}”(hjˆjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj…jubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jŠjŒmodname”NŒ classname”Njìjï)�”}”jò]”jFjŒc.vma_alloc_folio”†”asbuh1hhj�jubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦jh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�jubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj´jh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�jubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj}jubj>)�”}”(hŒ int order”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Ûjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÉjubj)�”}”(hŒorder”h]”hŒorder”…”�”}”(hjéjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÉjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj}jubj>)�”}”(hŒstruct vm_area_struct *vma”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjþjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjþjubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj kh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjkubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j"kŒmodname”NŒ classname”Njìjï)�”}”jò]”jFjŒc.vma_alloc_folio”†”asbuh1hhjþjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>kh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjþjubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjLkh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjþjubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjYkh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjþjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj}jubj>)�”}”(hŒunsigned long addr”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjrkh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjnkubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€kh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjnkubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjŽkh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjnkubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœkh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjnkubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjªkh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjnkubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj}jubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjjh²hh³jjh´Mì ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjjh²hh³jjh´Mì ubah}”(h]”jþiah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jjh´Mì hjjh²hubj4)�”}”(hhh]”jM)�”}”(hŒAllocate a folio for a VMA.”h]”hŒAllocate a folio for a VMA.”…”�”}”(hjÔkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mì hjÑkh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjjh²hh³jjh´Mì ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjìkjHjìkjI‰jJ‰jK‰uh1híh²hhjKò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ö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:114: ./mm/mempolicy.c”h´Mð hjðkubj¤)�”}”(hhh]”(j©)�”}”(hŒ``gfp_t gfp`` GFP flags. ”h]”(j¯)�”}”(hŒ ``gfp_t gfp``”h]”jS)�”}”(hjlh]”hŒ gfp_t gfp”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mí hjlubjÉ)�”}”(hhh]”jM)�”}”(hŒ GFP flags.”h]”hŒ GFP flags.”…”�”}”(hj.lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j*lh´Mí hj+lubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjlubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j*lh´Mí hj lubj©)�”}”(hŒ"``int order`` Order of the folio. ”h]”(j¯)�”}”(hŒ ``int order``”h]”jS)�”}”(hjNlh]”hŒ int order”…”�”}”(hjPlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjLlubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mî hjHlubjÉ)�”}”(hhh]”jM)�”}”(hŒOrder of the folio.”h]”hŒOrder of the folio.”…”�”}”(hjglh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jclh´Mî hjdlubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjHlubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jclh´Mî hj lubj©)�”}”(hŒ/``struct vm_area_struct *vma`` Pointer to VMA. ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hj‡lh]”hŒstruct vm_area_struct *vma”…”�”}”(hj‰lh²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:114: ./mm/mempolicy.c”h´Mï hj�lubjÉ)�”}”(hhh]”jM)�”}”(hŒPointer to VMA.”h]”hŒPointer to VMA.”…”�”}”(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ï hj lubj©)�”}”(hŒS``unsigned long addr`` Virtual address of the allocation. Must be inside **vma**. ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hjÀlh]”hŒunsigned long addr”…”�”}”(hjÂlh²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:114: ./mm/mempolicy.c”h´Mð hjºlubjÉ)�”}”(hhh]”jM)�”}”(hŒ;Virtual address of the allocation. Must be inside **vma**.”h]”(hŒ3Virtual address of the allocation. Must be inside ”…”�”}”(hjÙlh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjálh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÙlubhŒ.”…”�”}”(hjÙlh²hh³Nh´Nubeh}”(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ð hj lubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjðkubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj mh]”hŒ Description”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj mubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mò hjðkubjM)�”}”(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#mh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hj+mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj#mubhX6, 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#mh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mñ hjðkubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjFmh]”hŒReturn”…”�”}”(hjHmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjDmubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M÷ hjðkubjM)�”}”(hŒ1The folio on success or NULL if allocation fails.”h]”hŒ1The folio on success or NULL if allocation fails.”…”�”}”(hj\mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mø hjðkubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒalloc_pages (C function)”Œ c.alloc_pages”hNt”auh1hÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj‹mh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj‡mh²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™mh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‡mh²hh³j˜mh´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”jèŒ reftarget”j¬mŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒ alloc_pages”sbŒ c.alloc_pages”†”asbuh1hhj‡mh²hh³j˜mh´M ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËmh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‡mh²hh³j˜mh´M ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÙmh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj‡mh²hh³j˜mh´M ubhÿ)�”}”(hŒ alloc_pages”h]”j)�”}”(hjÈmh]”hŒ alloc_pages”…”�”}”(hjêmh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjæmubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj‡mh²hh³j˜mh´M ubj8)�”}”(hŒ(gfp_t gfp, unsigned int order)”h]”(j>)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjnubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j nŒmodname”NŒ classname”Njìjï)�”}”jò]”jÆmŒ c.alloc_pages”†”asbuh1hhjnubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&nh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjnubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj4nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjnubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjýmubj>)�”}”(hŒunsigned int order”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjMnh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjInubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[nh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjInubjá)�”}”(hŒint”h]”hŒint”…”�”}”(hjinh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjInubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwnh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjInubj)�”}”(hŒorder”h]”hŒorder”…”�”}”(hj…nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjInubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjýmubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj‡mh²hh³j˜mh´M ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjƒmh²hh³j˜mh´M ubah}”(h]”j~mah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j˜mh´M hj€mh²hubj4)�”}”(hhh]”jM)�”}”(hŒAllocate pages.”h]”hŒAllocate pages.”…”�”}”(hj¯nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M hj¬nh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj€mh²hh³j˜mh´M ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÇnjHjÇnjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hX"**Parameters** ``gfp_t gfp`` GFP flags. ``unsigned int order`` Power of two of number of pages to allocate. **Description** Allocate 1 << **order** contiguous pages. The physical address of the first page is naturally aligned (eg an order-3 allocation will be aligned to a multiple of 8 * PAGE_SIZE bytes). The NUMA policy of the current process is honoured when in process context. **Context** Can be called from any context, providing the appropriate GFP flags are used. **Return** The page on success or NULL if allocation fails.”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³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M hjËnubj¤)�”}”(hhh]”(j©)�”}”(hŒ``gfp_t gfp`` GFP flags. ”h]”(j¯)�”}”(hŒ ``gfp_t gfp``”h]”jS)�”}”(hjðnh]”hŒ gfp_t gfp”…”�”}”(hjònh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjînubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M hjênubjÉ)�”}”(hhh]”jM)�”}”(hŒ GFP flags.”h]”hŒ GFP flags.”…”�”}”(hj oh²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çnubj©)�”}”(hŒD``unsigned int order`` Power of two of number of pages to allocate. ”h]”(j¯)�”}”(hŒ``unsigned int order``”h]”jS)�”}”(hj)oh]”hŒunsigned int order”…”�”}”(hj+oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj'oubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M hj#oubjÉ)�”}”(hhh]”jM)�”}”(hŒ,Power of two of number of pages to allocate.”h]”hŒ,Power of two of number of pages to allocate.”…”�”}”(hjBoh²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çnubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjËnubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjdoh]”hŒ Description”…”�”}”(hjfoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjboubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M hjËnubjM)�”}”(hXAllocate 1 << **order** contiguous pages. The physical address of the first page is naturally aligned (eg an order-3 allocation will be aligned to a multiple of 8 * PAGE_SIZE bytes). The NUMA policy of the current process is honoured when in process context.”h]”(hŒAllocate 1 << ”…”�”}”(hjzoh²hh³Nh´NubjŽ)�”}”(hŒ **order**”h]”hŒorder”…”�”}”(hj‚oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjzoubhŒí contiguous pages. The physical address of the first page is naturally aligned (eg an order-3 allocation will be aligned to a multiple of 8 * PAGE_SIZE bytes). The NUMA policy of the current process is honoured when in process context.”…”�”}”(hjzoh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M hjËnubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hj�oh]”hŒContext”…”�”}”(hjŸoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj›oubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M# hjËnubjM)�”}”(hŒMCan be called from any context, providing the appropriate GFP flags are used.”h]”hŒMCan be called from any context, providing the appropriate GFP flags are used.”…”�”}”(hj³oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M$ hjËnubjM)�”}”(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³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M' hjËnubjM)�”}”(hŒ0The page on success or NULL if allocation fails.”h]”hŒ0The page on success or NULL if allocation fails.”…”�”}”(hjÚoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M& hjËnubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmpol_misplaced (C function)”Œc.mpol_misplaced”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒRint mpol_misplaced (struct folio *folio, struct vm_fault *vmf, unsigned long addr)”h]”hù)�”}”(hŒQint mpol_misplaced(struct folio *folio, struct vm_fault *vmf, unsigned long addr)”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hj ph²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjph²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mº ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjph²hh³jph´Mº ubhÿ)�”}”(hŒmpol_misplaced”h]”j)�”}”(hŒmpol_misplaced”h]”hŒmpol_misplaced”…”�”}”(hj*ph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj&pubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjph²hh³jph´Mº ubj8)�”}”(hŒ?(struct folio *folio, struct vm_fault *vmf, unsigned long addr)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjFph²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjBpubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSph²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjBpubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjdph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjapubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jfpŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj,psbŒc.mpol_misplaced”†”asbuh1hhjBpubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„ph²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjBpubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj’ph²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjBpubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjŸph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjBpubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj>pubj>)�”}”(hŒstruct vm_fault *vmf”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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´pubh)�”}”(hhh]”j)�”}”(hŒvm_fault”h]”hŒvm_fault”…”�”}”(hjÖph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÓpubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jØpŒmodname”NŒ classname”Njìjï)�”}”jò]”j€pŒc.mpol_misplaced”†”asbuh1hhj´pubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjôph²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj´pubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj´pubj)�”}”(hŒvmf”h]”hŒvmf”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj´pubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj>pubj>)�”}”(hŒunsigned long addr”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj(qh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj$qubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6qh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj$qubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjDqh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj$qubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRqh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj$qubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj`qh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj$qubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj>pubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjph²hh³jph´Mº ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjph²hh³jph´Mº ubah}”(h]”jüoah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jph´Mº hjþoh²hubj4)�”}”(hhh]”jM)�”}”(hŒ3check whether current folio node is valid in policy”h]”hŒ3check whether current folio node is valid in policy”…”�”}”(hjŠqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mº hj‡qh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjþoh²hh³jph´Mº ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¢qjHj¢qjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hX=**Parameters** ``struct folio *folio`` folio to be checked ``struct vm_fault *vmf`` structure describing the fault ``unsigned long addr`` virtual address in **vma** for shared policy lookup and interleave policy **Description** Lookup current policy node id for vma,addr and "compare to" folio's node id. Policy determination "mimics" alloc_page_vma(). Called from fault path where we know the vma and faulting address. **Return** NUMA_NO_NODE if the page is in a node that is valid for this policy, or a suitable node ID to allocate a replacement folio from.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj¬qh]”hŒ Parameters”…”�”}”(hj®qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjªqubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M¾ hj¦qubj¤)�”}”(hhh]”(j©)�”}”(hŒ,``struct folio *folio`` folio to be checked ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjËqh]”hŒstruct folio *folio”…”�”}”(hjÍqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÉqubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M¼ hjÅqubjÉ)�”}”(hhh]”jM)�”}”(hŒfolio to be checked”h]”hŒfolio to be checked”…”�”}”(hjäqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jàqh´M¼ hjáqubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÅqubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jàqh´M¼ hjÂqubj©)�”}”(hŒ8``struct vm_fault *vmf`` structure describing the fault ”h]”(j¯)�”}”(hŒ``struct vm_fault *vmf``”h]”jS)�”}”(hjrh]”hŒstruct vm_fault *vmf”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjrubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M½ hjþqubjÉ)�”}”(hhh]”jM)�”}”(hŒstructure describing the fault”h]”hŒstructure describing the fault”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jrh´M½ hjrubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjþqubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jrh´M½ hjÂqubj©)�”}”(hŒa``unsigned long addr`` virtual address in **vma** for shared policy lookup and interleave policy ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hj=rh]”hŒunsigned long addr”…”�”}”(hj?rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj;rubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M¾ hj7rubjÉ)�”}”(hhh]”jM)�”}”(hŒIvirtual address in **vma** for shared policy lookup and interleave policy”h]”(hŒvirtual address in ”…”�”}”(hjVrh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hj^rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjVrubhŒ/ for shared policy lookup and interleave policy”…”�”}”(hjVrh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jRrh´M¾ hjSrubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj7rubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jRrh´M¾ hjÂqubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¦qubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjŠrh]”hŒ Description”…”�”}”(hjŒrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjˆrubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´MÀ hj¦qubjM)�”}”(hŒÀLookup current policy node id for vma,addr and "compare to" folio's node id. Policy determination "mimics" alloc_page_vma(). Called from fault path where we know the vma and faulting address.”h]”hŒÊLookup current policy node id for vma,addr and “compare toâ€� folio’s node id. Policy determination “mimicsâ€� alloc_page_vma(). Called from fault path where we know the vma and faulting address.”…”�”}”(hj rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M¿ hj¦qubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj±rh]”hŒReturn”…”�”}”(hj³rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¯rubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mà hj¦qubjM)�”}”(hŒ€NUMA_NO_NODE if the page is in a node that is valid for this policy, or a suitable node ID to allocate a replacement folio from.”h]”hŒ€NUMA_NO_NODE if the page is in a node that is valid for this policy, or a suitable node ID to allocate a replacement folio from.”…”�”}”(hjÇrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´MÄ hj¦qubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$mpol_shared_policy_init (C function)”Œc.mpol_shared_policy_init”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒOvoid mpol_shared_policy_init (struct shared_policy *sp, struct mempolicy *mpol)”h]”hù)�”}”(hŒNvoid mpol_shared_policy_init(struct shared_policy *sp, struct mempolicy *mpol)”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjörh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjòrh²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M  ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjòrh²hh³jsh´M  ubhÿ)�”}”(hŒmpol_shared_policy_init”h]”j)�”}”(hŒmpol_shared_policy_init”h]”hŒmpol_shared_policy_init”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjsubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjòrh²hh³jsh´M  ubj8)�”}”(hŒ2(struct shared_policy *sp, struct mempolicy *mpol)”h]”(j>)�”}”(hŒstruct shared_policy *sp”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj3sh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj/subjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@sh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj/subh)�”}”(hhh]”j)�”}”(hŒ shared_policy”h]”hŒ shared_policy”…”�”}”(hjQsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjNsubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jSsŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjssbŒc.mpol_shared_policy_init”†”asbuh1hhj/subjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqsh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj/subjr)�”}”(hjuh]”hŒ*”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj/subj)�”}”(hŒsp”h]”hŒsp”…”�”}”(hjŒsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj/subeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj+subj>)�”}”(hŒstruct mempolicy *mpol”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¥sh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¡subjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²sh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¡subh)�”}”(hhh]”j)�”}”(hŒ mempolicy”h]”hŒ mempolicy”…”�”}”(hjÃsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÀsubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÅsŒmodname”NŒ classname”Njìjï)�”}”jò]”jmsŒc.mpol_shared_policy_init”†”asbuh1hhj¡subjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjásh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¡subjr)�”}”(hjuh]”hŒ*”…”�”}”(hjïsh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¡subj)�”}”(hŒmpol”h]”hŒmpol”…”�”}”(hjüsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¡subeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj+subeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjòrh²hh³jsh´M  ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjîrh²hh³jsh´M  ubah}”(h]”jérah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jsh´M  hjërh²hubj4)�”}”(hhh]”jM)�”}”(hŒ"initialize shared policy for inode”h]”hŒ"initialize shared policy for inode”…”�”}”(hj&th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M  hj#th²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjërh²hh³jsh´M  ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj>tjHj>tjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hXv**Parameters** ``struct shared_policy *sp`` pointer to inode shared policy ``struct mempolicy *mpol`` struct mempolicy to install **Description** Install non-NULL **mpol** in inode's shared policy rb-tree. On entry, the current task has a reference on a non-NULL **mpol**. This must be released on exit. This is called at get_inode() calls and we can use GFP_KERNEL.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjHth]”hŒ Parameters”…”�”}”(hjJth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjFtubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M¤ hjBtubj¤)�”}”(hhh]”(j©)�”}”(hŒ<``struct shared_policy *sp`` pointer to inode shared policy ”h]”(j¯)�”}”(hŒ``struct shared_policy *sp``”h]”jS)�”}”(hjgth]”hŒstruct shared_policy *sp”…”�”}”(hjith²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjetubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M¡ hjatubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to inode shared policy”h]”hŒpointer to inode shared policy”…”�”}”(hj€th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j|th´M¡ hj}tubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjatubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j|th´M¡ hj^tubj©)�”}”(hŒ7``struct mempolicy *mpol`` struct mempolicy to install ”h]”(j¯)�”}”(hŒ``struct mempolicy *mpol``”h]”jS)�”}”(hj th]”hŒstruct mempolicy *mpol”…”�”}”(hj¢th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjžtubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M¢ hjštubjÉ)�”}”(hhh]”jM)�”}”(hŒstruct mempolicy to install”h]”hŒstruct mempolicy to install”…”�”}”(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¢ hj^tubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjBtubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÛth]”hŒ Description”…”�”}”(hjÝth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÙtubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M¤ hjBtubjM)�”}”(hŒÜInstall non-NULL **mpol** in inode's shared policy rb-tree. On entry, the current task has a reference on a non-NULL **mpol**. This must be released on exit. This is called at get_inode() calls and we can use GFP_KERNEL.”h]”(hŒInstall non-NULL ”…”�”}”(hjñth²hh³Nh´NubjŽ)�”}”(hŒ**mpol**”h]”h•Œmpol”…”�”}”(hjùth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjñtubhŒ^ in inode’s shared policy rb-tree. On entry, the current task has a reference on a non-NULL ”…”�”}”(hjñth²hh³Nh´NubjŽ)�”}”(hŒ**mpol**”h]”hŒmpol”…”�”}”(hj uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjñtubhŒ_. This must be released on exit. This is called at get_inode() calls and we can use GFP_KERNEL.”…”�”}”(hjñth²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´M£ hjBtubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmpol_parse_str (C function)”Œc.mpol_parse_str”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ7int mpol_parse_str (char *str, struct mempolicy **mpol)”h]”hù)�”}”(hŒ6int mpol_parse_str(char *str, struct mempolicy **mpol)”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjDuh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj@uh²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mr ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSuh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj@uh²hh³jRuh´Mr ubhÿ)�”}”(hŒmpol_parse_str”h]”j)�”}”(hŒmpol_parse_str”h]”hŒmpol_parse_str”…”�”}”(hjeuh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjauubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj@uh²hh³jRuh´Mr ubj8)�”}”(hŒ$(char *str, struct mempolicy **mpol)”h]”(j>)�”}”(hŒ char *str”h]”(já)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj�uh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj}uubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�uh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj}uubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj�uh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj}uubj)�”}”(hŒstr”h]”hŒstr”…”�”}”(hjªuh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj}uubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjyuubj>)�”}”(hŒstruct mempolicy **mpol”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÃuh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¿uubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐuh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¿uubh)�”}”(hhh]”j)�”}”(hŒ mempolicy”h]”hŒ mempolicy”…”�”}”(hjáuh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÞuubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jãuŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjgusbŒc.mpol_parse_str”†”asbuh1hhj¿uubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¿uubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¿uubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¿uubj)�”}”(hŒmpol”h]”hŒmpol”…”�”}”(hj)vh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¿uubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjyuubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj@uh²hh³jRuh´Mr ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj[=][:] **Return** ``0`` on success, else ``1``”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjuvh]”hŒ Parameters”…”�”}”(hjwvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjsvubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mv hjovubj¤)�”}”(hhh]”(j©)�”}”(hŒ3``char *str`` string containing mempolicy to parse ”h]”(j¯)�”}”(hŒ ``char *str``”h]”jS)�”}”(hj”vh]”hŒ char *str”…”�”}”(hj–vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj’vubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Ms hjŽvubjÉ)�”}”(hhh]”jM)�”}”(hŒ$string containing mempolicy to parse”h]”hŒ$string containing mempolicy to parse”…”�”}”(hj­vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j©vh´Ms hjªvubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjŽvubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j©vh´Ms hj‹vubj©)�”}”(hŒV``struct mempolicy **mpol`` pointer to struct mempolicy pointer, returned on success. ”h]”(j¯)�”}”(hŒ``struct mempolicy **mpol``”h]”jS)�”}”(hjÍvh]”hŒstruct mempolicy **mpol”…”�”}”(hjÏvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjËvubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mt hjÇvubjÉ)�”}”(hhh]”jM)�”}”(hŒ9pointer to struct mempolicy pointer, returned on success.”h]”hŒ9pointer to struct mempolicy pointer, returned on success.”…”�”}”(hjævh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jâvh´Mt hjãvubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÇvubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jâvh´Mt hj‹vubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjovubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjwh]”hŒ Description”…”�”}”(hj wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjwubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mv hjovubj¤)�”}”(hhh]”j©)�”}”(hŒ/Format of input: [=][:] ”h]”(j¯)�”}”(hŒFormat of input:”h]”hŒFormat of input:”…”�”}”(hj%wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mv hj!wubjÉ)�”}”(hhh]”jM)�”}”(hŒ[=][:]”h]”hŒ[=][:]”…”�”}”(hj7wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j3wh´Mv hj4wubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj!wubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j3wh´Mv hjwubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjovubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjYwh]”hŒReturn”…”�”}”(hj[wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjWwubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mx hjovubjM)�”}”(hŒ``0`` on success, else ``1``”h]”(jS)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hjswh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjowubhŒ on success, else ”…”�”}”(hjowh²hh³Nh´NubjS)�”}”(hŒ``1``”h]”hŒ1”…”�”}”(hj…wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjowubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´My hjovubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmpol_to_str (C function)”Œ c.mpol_to_str”hNt”auh1hÜhjKò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”…”�”}”(hjºwh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj¶wh²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”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Œ mpol_to_str”h]”j)�”}”(hŒ mpol_to_str”h]”hŒ mpol_to_str”…”�”}”(hjÛwh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj×wubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¶wh²hh³jÈwh´Mù ubj8)�”}”(hŒ1(char *buffer, int maxlen, struct mempolicy *pol)”h]”(j>)�”}”(hŒ char *buffer”h]”(já)�”}”(hŒchar”h]”hŒchar”…”�”}”(hj÷wh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjówubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjówubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjówubj)�”}”(hŒbuffer”h]”hŒbuffer”…”�”}”(hj xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjówubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjïwubj>)�”}”(hŒ int maxlen”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hj9xh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj5xubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGxh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj5xubj)�”}”(hŒmaxlen”h]”hŒmaxlen”…”�”}”(hjUxh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj5xubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjïwubj>)�”}”(hŒstruct mempolicy *pol”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjnxh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjjxubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{xh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjjxubh)�”}”(hhh]”j)�”}”(hŒ mempolicy”h]”hŒ mempolicy”…”�”}”(hjŒxh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‰xubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jŽxŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÝwsbŒ c.mpol_to_str”†”asbuh1hhjjxubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬xh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjjxubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjºxh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjjxubj)�”}”(hŒpol”h]”hŒpol”…”�”}”(hjÇxh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjjxubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjïwubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj¶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Œ)format a mempolicy structure for printing”h]”hŒ)format a mempolicy structure for printing”…”�”}”(hjñxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mù hjîxh²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²hhjKò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Ž)�”}”(hjyh]”hŒ Parameters”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mý hj yubj¤)�”}”(hhh]”(j©)�”}”(hŒ7``char *buffer`` to contain formatted mempolicy string ”h]”(j¯)�”}”(hŒ``char *buffer``”h]”jS)�”}”(hj2yh]”hŒ char *buffer”…”�”}”(hj4yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj0yubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mú hj,yubjÉ)�”}”(hhh]”jM)�”}”(hŒ%to contain formatted mempolicy string”h]”hŒ%to contain formatted mempolicy string”…”�”}”(hjKyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jGyh´Mú hjHyubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj,yubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jGyh´Mú hj)yubj©)�”}”(hŒ$``int maxlen`` length of **buffer** ”h]”(j¯)�”}”(hŒ``int maxlen``”h]”jS)�”}”(hjkyh]”hŒ int maxlen”…”�”}”(hjmyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjiyubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mû hjeyubjÉ)�”}”(hhh]”jM)�”}”(hŒlength of **buffer**”h]”(hŒ length of ”…”�”}”(hj„yh²hh³Nh´NubjŽ)�”}”(hŒ **buffer**”h]”hŒbuffer”…”�”}”(hjŒyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj„yubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j€yh´Mû hj�yubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjeyubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j€yh´Mû hj)yubj©)�”}”(hŒ?``struct mempolicy *pol`` pointer to mempolicy to be formatted ”h]”(j¯)�”}”(hŒ``struct mempolicy *pol``”h]”jS)�”}”(hj²yh]”hŒstruct mempolicy *pol”…”�”}”(hj´yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj°yubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mü hj¬yubjÉ)�”}”(hhh]”jM)�”}”(hŒ$pointer to mempolicy to be formatted”h]”hŒ$pointer to mempolicy to be formatted”…”�”}”(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)yubeh}”(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³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mþ hj yubjM)�”}”(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 ”…”�”}”(hjzh²hh³Nh´NubjŽ)�”}”(hŒ**pol**”h]”hŒpol”…”�”}”(hj zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjzubhŒ into a string. If ”…”�”}”(hjzh²hh³Nh´NubjŽ)�”}”(hŒ **buffer**”h]”hŒbuffer”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjzubhŒ0 is too short, truncate the string. Recommend a ”…”�”}”(hjzh²hh³Nh´NubjŽ)�”}”(hŒ **maxlen**”h]”hŒmaxlen”…”�”}”(hj/zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjzubhŒŸ 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.”…”�”}”(hjzh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:114: ./mm/mempolicy.c”h´Mý hj yubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒsoftleaf_t (C type)”Œ c.softleaf_t”hNt”auh1hÜhjKòh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ softleaf_t”h]”hù)�”}”(hŒtype softleaf_t”h]”(jœ)�”}”(hj„h]”hŒtype”…”�”}”(hjizh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjezh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´Kubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwzh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjezh²hh³jvzh´Kubhÿ)�”}”(hŒ softleaf_t”h]”j)�”}”(hjczh]”hŒ softleaf_t”…”�”}”(hj‰zh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj…zubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjezh²hh³jvzh´Kubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjazh²hh³jvzh´Kubah}”(h]”j[zah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jvzh´Khj^zh²hubj4)�”}”(hhh]”jM)�”}”(hŒ_Describes a page table software leaf entry, abstracted from its architecture-specific encoding.”h]”hŒ_Describes a page table software leaf entry, abstracted from its architecture-specific encoding.”…”�”}”(hj«zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M#hj¨zh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj^zh²hh³jvzh´Kubeh}”(h]”h ]”(jAŒtype”eh"]”h$]”h&]”jFjAjGjÃzjHjÃzjI‰jJ‰jK‰uh1híh²hhjKòh³j]zh´NubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÉzh]”hŒ Description”…”�”}”(hjËzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÇzubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M%hjKòh²hubjM)�”}”(hŒ¼Page table leaf entries are those which do not reference any descendent page tables but rather either reference a data page, are an empty (or 'none' entry), or contain a non-present entry.”h]”hŒÀPage table leaf entries are those which do not reference any descendent page tables but rather either reference a data page, are an empty (or ‘none’ entry), or contain a non-present entry.”…”�”}”(hjßzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M$hjKòh²hubjM)�”}”(hŒ§If referencing another page table or a data page then the page table entry is pertinent to hardware - that is it tells the hardware how to decode the page table entry.”h]”hŒ§If referencing another page table or a data page then the page table entry is pertinent to hardware - that is it tells the hardware how to decode the page table entry.”…”�”}”(hjîzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M(hjKòh²hubjM)�”}”(hŒ¾Otherwise it is a software-defined leaf page table entry, which this type describes. See leafops.h and specifically **softleaf_type** for a list of all possible kinds of software leaf entry.”h]”(hŒtOtherwise it is a software-defined leaf page table entry, which this type describes. See leafops.h and specifically ”…”�”}”(hjýzh²hh³Nh´NubjŽ)�”}”(hŒ**softleaf_type**”h]”hŒ softleaf_type”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjýzubhŒ9 for a list of all possible kinds of software leaf entry.”…”�”}”(hjýzh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M,hjKòh²hubjM)�”}”(hŒeA softleaf_t entry is abstracted from the hardware page table entry, so is not architecture-specific.”h]”hŒeA softleaf_t entry is abstracted from the hardware page table entry, so is not architecture-specific.”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M0hjKòh²hubjM)�”}”(hŒ**NOTE**”h]”jŽ)�”}”(hj/{h]”hŒNOTE”…”�”}”(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:115: ./include/linux/mm_types.h”h´M3hjKòh²hubj¤)�”}”(hhh]”j©)�”}”(hŒ£While we transition from the confusing swp_entry_t type used for this purpose, we simply alias this type. This will be removed once the transition is complete. ”h]”(j¯)�”}”(hŒEWhile we transition from the confusing swp_entry_t type used for this”h]”hŒEWhile we transition from the confusing swp_entry_t type used for this”…”�”}”(hjL{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M:hjH{ubjÉ)�”}”(hhh]”jM)�”}”(hŒYpurpose, we simply alias this type. This will be removed once the transition is complete.”h]”hŒYpurpose, we simply alias this type. This will be removed once the transition is complete.”…”�”}”(hj^{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M6hj[{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjH{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jZ{h´M:hjE{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjKòh²hh³j]zh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio (C struct)”Œc.folio”hNt”auh1hÜhjKòh²hh³j]zh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒfolio”h]”hù)�”}”(hŒ struct folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj˜{h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj”{h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.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”h]”j)�”}”(hj’{h]”hŒ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<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Œ%Represents a contiguous set of bytes.”h]”hŒ%Represents a contiguous set of bytes.”…”�”}”(hjÚ{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´Mghj×{h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj�{h²hh³j¥{h´M<ubeh}”(h]”h ]”(jAŒstruct”eh"]”h$]”h&]”jFjAjGjò{jHjò{jI‰jJ‰jK‰uh1híh²hhjKòh³j]zh´Nubj„)�”}”(hXø**Definition**:: struct folio { memdesc_flags_t flags; union { struct list_head lru; unsigned int mlock_count; struct dev_pagemap *pgmap; }; struct address_space *mapping; union { pgoff_t index; unsigned long share; }; union { void *private; swp_entry_t swap; unsigned long migrate_info; }; atomic_t _mapcount; atomic_t _refcount; #ifdef CONFIG_MEMCG; unsigned long memcg_data; #elif defined(CONFIG_SLAB_OBJ_EXT); unsigned long _unused_slab_obj_exts; #endif; #if defined(WANT_PAGE_VIRTUAL); void *virtual; #endif; #ifdef LAST_CPUPID_NOT_IN_PAGE_FLAGS; int _last_cpupid; #endif; atomic_t _large_mapcount; atomic_t _nr_pages_mapped; #ifdef CONFIG_64BIT; atomic_t _entire_mapcount; atomic_t _pincount; #endif ; mm_id_mapcount_t _mm_id_mapcount[2]; union { mm_id_t _mm_id[2]; unsigned long _mm_ids; }; #ifdef NR_PAGES_IN_LARGE_FOLIO; unsigned int _nr_pages; #endif ; struct list_head _deferred_list; #ifndef CONFIG_64BIT; atomic_t _entire_mapcount; atomic_t _pincount; #endif ; void *_hugetlb_subpool; void *_hugetlb_cgroup; void *_hugetlb_cgroup_rsvd; void *_hugetlb_hwpoison; }; **Members** ``flags`` Identical to the page flags. ``{unnamed_union}`` anonymous ``lru`` Least Recently Used list; tracks how recently this folio was used. ``mlock_count`` Number of times this folio has been pinned by mlock(). ``pgmap`` Metadata for ZONE_DEVICE mappings ``mapping`` The file this page belongs to, or refers to the anon_vma for anonymous memory. ``{unnamed_union}`` anonymous ``index`` Offset within the file, in units of pages. For anonymous memory, this is the index from the beginning of the mmap. ``share`` number of DAX mappings that reference this folio. See dax_associate_entry. ``{unnamed_union}`` anonymous ``private`` Filesystem per-folio data (see folio_attach_private()). ``swap`` Used for swp_entry_t if folio_test_swapcache(). ``migrate_info`` Stores migration state (anon_vma pointer and FOLIO_WAS_* markers). ``_mapcount`` Do not access this member directly. Use folio_mapcount() to find out how many times this folio is mapped by userspace. ``_refcount`` Do not access this member directly. Use folio_ref_count() to find how many references there are to this folio. ``memcg_data`` Memory Control Group data. ``_unused_slab_obj_exts`` Placeholder to match obj_exts in struct slab. ``virtual`` Virtual address in the kernel direct map. ``_last_cpupid`` IDs of last CPU and last process that accessed the folio. ``_large_mapcount`` Do not use directly, call folio_mapcount(). ``_nr_pages_mapped`` Do not use outside of rmap and debug code. ``_entire_mapcount`` Do not use directly, call folio_entire_mapcount(). ``_pincount`` Do not use directly, call folio_maybe_dma_pinned(). ``_mm_id_mapcount`` Do not use outside of rmap code. ``{unnamed_union}`` anonymous ``_mm_id`` Do not use outside of rmap code. ``_mm_ids`` Do not use outside of rmap code. ``_nr_pages`` Do not use directly, call folio_nr_pages(). ``_deferred_list`` Folios to be split under memory pressure. ``_entire_mapcount`` Do not use directly, call folio_entire_mapcount(). ``_pincount`` Do not use directly, call folio_maybe_dma_pinned(). ``_hugetlb_subpool`` Do not use directly, use accessor in hugetlb.h. ``_hugetlb_cgroup`` Do not use directly, use accessor in hugetlb_cgroup.h. ``_hugetlb_cgroup_rsvd`` Do not use directly, use accessor in hugetlb_cgroup.h. ``_hugetlb_hwpoison`` Do not use directly, call raw_hwp_list_head().”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³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´Mkhjö{ubj7 )�”}”(hXçstruct folio { memdesc_flags_t flags; union { struct list_head lru; unsigned int mlock_count; struct dev_pagemap *pgmap; }; struct address_space *mapping; union { pgoff_t index; unsigned long share; }; union { void *private; swp_entry_t swap; unsigned long migrate_info; }; atomic_t _mapcount; atomic_t _refcount; #ifdef CONFIG_MEMCG; unsigned long memcg_data; #elif defined(CONFIG_SLAB_OBJ_EXT); unsigned long _unused_slab_obj_exts; #endif; #if defined(WANT_PAGE_VIRTUAL); void *virtual; #endif; #ifdef LAST_CPUPID_NOT_IN_PAGE_FLAGS; int _last_cpupid; #endif; atomic_t _large_mapcount; atomic_t _nr_pages_mapped; #ifdef CONFIG_64BIT; atomic_t _entire_mapcount; atomic_t _pincount; #endif ; mm_id_mapcount_t _mm_id_mapcount[2]; union { mm_id_t _mm_id[2]; unsigned long _mm_ids; }; #ifdef NR_PAGES_IN_LARGE_FOLIO; unsigned int _nr_pages; #endif ; struct list_head _deferred_list; #ifndef CONFIG_64BIT; atomic_t _entire_mapcount; atomic_t _pincount; #endif ; void *_hugetlb_subpool; void *_hugetlb_cgroup; void *_hugetlb_cgroup_rsvd; void *_hugetlb_hwpoison; };”h]”hXçstruct folio { memdesc_flags_t flags; union { struct list_head lru; unsigned int mlock_count; struct dev_pagemap *pgmap; }; struct address_space *mapping; union { pgoff_t index; unsigned long share; }; union { void *private; swp_entry_t swap; unsigned long migrate_info; }; atomic_t _mapcount; atomic_t _refcount; #ifdef CONFIG_MEMCG; unsigned long memcg_data; #elif defined(CONFIG_SLAB_OBJ_EXT); unsigned long _unused_slab_obj_exts; #endif; #if defined(WANT_PAGE_VIRTUAL); void *virtual; #endif; #ifdef LAST_CPUPID_NOT_IN_PAGE_FLAGS; int _last_cpupid; #endif; atomic_t _large_mapcount; atomic_t _nr_pages_mapped; #ifdef CONFIG_64BIT; atomic_t _entire_mapcount; atomic_t _pincount; #endif ; mm_id_mapcount_t _mm_id_mapcount[2]; union { mm_id_t _mm_id[2]; unsigned long _mm_ids; }; #ifdef NR_PAGES_IN_LARGE_FOLIO; unsigned int _nr_pages; #endif ; struct list_head _deferred_list; #ifndef CONFIG_64BIT; atomic_t _entire_mapcount; atomic_t _pincount; #endif ; void *_hugetlb_subpool; void *_hugetlb_cgroup; void *_hugetlb_cgroup_rsvd; void *_hugetlb_hwpoison; };”…”�”}”hj|sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j6 h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´Mmhjö{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³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M¤hjö{ubj¤)�”}”(hhh]”(j©)�”}”(hŒ'``flags`` Identical to the page flags. ”h]”(j¯)�”}”(hŒ ``flags``”h]”jS)�”}”(hjG|h]”hŒflags”…”�”}”(hjI|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjE|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´MihjA|ubjÉ)�”}”(hhh]”jM)�”}”(hŒIdentical to the page flags.”h]”hŒIdentical to the page flags.”…”�”}”(hj`|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j\|h´Mihj]|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjA|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j\|h´Mihj>|ubj©)�”}”(hŒ``{unnamed_union}`` anonymous ”h]”(j¯)�”}”(hŒ``{unnamed_union}``”h]”jS)�”}”(hj€|h]”hŒ{unnamed_union}”…”�”}”(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:115: ./include/linux/mm_types.h”h´Khjz|ubjÉ)�”}”(hhh]”jM)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(hj™|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j•|h´Khj–|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjz|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j•|h´Khj>|ubj©)�”}”(hŒK``lru`` Least Recently Used list; tracks how recently this folio was used. ”h]”(j¯)�”}”(hŒ``lru``”h]”jS)�”}”(hj¹|h]”hŒlru”…”�”}”(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:115: ./include/linux/mm_types.h”h´Mjhj³|ubjÉ)�”}”(hhh]”jM)�”}”(hŒBLeast Recently Used list; tracks how recently this folio was used.”h]”hŒBLeast Recently Used list; tracks how recently this folio was used.”…”�”}”(hjÒ|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÎ|h´MjhjÏ|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj³|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÎ|h´Mjhj>|ubj©)�”}”(hŒG``mlock_count`` Number of times this folio has been pinned by mlock(). ”h]”(j¯)�”}”(hŒ``mlock_count``”h]”jS)�”}”(hjò|h]”hŒ mlock_count”…”�”}”(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:115: ./include/linux/mm_types.h”h´Mkhjì|ubjÉ)�”}”(hhh]”jM)�”}”(hŒ6Number of times this folio has been pinned by mlock().”h]”hŒ6Number of times this folio has been pinned by mlock().”…”�”}”(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Œ,``pgmap`` Metadata for ZONE_DEVICE mappings ”h]”(j¯)�”}”(hŒ ``pgmap``”h]”jS)�”}”(hj+}h]”hŒpgmap”…”�”}”(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:115: ./include/linux/mm_types.h”h´M{hj%}ubjÉ)�”}”(hhh]”jM)�”}”(hŒ!Metadata for ZONE_DEVICE mappings”h]”hŒ!Metadata for ZONE_DEVICE mappings”…”�”}”(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Œ[``mapping`` The file this page belongs to, or refers to the anon_vma for anonymous memory. ”h]”(j¯)�”}”(hŒ ``mapping``”h]”jS)�”}”(hjd}h]”hŒmapping”…”�”}”(hjf}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjb}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´Mmhj^}ubjÉ)�”}”(hhh]”jM)�”}”(hŒNThe file this page belongs to, or refers to the anon_vma for anonymous memory.”h]”hŒNThe file this page belongs to, or refers to the anon_vma for anonymous memory.”…”�”}”(hj}}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´Mlhjz}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj^}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jy}h´Mmhj>|ubj©)�”}”(hŒ``{unnamed_union}`` anonymous ”h]”(j¯)�”}”(hŒ``{unnamed_union}``”h]”jS)�”}”(hjž}h]”hŒ{unnamed_union}”…”�”}”(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:115: ./include/linux/mm_types.h”h´Khj˜}ubjÉ)�”}”(hhh]”jM)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(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Œ~``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×}h]”hŒindex”…”�”}”(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:115: ./include/linux/mm_types.h”h´MohjÑ}ubjÉ)�”}”(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ð}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´Mnhjí}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÑ}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jì}h´Mohj>|ubj©)�”}”(hŒU``share`` number of DAX mappings that reference this folio. See dax_associate_entry. ”h]”(j¯)�”}”(hŒ ``share``”h]”jS)�”}”(hj~h]”hŒshare”…”�”}”(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:115: ./include/linux/mm_types.h”h´Mqhj ~ubjÉ)�”}”(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*~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´Mphj'~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j&~h´Mqhj>|ubj©)�”}”(hŒ``{unnamed_union}`` anonymous ”h]”(j¯)�”}”(hŒ``{unnamed_union}``”h]”jS)�”}”(hjK~h]”hŒ{unnamed_union}”…”�”}”(hjM~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjI~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´KhjE~ubjÉ)�”}”(hhh]”jM)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(hjd~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j`~h´Khja~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjE~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j`~h´Khj>|ubj©)�”}”(hŒD``private`` Filesystem per-folio data (see folio_attach_private()). ”h]”(j¯)�”}”(hŒ ``private``”h]”jS)�”}”(hj„~h]”hŒprivate”…”�”}”(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:115: ./include/linux/mm_types.h”h´Mrhj~~ubjÉ)�”}”(hhh]”jM)�”}”(hŒ7Filesystem per-folio data (see folio_attach_private()).”h]”hŒ7Filesystem per-folio data (see folio_attach_private()).”…”�”}”(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>|ubj©)�”}”(hŒ9``swap`` Used for swp_entry_t if folio_test_swapcache(). ”h]”(j¯)�”}”(hŒ``swap``”h]”jS)�”}”(hj½~h]”hŒswap”…”�”}”(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:115: ./include/linux/mm_types.h”h´Mshj·~ubjÉ)�”}”(hhh]”jM)�”}”(hŒ/Used for swp_entry_t if folio_test_swapcache().”h]”hŒ/Used for swp_entry_t if folio_test_swapcache().”…”�”}”(hjÖ~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÒ~h´MshjÓ~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj·~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÒ~h´Mshj>|ubj©)�”}”(hŒT``migrate_info`` Stores migration state (anon_vma pointer and FOLIO_WAS_* markers). ”h]”(j¯)�”}”(hŒ``migrate_info``”h]”jS)�”}”(hjö~h]”hŒ migrate_info”…”�”}”(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:115: ./include/linux/mm_types.h”h´Muhjð~ubjÉ)�”}”(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).”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´Mthj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjð~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j h´Muhj>|ubj©)�”}”(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)�”}”(hj0h]”hŒ _mapcount”…”�”}”(hj2h²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:115: ./include/linux/mm_types.h”h´Mwhj*ubjÉ)�”}”(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.”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´MvhjFubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jEh´Mwhj>|ubj©)�”}”(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)�”}”(hjjh]”hŒ _refcount”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´MyhjdubjÉ)�”}”(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.”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´Mxhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjdubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jh´Myhj>|ubj©)�”}”(hŒ*``memcg_data`` Memory Control Group data. ”h]”(j¯)�”}”(hŒ``memcg_data``”h]”jS)�”}”(hj¤h]”hŒ 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:115: ./include/linux/mm_types.h”h´MzhjžubjÉ)�”}”(hhh]”jM)�”}”(hŒMemory Control Group data.”h]”hŒMemory Control Group data.”…”�”}”(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ŒH``_unused_slab_obj_exts`` Placeholder to match obj_exts in struct slab. ”h]”(j¯)�”}”(hŒ``_unused_slab_obj_exts``”h]”jS)�”}”(hjÝh]”hŒ_unused_slab_obj_exts”…”�”}”(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:115: ./include/linux/mm_types.h”h´M‹hj×ubjÉ)�”}”(hhh]”jM)�”}”(hŒ-Placeholder to match obj_exts in struct slab.”h]”hŒ-Placeholder to match obj_exts in struct slab.”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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``virtual`` Virtual address in the kernel direct map. ”h]”(j¯)�”}”(hŒ ``virtual``”h]”jS)�”}”(hj€h]”hŒvirtual”…”�”}”(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:115: ./include/linux/mm_types.h”h´M|hj€ubjÉ)�”}”(hhh]”jM)�”}”(hŒ)Virtual address in the kernel direct map.”h]”hŒ)Virtual address in the kernel direct 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ŒK``_last_cpupid`` IDs of last CPU and last process that accessed the folio. ”h]”(j¯)�”}”(hŒ``_last_cpupid``”h]”jS)�”}”(hjO€h]”hŒ _last_cpupid”…”�”}”(hjQ€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjM€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M}hjI€ubjÉ)�”}”(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.”…”�”}”(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Œ@``_large_mapcount`` Do not use directly, call folio_mapcount(). ”h]”(j¯)�”}”(hŒ``_large_mapcount``”h]”jS)�”}”(hjˆ€h]”hŒ_large_mapcount”…”�”}”(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:115: ./include/linux/mm_types.h”h´Mhj‚€ubjÉ)�”}”(hhh]”jM)�”}”(hŒ+Do not use directly, call folio_mapcount().”h]”hŒ+Do not use directly, call folio_mapcount().”…”�”}”(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Œ@``_nr_pages_mapped`` Do not use outside of rmap and debug code. ”h]”(j¯)�”}”(hŒ``_nr_pages_mapped``”h]”jS)�”}”(hjÁ€h]”hŒ_nr_pages_mapped”…”�”}”(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:115: ./include/linux/mm_types.h”h´M€hj»€ubjÉ)�”}”(hhh]”jM)�”}”(hŒ*Do not use outside of rmap and debug code.”h]”hŒ*Do not use outside of rmap and debug code.”…”�”}”(hjÚ€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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``_entire_mapcount`` Do not use directly, call folio_entire_mapcount(). ”h]”(j¯)�”}”(hŒ``_entire_mapcount``”h]”jS)�”}”(hjú€h]”hŒ_entire_mapcount”…”�”}”(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:115: ./include/linux/mm_types.h”h´M~hjô€ubjÉ)�”}”(hhh]”jM)�”}”(hŒ2Do not use directly, call folio_entire_mapcount().”h]”hŒ2Do not use directly, call folio_entire_mapcount().”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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``_pincount`` Do not use directly, call folio_maybe_dma_pinned(). ”h]”(j¯)�”}”(hŒ ``_pincount``”h]”jS)�”}”(hj3�h]”hŒ _pincount”…”�”}”(hj5�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj1�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M�hj-�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ3Do not use directly, call folio_maybe_dma_pinned().”h]”hŒ3Do not use directly, call folio_maybe_dma_pinned().”…”�”}”(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Œ5``_mm_id_mapcount`` Do not use outside of rmap code. ”h]”(j¯)�”}”(hŒ``_mm_id_mapcount``”h]”jS)�”}”(hjl�h]”hŒ_mm_id_mapcount”…”�”}”(hjn�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M…hjf�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ Do not use outside of rmap code.”h]”hŒ Do not use outside of rmap code.”…”�”}”(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Œ``{unnamed_union}`` anonymous ”h]”(j¯)�”}”(hŒ``{unnamed_union}``”h]”jS)�”}”(hj¥�h]”hŒ{unnamed_union}”…”�”}”(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:115: ./include/linux/mm_types.h”h´KhjŸ�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(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Œ,``_mm_id`` Do not use outside of rmap code. ”h]”(j¯)�”}”(hŒ ``_mm_id``”h]”jS)�”}”(hjÞ�h]”hŒ_mm_id”…”�”}”(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:115: ./include/linux/mm_types.h”h´MƒhjØ�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ Do not use outside of rmap code.”h]”hŒ Do not use outside of rmap code.”…”�”}”(hj÷�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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Œ-``_mm_ids`` Do not use outside of rmap code. ”h]”(j¯)�”}”(hŒ ``_mm_ids``”h]”jS)�”}”(hj‚h]”hŒ_mm_ids”…”�”}”(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:115: ./include/linux/mm_types.h”h´M„hj‚ubjÉ)�”}”(hhh]”jM)�”}”(hŒ Do not use outside of rmap code.”h]”hŒ Do not use outside of rmap code.”…”�”}”(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Œ:``_nr_pages`` Do not use directly, call folio_nr_pages(). ”h]”(j¯)�”}”(hŒ ``_nr_pages``”h]”jS)�”}”(hjP‚h]”hŒ _nr_pages”…”�”}”(hjR‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjN‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M‚hjJ‚ubjÉ)�”}”(hhh]”jM)�”}”(hŒ+Do not use directly, call folio_nr_pages().”h]”hŒ+Do not use directly, call folio_nr_pages().”…”�”}”(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>|ubj©)�”}”(hŒ=``_deferred_list`` Folios to be split under memory pressure. ”h]”(j¯)�”}”(hŒ``_deferred_list``”h]”jS)�”}”(hj‰‚h]”hŒ_deferred_list”…”�”}”(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:115: ./include/linux/mm_types.h”h´MŠhjƒ‚ubjÉ)�”}”(hhh]”jM)�”}”(hŒ)Folios to be split under memory pressure.”h]”hŒ)Folios to be split under memory pressure.”…”�”}”(hj¢‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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``_entire_mapcount`` Do not use directly, call folio_entire_mapcount(). ”h]”(j¯)�”}”(hŒ``_entire_mapcount``”h]”jS)�”}”(hj‚h]”hŒ_entire_mapcount”…”�”}”(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:115: ./include/linux/mm_types.h”h´M~hj¼‚ubjÉ)�”}”(hhh]”jM)�”}”(hŒ2Do not use directly, call folio_entire_mapcount().”h]”hŒ2Do not use directly, call folio_entire_mapcount().”…”�”}”(hjÛ‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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``_pincount`` Do not use directly, call folio_maybe_dma_pinned(). ”h]”(j¯)�”}”(hŒ ``_pincount``”h]”jS)�”}”(hjû‚h]”hŒ _pincount”…”�”}”(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:115: ./include/linux/mm_types.h”h´M�hjõ‚ubjÉ)�”}”(hhh]”jM)�”}”(hŒ3Do not use directly, call folio_maybe_dma_pinned().”h]”hŒ3Do not use directly, call folio_maybe_dma_pinned().”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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``_hugetlb_subpool`` Do not use directly, use accessor in hugetlb.h. ”h]”(j¯)�”}”(hŒ``_hugetlb_subpool``”h]”jS)�”}”(hj4ƒh]”hŒ_hugetlb_subpool”…”�”}”(hj6ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj2ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M†hj.ƒubjÉ)�”}”(hhh]”jM)�”}”(hŒ/Do not use directly, use accessor in hugetlb.h.”h]”hŒ/Do not use directly, use accessor in hugetlb.h.”…”�”}”(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ŒK``_hugetlb_cgroup`` Do not use directly, use accessor in hugetlb_cgroup.h. ”h]”(j¯)�”}”(hŒ``_hugetlb_cgroup``”h]”jS)�”}”(hjmƒh]”hŒ_hugetlb_cgroup”…”�”}”(hjoƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjkƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M‡hjgƒubjÉ)�”}”(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†ƒ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ŒP``_hugetlb_cgroup_rsvd`` Do not use directly, use accessor in hugetlb_cgroup.h. ”h]”(j¯)�”}”(hŒ``_hugetlb_cgroup_rsvd``”h]”jS)�”}”(hj¦ƒh]”hŒ_hugetlb_cgroup_rsvd”…”�”}”(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:115: ./include/linux/mm_types.h”h´Mˆhj ƒubjÉ)�”}”(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¿ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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``_hugetlb_hwpoison`` Do not use directly, call raw_hwp_list_head().”h]”(j¯)�”}”(hŒ``_hugetlb_hwpoison``”h]”jS)�”}”(hj߃h]”hŒ_hugetlb_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:115: ./include/linux/mm_types.h”h´MˆhjÙƒubjÉ)�”}”(hhh]”jM)�”}”(hŒ.Do not use directly, call raw_hwp_list_head().”h]”hŒ.Do not use directly, call raw_hwp_list_head().”…”�”}”(hjøƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./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ƒhjKòh²hh³j]zh´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:115: ./include/linux/mm_types.h”h´MŒhjKò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 ”…”�”}”(hj8„h²hh³Nh´NubjS)�”}”(hŒ ``PAGE_SIZE``”h]”hŒ PAGE_SIZE”…”�”}”(hj@„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj8„ubhŒë. 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.”…”�”}”(hj8„h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M‹hjKòh²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒptdesc (C struct)”Œc.ptdesc”hNt”auh1hÜhjKòh²hh³j]zh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒptdesc”h]”hù)�”}”(hŒ struct ptdesc”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjr„h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjn„h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”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Œptdesc”h]”j)�”}”(hjl„h]”hŒptdesc”…”�”}”(hj’„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŽ„ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþ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Œ"Memory descriptor for page tables.”h]”hŒ"Memory descriptor for page tables.”…”�”}”(hj´„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M*hj±„h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjg„h²hh³j„h´M–ubeh}”(h]”h ]”(jAŒstruct”eh"]”h$]”h&]”jFjAjGjÌ„jHjÌ„jI‰jJ‰jK‰uh1híh²hhjKòh³j]zh´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Ø„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÔ„ubhŒ:”…”�”}”(hjÔ„h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M.hjЄubj7 )�”}”(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ñ„sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j6 h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M0hjЄ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³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´MRhjЄubj¤)�”}”(hhh]”(j©)�”}”(hŒ3``pt_flags`` enum pt_flags plus zone/node/section. ”h]”(j¯)�”}”(hŒ ``pt_flags``”h]”jS)�”}”(hj!…h]”hŒpt_flags”…”�”}”(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:115: ./include/linux/mm_types.h”h´M,hj…ubjÉ)�”}”(hhh]”jM)�”}”(hŒ%enum pt_flags plus zone/node/section.”h]”hŒ%enum pt_flags plus zone/node/section.”…”�”}”(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Œ``{unnamed_union}`` anonymous ”h]”(j¯)�”}”(hŒ``{unnamed_union}``”h]”jS)�”}”(hjZ…h]”hŒ{unnamed_union}”…”�”}”(hj\…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjX…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´KhjT…ubjÉ)�”}”(hhh]”jM)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(hjs…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jo…h´Khjp…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjT…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jo…h´Khj…ubj©)�”}”(hŒ.``pt_rcu_head`` For freeing page table pages. ”h]”(j¯)�”}”(hŒ``pt_rcu_head``”h]”jS)�”}”(hj“…h]”hŒ pt_rcu_head”…”�”}”(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:115: ./include/linux/mm_types.h”h´M-hj�…ubjÉ)�”}”(hhh]”jM)�”}”(hŒFor freeing page table pages.”h]”hŒFor freeing page table 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Œ…``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Ì…h]”hŒpt_list”…”�”}”(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:115: ./include/linux/mm_types.h”h´M0hjÆ…ubjÉ)�”}”(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å…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./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´M0hj…ubj©)�”}”(hŒ``{unnamed_struct}`` anonymous ”h]”(j¯)�”}”(hŒ``{unnamed_struct}``”h]”jS)�”}”(hj†h]”hŒ{unnamed_struct}”…”�”}”(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:115: ./include/linux/mm_types.h”h´Khj†ubjÉ)�”}”(hhh]”jM)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(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Œ>``_pt_pad_1`` Padding that aliases with page's compound head. ”h]”(j¯)�”}”(hŒ ``_pt_pad_1``”h]”jS)�”}”(hj?†h]”hŒ _pt_pad_1”…”�”}”(hjA†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:115: ./include/linux/mm_types.h”h´M1hj9†ubjÉ)�”}”(hhh]”jM)�”}”(hŒ/Padding that aliases with page's compound head.”h]”hŒ1Padding that aliases with page’s compound head.”…”�”}”(hjX†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jT†h´M1hjU†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj9†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jT†h´M1hj…ubj©)�”}”(hŒ:``pmd_huge_pte`` Protected by ptdesc->ptl, used for THPs. ”h]”(j¯)�”}”(hŒ``pmd_huge_pte``”•h]”jS)�”}”(hjx†h]”hŒ pmd_huge_pte”…”�”}”(hjz†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjv†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M2hjr†ubjÉ)�”}”(hhh]”jM)�”}”(hŒ(Protected by ptdesc->ptl, used for THPs.”h]”hŒ(Protected by ptdesc->ptl, used for THPs.”…”�”}”(hj‘†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�†h´M2hjކubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjr†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�†h´M2hj…ubj©)�”}”(hŒG``__page_mapping`` Aliases with page->mapping. Unused for page tables. ”h]”(j¯)�”}”(hŒ``__page_mapping``”h]”jS)�”}”(hj±†h]”hŒ__page_mapping”…”�”}”(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:115: ./include/linux/mm_types.h”h´M3hj«†ubjÉ)�”}”(hhh]”jM)�”}”(hŒ3Aliases with page->mapping. Unused for page tables.”h]”hŒ3Aliases with page->mapping. Unused for page tables.”…”�”}”(hjʆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jƆh´M3hjdžubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj«†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jƆh´M3hj…ubj©)�”}”(hŒ``{unnamed_union}`` anonymous ”h]”(j¯)�”}”(hŒ``{unnamed_union}``”h]”jS)�”}”(hjê†h]”hŒ{unnamed_union}”…”�”}”(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:115: ./include/linux/mm_types.h”h´Khjä†ubjÉ)�”}”(hhh]”jM)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(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Œ!``pt_index`` Used for s390 gmap. ”h]”(j¯)�”}”(hŒ ``pt_index``”h]”jS)�”}”(hj#‡h]”hŒpt_index”…”�”}”(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:115: ./include/linux/mm_types.h”h´M4hj‡ubjÉ)�”}”(hhh]”jM)�”}”(hŒUsed for s390 gmap.”h]”hŒUsed for s390 gmap.”…”�”}”(hj<‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j8‡h´M4hj9‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j8‡h´M4hj…ubj©)�”}”(hŒ``pt_mm`` Used for x86 pgds. ”h]”(j¯)�”}”(hŒ ``pt_mm``”h]”jS)�”}”(hj\‡h]”hŒpt_mm”…”�”}”(hj^‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjZ‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M5hjV‡ubjÉ)�”}”(hhh]”jM)�”}”(hŒUsed for x86 pgds.”h]”hŒUsed for x86 pgds.”…”�”}”(hju‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jq‡h´M5hjr‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjV‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jq‡h´M5hj…ubj©)�”}”(hŒG``pt_frag_refcount`` For fragmented page table tracking. Powerpc only. ”h]”(j¯)�”}”(hŒ``pt_frag_refcount``”h]”jS)�”}”(hj•‡h]”hŒpt_frag_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:115: ./include/linux/mm_types.h”h´M6hj�‡ubjÉ)�”}”(hhh]”jM)�”}”(hŒ1For fragmented page table tracking. Powerpc only.”h]”hŒ1For fragmented page table tracking. Powerpc only.”…”�”}”(hj®‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jª‡h´M6hj«‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jª‡h´M6hj…ubj©)�”}”(hŒ@``pt_share_count`` Used for HugeTLB PMD page table share count. ”h]”(j¯)�”}”(hŒ``pt_share_count``”h]”jS)�”}”(hj·h]”hŒpt_share_count”…”�”}”(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:115: ./include/linux/mm_types.h”h´M7hjȇubjÉ)�”}”(hhh]”jM)�”}”(hŒ,Used for HugeTLB PMD page table share count.”h]”hŒ,Used for HugeTLB PMD page table share count.”…”�”}”(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Œ``{unnamed_union}`` anonymous ”h]”(j¯)�”}”(hŒ``{unnamed_union}``”h]”jS)�”}”(hjˆh]”hŒ{unnamed_union}”…”�”}”(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:115: ./include/linux/mm_types.h”h´KhjˆubjÉ)�”}”(hhh]”jM)�”}”(hŒ anonymous”h]”hŒ anonymous”…”�”}”(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Œ2``_pt_pad_2`` Padding to ensure proper alignment. ”h]”(j¯)�”}”(hŒ ``_pt_pad_2``”h]”jS)�”}”(hj@ˆh]”hŒ _pt_pad_2”…”�”}”(hjBˆ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:115: ./include/linux/mm_types.h”h´M8hj:ˆubjÉ)�”}”(hhh]”jM)�”}”(hŒ#Padding to ensure proper alignment.”h]”hŒ#Padding to ensure proper alignment.”…”�”}”(hjYˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jUˆh´M8hjVˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj:ˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jUˆh´M8hj…ubj©)�”}”(hŒ!``ptl`` Lock for the page table. ”h]”(j¯)�”}”(hŒ``ptl``”h]”jS)�”}”(hjyˆh]”hŒptl”…”�”}”(hj{ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjwˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M9hjsˆ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Èhjsˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŽˆh´M9hj…ubj©)�”}”(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:115: ./include/linux/mm_types.h”h´M9hj¬ˆ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³jLjh´M9hjȈubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¬ˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jLjh´M9hj…ubj©)�”}”(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:115: ./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…ubj©)�”}”(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:115: ./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³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Œ;``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:115: ./include/linux/mm_types.h”h´M;hjW‰ubjÉ)�”}”(hhh]”jM)�”}”(hŒ)Memcg data. Tracked for page tables here.”h]”hŒ)Memcg data. Tracked for page tables here.”…”�”}”(hjv‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”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Єubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³j]zh´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:115: ./include/linux/mm_types.h”h´M?hjKò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:115: ./include/linux/mm_types.h”h´M<hjKòh²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvm_fault_t (C type)”Œ c.vm_fault_t”hNt”auh1hÜhjKòh²hh³j]zh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ vm_fault_t”h]”hù)�”}”(hŒtype vm_fault_t”h]”(jœ)�”}”(hj„h]”hŒtype”…”�”}”(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:115: ./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:115: ./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&]”jFjAjGj8ŠjHj8ŠjI‰jJ‰jK‰uh1híh²hhjKòh³j]zh´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:115: ./include/linux/mm_types.h”h´M¤hjKò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:115: ./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:115: ./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)�”}”(hjJ‹h]”hŒVM_FAULT_SIGBUS”…”�”}”(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:115: ./include/linux/mm_types.h”h´M³hjD‹ubjÉ)�”}”(hhh]”jM)�”}”(hŒ Bad access”h]”hŒ Bad access”…”�”}”(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³hj‹ubj©)�”}”(hŒ*``VM_FAULT_MAJOR`` Page read from storage ”h]”(j¯)�”}”(hŒ``VM_FAULT_MAJOR``”h]”jS)�”}”(hjƒ‹h]”hŒVM_FAULT_MAJOR”…”�”}”(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:115: ./include/linux/mm_types.h”h´M¶hj}‹ubjÉ)�”}”(hhh]”jM)�”}”(hŒPage read from storage”h]”hŒPage read from storage”…”�”}”(hjœ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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_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:115: ./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:115: ./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:115: ./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”…”�”}”(hj1Œ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:115: ./include/linux/mm_types.h”h´MÀhj)ŒubjÉ)�”}”(hhh]”jM)�”}”(hŒsegmentation fault”h]”hŒsegmentation fault”…”�”}”(hjHŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jDŒh´MÀhjEŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj)Œubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jDŒh´MÀhj‹ubj©)�”}”(hŒ?``VM_FAULT_NOPAGE`` ->fault installed the pte, not return page ”h]”(j¯)�”}”(hŒ``VM_FAULT_NOPAGE``”h]”jS)�”}”(hjhŒh]”hŒVM_FAULT_NOPAGE”…”�”}”(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:115: ./include/linux/mm_types.h”h´MÃhjbŒubjÉ)�”}”(hhh]”jM)�”}”(hŒ*->fault installed the pte, not return page”h]”hŒ*->fault installed the pte, not return page”…”�”}”(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Œ5``VM_FAULT_LOCKED`` ->fault locked the returned page ”h]”(j¯)�”}”(hŒ``VM_FAULT_LOCKED``”h]”jS)�”}”(hj¡Œh]”hŒVM_FAULT_LOCKED”…”�”}”(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:115: ./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:115: ./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:115: ./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)�”}”(hjL�h]”hŒVM_FAULT_DONE_COW”…”�”}”(hjN�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjJ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´MÏhjF�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ->fault has fully handled COW”h]”hŒ->fault has fully handled COW”…”�”}”(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Œ}``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)�”}”(hj…�h]”hŒVM_FAULT_NEEDDSYNC”…”�”}”(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:115: ./include/linux/mm_types.h”h´MÔhj�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)”…”�”}”(hjž�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./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Œ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:115: ./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:115: ./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:115: ./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ƒhjKòh²hh³j]zh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfault_flag (C enum)”Œ c.fault_flag”hNt”auh1hÜhjKòh²hh³j]zh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ fault_flag”h]”hù)�”}”(hŒenum fault_flag”h]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(hjRŽh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjNŽh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”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Œ fault_flag”h]”j)�”}”(hjLŽh]”hŒ fault_flag”…”�”}”(hjrŽh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjnŽubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþ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ŒFault flag definitions.”h]”hŒFault flag definitions.”…”�”}”(hj”Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M hj‘Žh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjGŽh²hh³j_Žh´Mßubeh}”(h]”h ]”(jAŒenum”eh"]”h$]”h&]”jFjAjGj¬ŽjHj¬ŽjI‰jJ‰jK‰uh1híh²hhjKòh³j]zh´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¶Ž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:115: ./include/linux/mm_types.h”h´Mhj°Žubj¤)�”}”(hhh]”(j©)�”}”(hŒ.``FAULT_FLAG_WRITE`` Fault was a write fault. ”h]”(j¯)�”}”(hŒ``FAULT_FLAG_WRITE``”h]”jS)�”}”(hjÕŽh]”hŒFAULT_FLAG_WRITE”…”�”}”(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:115: ./include/linux/mm_types.h”h´MhjÏŽubjÉ)�”}”(hhh]”jM)�”}”(hŒFault was a write fault.”h]”hŒFault was a write 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Œ:``FAULT_FLAG_MKWRITE`` Fault was mkwrite of existing PTE. ”h]”(j¯)�”}”(hŒ``FAULT_FLAG_MKWRITE``”h]”jS)�”}”(hj�h]”hŒFAULT_FLAG_MKWRITE”…”�”}”(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:115: ./include/linux/mm_types.h”h´Mhj�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ"Fault was mkwrite of existing PTE.”h]”hŒ"Fault was mkwrite of existing PTE.”…”�”}”(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Œ@``FAULT_FLAG_ALLOW_RETRY`` Allow to retry the fault if blocked. ”h]”(j¯)�”}”(hŒ``FAULT_FLAG_ALLOW_RETRY``”h]”jS)�”}”(hjG�h]”hŒFAULT_FLAG_ALLOW_RETRY”…”�”}”(hjI�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjE�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´MhjA�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ$Allow to retry the fault if blocked.”h]”hŒ$Allow to retry the fault if blocked.”…”�”}”(hj`�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j\�h´Mhj]�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjA�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j\�h´MhjÌŽubj©)�”}”(hŒI``FAULT_FLAG_RETRY_NOWAIT`` Don't drop mmap_lock and wait when retrying. ”h]”(j¯)�”}”(hŒ``FAULT_FLAG_RETRY_NOWAIT``”h]”jS)�”}”(hj€�h]”hŒFAULT_FLAG_RETRY_NOWAIT”…”�”}”(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:115: ./include/linux/mm_types.h”h´Mhjz�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ,Don't drop mmap_lock and wait when retrying.”h]”hŒ.Don’t drop mmap_lock and wait when retrying.”…”�”}”(hj™�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j•�h´Mhj–�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjz�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j•�h´MhjÌŽubj©)�”}”(hŒF``FAULT_FLAG_KILLABLE`` The fault task is in SIGKILL killable region. ”h]”(j¯)�”}”(hŒ``FAULT_FLAG_KILLABLE``”h]”jS)�”}”(hj¹�h]”hŒFAULT_FLAG_KILLABLE”…”�”}”(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:115: ./include/linux/mm_types.h”h´M hj³�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ-The fault task is in SIGKILL killable region.”h]”hŒ-The fault task is in SIGKILL killable region.”…”�”}”(hjÒ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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``FAULT_FLAG_TRIED`` The fault has been tried once. ”h]”(j¯)�”}”(hŒ``FAULT_FLAG_TRIED``”h]”jS)�”}”(hjò�h]”hŒFAULT_FLAG_TRIED”…”�”}”(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:115: ./include/linux/mm_types.h”h´M#hjì�ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe fault has been tried once.”h]”hŒThe fault has been tried once.”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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``FAULT_FLAG_USER`` The fault originated in userspace. ”h]”(j¯)�”}”(hŒ``FAULT_FLAG_USER``”h]”jS)�”}”(hj+�h]”hŒFAULT_FLAG_USER”…”�”}”(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:115: ./include/linux/mm_types.h”h´M&hj%�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ"The fault originated in userspace.”h]”hŒ"The fault originated in userspace.”…”�”}”(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Œ<``FAULT_FLAG_REMOTE`` The fault is not for current task/mm. ”h]”(j¯)�”}”(hŒ``FAULT_FLAG_REMOTE``”h]”jS)�”}”(hjd�h]”hŒFAULT_FLAG_REMOTE”…”�”}”(hjf�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjb�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M)hj^�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ%The fault is not for current task/mm.”h]”hŒ%The fault is not for current task/mm.”…”�”}”(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ŒF``FAULT_FLAG_INSTRUCTION`` The fault was during an instruction fetch. ”h]”(j¯)�”}”(hŒ``FAULT_FLAG_INSTRUCTION``”h]”jS)�”}”(hj��h]”hŒFAULT_FLAG_INSTRUCTION”…”�”}”(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:115: ./include/linux/mm_types.h”h´M,hj—�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ*The fault was during an instruction fetch.”h]”hŒ*The fault was during an instruction fetch.”…”�”}”(hj¶�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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``FAULT_FLAG_INTERRUPTIBLE`` The fault can be interrupted by non-fatal signals. ”h]”(j¯)�”}”(hŒ``FAULT_FLAG_INTERRUPTIBLE``”h]”jS)�”}”(hjÖ�h]”hŒFAULT_FLAG_INTERRUPTIBLE”…”�”}”(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:115: ./include/linux/mm_types.h”h´M/hjÐ�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ2The fault can be interrupted by non-fatal signals.”h]”hŒ2The fault can be interrupted by non-fatal signals.”…”�”}”(hjï�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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Œ›``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‘h]”hŒFAULT_FLAG_UNSHARE”…”�”}”(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:115: ./include/linux/mm_types.h”h´M4hj ‘ubjÉ)�”}”(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(‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M2hj%‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j$‘h´M4hjÌŽubj©)�”}”(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)�”}”(hjI‘h]”hŒFAULT_FLAG_ORIG_PTE_VALID”…”�”}”(hjK‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjG‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M8hjC‘ubjÉ)�”}”(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.”…”�”}”(hjb‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M7hj_‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjC‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j^‘h´M8hjÌŽubj©)�”}”(hŒ<``FAULT_FLAG_VMA_LOCK`` The fault is handled under VMA lock.”h]”(j¯)�”}”(hŒ``FAULT_FLAG_VMA_LOCK``”h]”jS)�”}”(hjƒ‘h]”hŒFAULT_FLAG_VMA_LOCK”…”�”}”(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:115: ./include/linux/mm_types.h”h´M:hj}‘ubjÉ)�”}”(hhh]”jM)�”}”(hŒ$The fault is handled under VMA lock.”h]”hŒ$The fault is handled under VMA lock.”…”�”}”(hjœ‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./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ƒhjKòh²hh³j]zh´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:115: ./include/linux/mm_types.h”h´M=hjKò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Ü‘h²hh³Nh´NubjŽ)�”}”(hŒ**FAULT_FLAG_ALLOW_RETRY**”h]”hŒFAULT_FLAG_ALLOW_RETRY”…”�”}”(hjä‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÜ‘ubhŒ and ”…”�”}”(hjÜ‘h²hh³Nh´NubjŽ)�”}”(hŒ**FAULT_FLAG_TRIED**”h]”hŒFAULT_FLAG_TRIED”…”�”}”(hjö‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÜ‘ubhŒ�: 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Ü‘h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´MhjKòh²hubjÓM)�”}”(hhh]”(jc)�”}”(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’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M#hj’ubjÉ)�”}”(hhh]”jM)�”}”(hŒthis is the first try”h]”hŒthis is the first try”…”�”}”(hj/’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj’ubjc)�”}”(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`’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M&hj\’ubjÉ)�”}”(hhh]”jM)�”}”(hŒ!we've already tried at least once”h]”hŒ#we’ve already tried at least once”…”�”}”(hjr’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jn’h´M&hjo’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj\’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jn’h´M&hjY’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjU’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj’ubjc)�”}”(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”…”�”}”(hjœ’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M(hj˜’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj’ubeh}”(h]”h ]”h"]”h$]”h&]”j?NŒ loweralpha”jANj�?jBNjÆ?uh1jÒMhjKòh²hh³j]zh´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¸’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M*hjKò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Ç’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:115: ./include/linux/mm_types.h”h´M1hjKòh²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_is_file_lru (C function)”Œc.folio_is_file_lru”hNt”auh1hÜhjKò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ï’h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjë’h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´Kubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþ’h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjë’h²hh³jý’h´Kubhÿ)�”}”(hŒfolio_is_file_lru”h]”j)�”}”(hŒfolio_is_file_lru”h]”hŒfolio_is_file_lru”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj “ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjë’h²hh³jý’h´Kubj8)�”}”(hŒ(const struct folio *folio)”h]”j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjG“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(“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”jèŒ reftarget”jg“Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj“sbŒc.folio_is_file_lru”†”asbuh1hhj(“ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…“h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj(“ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj““h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj(“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&]”jjuh1j7hjë’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Œ.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Ê“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”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²hhjKò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ì“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:117: ./include/linux/mm_inline.h”h´Khjæ“ubj¤)�”}”(hhh]”j©)�”}”(hŒ1``const struct folio *folio`` The folio to test. ”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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´Khj”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´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Ž)�”}”(hjF”h]”hŒ Description”…”�”}”(hjH”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjD”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´Khjæ“ubjM)�”}”(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\”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´Khjæ“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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´Khjæ“ubjM)�”}”(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 ”…”�”}”(hjƒ”h²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj‹”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjƒ”ubhŒn is a regular filesystem backed page cache folio or a lazily freed anonymous folio (e.g. via MADV_FREE). 0 if ”…”�”}”(hjƒ”h²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj�”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjƒ”ubhŒR is a normal anonymous folio, a tmpfs folio or otherwise ram or swap backed folio.”…”�”}”(hjƒ”h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´Khjæ“ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$folio_flags_is_file_lru (C function)”Œc.folio_flags_is_file_lru”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ8int folio_flags_is_file_lru (const unsigned long *flags)”h]”hù)�”}”(hŒ7int folio_flags_is_file_lru(const unsigned long *flags)”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjÖ”h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÒ”h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.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Œfolio_flags_is_file_lru”h]”j)�”}”(hŒfolio_flags_is_file_lru”h]”hŒfolio_flags_is_file_lru”…”�”}”(hj÷”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjó”ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÒ”h²hh³jä”h´K"ubj8)�”}”(hŒ(const unsigned long *flags)”h]”j>)�”}”(hŒconst unsigned long *flags”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œ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•ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjf•h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj•ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjs•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&]”jjuh1j7hjÒ”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Œ.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�•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.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²hhjKòh³Nh´Nubj„)�”}”(hŒœ**Parameters** ``const unsigned long *flags`` The folio's flags. **Description** Just like folio_is_file_lru but take the folio flags directly 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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´K&hj¹•ubj¤)�”}”(hhh]”j©)�”}”(hŒ2``const unsigned long *flags`` The folio's flags. ”h]”(j¯)�”}”(hŒ``const unsigned long *flags``”h]”jS)�”}”(hjÞ•h]”hŒconst unsigned long *flags”…”�”}”(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:117: ./include/linux/mm_inline.h”h´K#hjØ•ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio's flags.”h]”hŒThe folio’s flags.”…”�”}”(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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´K%hj¹•ubjM)�”}”(hŒFJust like folio_is_file_lru but take the folio flags directly instead.”h]”hŒFJust like folio_is_file_lru but take the folio flags directly instead.”…”�”}”(hj/–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´K$hj¹•ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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^–h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjZ–h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´KEubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjm–h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjZ–h²hh³jl–h´KEubhÿ)�”}”(hŒ__folio_clear_lru_flags”h]”j)�”}”(hŒ__folio_clear_lru_flags”h]”hŒ__folio_clear_lru_flags”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj{–ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjZ–h²hh³jl–h´KEubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj›–h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj—–ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨–h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj—–ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj¹–h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¶–ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j»–Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj�–sbŒc.__folio_clear_lru_flags”†”asbuh1hhj—–ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙ–h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj—–ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjç–h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj—–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&]”jjuh1j7hjZ–h²hh³jl–h´KEubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjV–h²hh³jl–h´KEubah}”(h]”jQ–ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jl–h´KEhjS–h²hubj4)�”}”(hhh]”jM)�”}”(hŒ-Clear page lru flags before releasing a page.”h]”hŒ-Clear page lru flags before releasing a page.”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´KEhj—h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjS–h²hh³jl–h´KEubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj6—jHj6—jI‰jJ‰jK‰uh1híh²hhjKò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@—h]”hŒ Parameters”…”�”}”(hjB—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:117: ./include/linux/mm_inline.h”h´KIhj:—ubj¤)�”}”(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_—h]”hŒstruct folio *folio”…”�”}”(hja—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:117: ./include/linux/mm_inline.h”h´KKhjY—ubjÉ)�”}”(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.”…”�”}”(hjx—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´KFhju—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjY—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jt—h´KKhjV—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj:—ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_lru_list (C function)”Œc.folio_lru_list”hNt”auh1hÜhjKò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]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(hj¹—h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjµ—h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´KWubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇ—h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjµ—h²hh³jÆ—h´KWubh)�”}”(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”jèŒ reftarget”jÚ—Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒfolio_lru_list”sbŒc.folio_lru_list”†”asbuh1hhjµ—h²hh³jÆ—h´KWubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjù—h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjµ—h²hh³jÆ—h´KWubhÿ)�”}”(hŒfolio_lru_list”h]”j)�”}”(hjö—h]”hŒfolio_lru_list”…”�”}”(hj ˜h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj˜ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjµ—h²hh³jÆ—h´KWubj8)�”}”(hŒ(const struct folio *folio)”h]”j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjA˜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"˜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”jèŒ reftarget”ja˜Œmodname”NŒ classname”Njìjï)�”}”jò]”jô—Œc.folio_lru_list”†”asbuh1hhj"˜ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}˜h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj"˜ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj‹˜h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj"˜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&]”jjuh1j7hjµ—h²hh³jÆ—h´KWubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj±—h²hh³jÆ—h´KWubah}”(h]”j¬—ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÆ—h´KWhj®—h²hubj4)�”}”(hhh]”jM)�”}”(hŒ$Which LRU list should a folio be on?”h]”hŒ$Which LRU list should a folio be on?”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´KWhj¿˜h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj®—h²hh³jÆ—h´KWubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÚ˜jHjÚ˜jI‰jJ‰jK‰uh1híh²hhjKò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ä˜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:117: ./include/linux/mm_inline.h”h´K[hjÞ˜ubj¤)�”}”(hhh]”j©)�”}”(hŒ1``const struct folio *folio`` The folio to test. ”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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´KXhjý˜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´KXhj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjý˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j™h´KXhjú˜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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´KZhjÞ˜ubjM)�”}”(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.”…”�”}”(hjT™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´KZhjÞ˜ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒlru_set_gen_flags (C function)”Œc.lru_set_gen_flags”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ6void lru_set_gen_flags (unsigned long *flags, int gen)”h]”hù)�”}”(hŒ5void lru_set_gen_flags(unsigned long *flags, int gen)”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjƒ™h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj™h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.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Œlru_set_gen_flags”h]”j)�”}”(hŒlru_set_gen_flags”h]”hŒlru_set_gen_flags”…”�”}”(hj¤™h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ™ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj™h²hh³j‘™h´K�ubj8)�”}”(hŒ(unsigned long *flags, int gen)”h]”(j>)�”}”(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¼™ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjø™h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¼™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 gen”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Œgen”h]”hŒgen”…”�”}”(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&]”jjuh1j7hj™h²hh³j‘™h´K�ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj{™h²hh³j‘™h´K�ubah}”(h]”jv™ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j‘™h´K�hjx™h²hubj4)�”}”(hhh]”jM)�”}”(hŒ7Set the LRU generation number to specified folio flags.”h]”hŒ7Set the LRU generation number to specified folio flags.”…”�”}”(hjdšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´K�hjašh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjx™h²hh³j‘™h´K�ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj|šjHj|šjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hŒ“**Parameters** ``unsigned long *flags`` pointer to the folio flags ``int gen`` generation number, between 0 and (MAX_NR_GENS - 1), inclusive.”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:117: ./include/linux/mm_inline.h”•h´K¡hj€šubj¤)�”}”(hhh]”(j©)�”}”(hŒ4``unsigned long *flags`` pointer to the folio 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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´KžhjŸšubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to the folio flags”h]”hŒpointer to the folio flags”…”�”}”(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ŒJ``int gen`` generation number, between 0 and (MAX_NR_GENS - 1), inclusive.”h]”(j¯)�”}”(hŒ ``int gen``”h]”jS)�”}”(hjÞšh]”hŒint gen”…”�”}”(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:117: ./include/linux/mm_inline.h”h´K hjØšubjÉ)�”}”(hhh]”jM)�”}”(hŒ>generation number, between 0 and (MAX_NR_GENS - 1), inclusive.”h]”hŒ>generation number, between 0 and (MAX_NR_GENS - 1), inclusive.”…”�”}”(hj÷šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”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€šubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒlru_get_gen_flags (C function)”Œc.lru_get_gen_flags”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ+int lru_get_gen_flags (unsigned long flags)”h]”hù)�”}”(hŒ*int lru_get_gen_flags(unsigned long flags)”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hj8›h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj4›h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´K«ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjG›h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj4›h²hh³jF›h´K«ubhÿ)�”}”(hŒlru_get_gen_flags”h]”j)�”}”(hŒlru_get_gen_flags”h]”hŒlru_get_gen_flags”…”�”}”(hjY›h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjU›ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj4›h²hh³jF›h´K«ubj8)�”}”(hŒ(unsigned long flags)”h]”j>)�”}”(hŒunsigned long flags”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Œflags”h]”hŒflags”…”�”}”(hj­›h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjq›ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjm›ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj4›h²hh³jF›h´K«ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj0›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Œ2Return the LRU generation number from folio flags.”h]”hŒ2Return the LRU generation number from folio flags.”…”�”}”(hj×›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´K«hjÔ›h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj-›h²hh³jF›h´K«ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjï›jHjï›jI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hŒÄ**Parameters** ``unsigned long flags`` folio flags **Return** A number between 0 and (MAX_NR_GENS - 1), inclusive. Returns -1 if the flags indicate the folio is off the list (e.g., isolated).”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:117: ./include/linux/mm_inline.h”h´K¯hjó›ubj¤)�”}”(hhh]”j©)�”}”(hŒ$``unsigned long flags`` folio 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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´K¬hjœubjÉ)�”}”(hhh]”jM)�”}”(hŒ folio flags”h]”hŒ folio flags”…”�”}”(hj1œ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Œ **Return**”h]”jŽ)�”}”(hjSœh]”hŒReturn”…”�”}”(hjUœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjQœubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´K®hjó›ubjM)�”}”(hŒ�A number between 0 and (MAX_NR_GENS - 1), inclusive. Returns -1 if the flags indicate the folio is off the list (e.g., isolated).”h]”hŒ�A number between 0 and (MAX_NR_GENS - 1), inclusive. Returns -1 if the flags indicate the folio is off the list (e.g., isolated).”…”�”}”(hjiœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´K®hjó›ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒlru_set_refs_flags (C function)”Œc.lru_set_refs_flags”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒAvoid lru_set_refs_flags (unsigned long *flags, unsigned int refs)”h]”hù)�”}”(hŒ@void lru_set_refs_flags(unsigned long *flags, 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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.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Œlru_set_refs_flags”h]”j)�”}”(hŒlru_set_refs_flags”h]”hŒlru_set_refs_flags”…”�”}”(hj¹œh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjµœubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj”œh²hh³j¦œh´K»ubj8)�”}”(hŒ)(unsigned long *flags, unsigned int refs)”h]”(j>)�”}”(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Ñœubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÑœ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 refs”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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Œint”h]”hŒint”…”�”}”(hjO�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”…”�”}”(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&]”jjuh1j7hj”œ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Œ,Set the LRU referenced count to folio flags.”h]”hŒ,Set the LRU referenced count to folio flags.”…”�”}”(hj•�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.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²hhjKòh³Nh´Nubj„)�”}”(hX**Parameters** ``unsigned long *flags`` pointer to the folio flags ``unsigned int refs`` referenced / access count number, between 0 and LRU_REFS_MAX, inclusive. **Description** For MGLRU, PG_referenced holds the first ref, and the extra bits hold the remaining refs. For classical LRU the extra bits are not used, so it can also be seen as the refs count never exceeds 1. In both cases, refs == 1 means PG_referenced is set and the extra bits are zero, and refs == 0 means PG_referenced and the extra bits are all unset.”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:117: ./include/linux/mm_inline.h”h´K¿hj±�ubj¤)�”}”(hhh]”(j©)�”}”(hŒ4``unsigned long *flags`` pointer to the folio 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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´K¼hjÐ�ubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to the folio flags”h]”hŒpointer to the folio flags”…”�”}”(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 int refs`` referenced / access count number, between 0 and LRU_REFS_MAX, inclusive. ”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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´K½hj žubjÉ)�”}”(hhh]”jM)�”}”(hŒHreferenced / access count number, between 0 and LRU_REFS_MAX, inclusive.”h]”hŒHreferenced / access count number, between 0 and LRU_REFS_MAX, inclusive.”…”�”}”(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Ž)�”}”(hjJžh]”hŒ Description”…”�”}”(hjLžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjHžubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´K¿hj±�ubjM)�”}”(hXWFor MGLRU, PG_referenced holds the first ref, and the extra bits hold the remaining refs. For classical LRU the extra bits are not used, so it can also be seen as the refs count never exceeds 1. In both cases, refs == 1 means PG_referenced is set and the extra bits are zero, and refs == 0 means PG_referenced and the extra bits are all unset.”h]”hXWFor MGLRU, PG_referenced holds the first ref, and the extra bits hold the remaining refs. For classical LRU the extra bits are not used, so it can also be seen as the refs count never exceeds 1. In both cases, refs == 1 means PG_referenced is set and the extra bits are zero, and refs == 0 means PG_referenced and the extra bits are all unset.”…”�”}”(hj`žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´K¾hj±�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒlru_get_refs_flags (C function)”Œc.lru_get_refs_flags”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ,int lru_get_refs_flags (unsigned long flags)”h]”hù)�”}”(hŒ+int lru_get_refs_flags(unsigned long flags)”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hj�žh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj‹žh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.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Œlru_get_refs_flags”h]”j)�”}”(hŒlru_get_refs_flags”h]”hŒlru_get_refs_flags”…”�”}”(hj°žh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¬žubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj‹žh²hh³j�žh´KÑubj8)�”}”(hŒ(unsigned long flags)”h]”j>)�”}”(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Äžubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj‹ž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Œ6Return LRU referenced / access count from folio flags.”h]”hŒ6Return LRU referenced / access count from folio flags.”…”�”}”(hj.Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.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&]”jFjAjGjFŸjHjFŸjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hŒƒ**Parameters** ``unsigned long flags`` folio flags **Description** Reads the LRU referenced count set by lru_set_refs_flags().”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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´KÕhjJŸubj¤)�”}”(hhh]”j©)�”}”(hŒ$``unsigned long flags`` folio flags ”h]”(j¯)�”}”(hŒ``unsigned long flags``”h]”jS)�”}”(hjoŸh]”hŒunsigned long flags”…”�”}”(hjqŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjmŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´KÒhjiŸubjÉ)�”}”(hhh]”jM)�”}”(hŒ folio flags”h]”hŒ folio flags”…”�”}”(hjˆŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j„Ÿh´KÒhj…Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjiŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j„Ÿh´KÒ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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´KÔhjJŸubjM)�”}”(hŒ;Reads the LRU referenced count set by lru_set_refs_flags().”h]”hŒ;Reads the LRU referenced count set by lru_set_refs_flags().”…”�”}”(hjÀŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´KÓhjJŸubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ#folio_migrate_lru_refs (C function)”Œc.folio_migrate_lru_refs”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒHvoid folio_migrate_lru_refs (struct folio *new, const struct folio *old)”h]”hù)�”}”(hŒGvoid folio_migrate_lru_refs(struct folio *new, const struct folio *old)”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjïŸh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjëŸh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.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_migrate_lru_refs”h]”j)�”}”(hŒfolio_migrate_lru_refs”h]”hŒfolio_migrate_lru_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„ubj8)�”}”(hŒ,(struct folio *new, const struct folio *old)”h]”(j>)�”}”(hŒstruct folio *new”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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( ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjJ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjG ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jL Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj sbŒc.folio_migrate_lru_refs”†”asbuh1hhj( ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj( ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjx h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj( 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=hj$ ubj>)�”}”(hŒconst struct folio *old”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¹ h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjš ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆ h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjš ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj× h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÔ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÙ Œmodname”NŒ classname”Njìjï)�”}”jò]”jf Œc.folio_migrate_lru_refs”†”asbuh1hhjš ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõ h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjš ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjš ubj)�”}”(hŒold”h]”hŒold”…”�”}”(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&]”jjuh1j7hjëŸ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Œ'copy the reference state to a new folio”h]”hŒ'copy the reference state to a new folio”…”�”}”(hj:¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”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²hhjKòh³Nh´Nubj„)�”}”(hX**Parameters** ``struct folio *new`` the destination folio ``const struct folio *old`` the source folio **Description** Transfer the reference state to **new** during migration: the MGLRU refs count, including PG_referenced, or just PG_referenced for the active/inactive LRU.”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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´MˆhjV¡ubj¤)�”}”(hhh]”(j©)�”}”(hŒ,``struct folio *new`` the destination 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&]”uh1jRhjy¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´M…hju¡ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe destination folio”h]”hŒthe destination folio”…”�”}”(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Œ-``const struct folio *old`` the source folio ”h]”(j¯)�”}”(hŒ``const struct folio *old``”h]”jS)�”}”(hj´¡h]”hŒconst struct folio *old”…”�”}”(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:117: ./include/linux/mm_inline.h”h´M†hj®¡ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe source folio”h]”hŒthe source 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†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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´MˆhjV¡ubjM)�”}”(hŒ›Transfer the reference state to **new** during migration: the MGLRU refs count, including PG_referenced, or just PG_referenced for the active/inactive LRU.”h]”(hŒ Transfer the reference state to ”…”�”}”(hj¢h²hh³Nh´NubjŽ)�”}”(hŒ**new**”h]”hŒnew”…”�”}”(hj ¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¢ubhŒt during migration: the MGLRU refs count, including PG_referenced, or just PG_referenced for the active/inactive LRU.”…”�”}”(hj¢h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´M‡hjV¡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!num_pages_contiguous (C function)”Œc.num_pages_contiguous”hNt”auh1hÜhjKò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”…”�”}”(hjI¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjF¢ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jK¢Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒnum_pages_contiguous”sbŒc.num_pages_contiguous”†”asbuh1hhjB¢h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´MŸubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjk¢h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjB¢h²hh³jj¢h´MŸubhÿ)�”}”(hŒnum_pages_contiguous”h]”j)�”}”(hjg¢h]”hŒnum_pages_contiguous”…”�”}”(hj}¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjy¢ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjB¢h²hh³jj¢h´MŸubj8)�”}”(hŒ&(struct page **pages, size_t nr_pages)”h]”(j>)�”}”(hŒstruct page **pages”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj˜¢h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj”¢ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥¢h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj”¢ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj¶¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj³¢ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j¸¢Œmodname”NŒ classname”Njìjï)�”}”jò]”je¢Œc.num_pages_contiguous”†”asbuh1hhj”¢ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ¢h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj”¢ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjâ¢h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj”¢ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjï¢h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj”¢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Œsize_t nr_pages”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”jèŒ reftarget”j£Œmodname”NŒ classname”Njìjï)�”}”jò]”je¢Œc.num_pages_contiguous”†”asbuh1hhj£ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6£h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj£ubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(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&]”jjuh1j7hjB¢h²hh³jj¢h´MŸubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj>¢h²hh³jj¢h´MŸubah}”(h]”j9¢ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jj¢h´MŸhj;¢h²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”…”�”}”(hjn£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´MŸhjk£h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj;¢h²hh³jj¢h´MŸubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj†£jHj†£jI‰jJ‰jK‰uh1híh²hhjKò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�£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:117: ./include/linux/mm_inline.h”h´M£hjŠ£ubj¤)�”}”(hhh]”(j©)�”}”(hŒ2``struct page **pages`` an 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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´M¡hj©£ubjÉ)�”}”(hhh]”jM)�”}”(hŒan array of page pointers”h]”hŒan 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¡hj¦£ubj©)�”}”(hŒ4``size_t nr_pages`` length of the array, at least 1 ”h]”(j¯)�”}”(hŒ``size_t nr_pages``”h]”jS)�”}”(hjè£h]”hŒsize_t nr_pages”…”�”}”(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:117: ./include/linux/mm_inline.h”h´M¢hjâ£ubjÉ)�”}”(hhh]”jM)�”}”(hŒlength of the array, at least 1”h]”hŒlength of the array, at least 1”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´M¤hjŠ£ubjM)�”}”(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 ”…”�”}”(hj9¤h²hh³Nh´NubjŽ)�”}”(hŒ **pages**”h]”hŒpages”…”�”}”(hjA¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj9¤ubhŒ, starting from the first page.”…”�”}”(hj9¤h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´M£hjŠ£ubjM)�”}”(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().”…”�”}”(hjZ¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´M¦hjŠ£ubjM)�”}”(hŒ'Returns the number of contiguous pages.”h]”hŒ'Returns the number of contiguous pages.”…”�”}”(hji¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:117: ./include/linux/mm_inline.h”h´M«hjŠ£ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpage_folio (C macro)”Œ c.page_folio”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ page_folio”h]”hù)�”}”(hŒ page_folio”h]”hÿ)�”}”(hŒ page_folio”h]”j)�”}”(hj’¤h]”hŒ page_folio”…”�”}”(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:118: ./include/linux/page-flags.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‰uh1híh²hhjKòh³Nh´NubjM)�”}”(hŒ``page_folio (p)``”h]”jS)�”}”(hjΤh]”hŒpage_folio (p)”…”�”}”(hjФh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj̤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´MhjKòh²hubji)�”}”(hŒConverts from page to folio. ”h]”jM)�”}”(hŒConverts from page to folio.”h]”hŒConverts from page to folio.”…”�”}”(hjè¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´Mhjä¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jö¤h´MhjKò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¥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:118: ./include/linux/page-flags.h”h´Mhjý¤ubj¤)�”}”(hhh]”j©)�”}”(hŒ``p`` The page. ”h]”(j¯)�”}”(hŒ``p``”h]”jS)�”}”(hj"¥h]”hŒp”…”�”}”(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:118: ./include/linux/page-flags.h”h´Mhj¥ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The page.”h]”hŒ The page.”…”�”}”(hj;¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j7¥h´Mhj8¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j7¥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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´Mhjý¤ubjM)�”}”(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.”…”�”}”(hjs¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´Mhjý¤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:118: ./include/linux/page-flags.h”h´M hjý¤ubjM)�”}”(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 ”…”�”}”(hjš¥h²hh³Nh´NubjŽ)�”}”(hŒ**page**”h]”hŒpage”…”�”}”(hj¢¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjš¥ubhŒ³. 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.”…”�”}”(hjš¥h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´M&hjý¤ubjM)�”}”(hŒ#The folio which contains this page.”h]”hŒ#The folio which contains this page.”…”�”}”(hjÓ¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´M%hjý¤ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_page (C macro)”Œ c.folio_page”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ folio_page”h]”hù)�”}”(hŒ folio_page”h]”hÿ)�”}”(hŒ folio_page”h]”j)�”}”(hjü¥h]”hŒ folio_page”…”�”}”(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:118: ./include/linux/page-flags.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&]”jFjAjGj2¦jHj2¦jI‰jJ‰jK‰uh1híh²hhjKòh³Nh´NubjM)�”}”(hŒ``folio_page (folio, n)``”h]”jS)�”}”(hj8¦h]”hŒfolio_page (folio, n)”…”�”}”(hj:¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj6¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´M.hjKò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.”…”�”}”(hjR¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´M,hjN¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j`¦h´M,hjKò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Ž)�”}”(hjm¦h]”hŒ Parameters”…”�”}”(hjo¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjk¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´M0hjg¦ubj¤)�”}”(hhh]”(j©)�”}”(hŒ``folio`` The folio. ”h]”(j¯)�”}”(hŒ ``folio``”h]”jS)�”}”(hjŒ¦h]”hŒfolio”…”�”}”(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:118: ./include/linux/page-flags.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ƒ¦ubj©)�”}”(hŒ!``n`` The page number to return. ”h]”(j¯)�”}”(hŒ``n``”h]”jS)�”}”(hjŦh]”hŒn”…”�”}”(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:118: ./include/linux/page-flags.h”h´M.hj¿¦ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page number to return.”h]”hŒThe page number 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ƒ¦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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´M0hjg¦ubjM)�”}”(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§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj§ubhŒg is relative to the start of the folio. This function does not check that the page number lies within ”…”�”}”(hj§h²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj,§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj§ubhŒ9; the caller is presumed to have a reference to the page.”…”�”}”(hj§h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´M/hjg¦ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hje§h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhja§h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´Mùubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs§h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhja§h²hh³jr§h´Mùubhÿ)�”}”(hŒfolio_xor_flags_has_waiters”h]”j)�”}”(hŒfolio_xor_flags_has_waiters”h]”hŒfolio_xor_flags_has_waiters”…”�”}”(hj…§h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�§ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhja§h²hh³jr§h´Mùubj8)�”}”(hŒ)(struct folio *folio, unsigned long mask)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¡§h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj�§ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®§h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�§ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj¿§h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¼§ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÁ§Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj‡§sbŒc.folio_xor_flags_has_waiters”†”asbuh1hhj�§ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß§h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�§ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjí§h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj�§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 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”…”�”}”(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&]”jjuh1j7hja§h²hh³jr§h´Mùubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj]§h²hh³jr§h´Mùubah}”(h]”jX§ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jr§h´MùhjZ§h²hubj4)�”}”(hhh]”jM)�”}”(hŒChange some folio flags.”h]”hŒChange some folio flags.”…”�”}”(hju¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´Mùhjr¨h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjZ§h²hh³jr§h´Mùubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj�¨jHj�¨jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(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:118: ./include/linux/page-flags.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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.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­¨ubj©)�”}”(hŒ>``unsigned long mask`` Bits set in this word will be changed. ”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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´Mûhjé¨ubjÉ)�”}”(hhh]”jM)�”}”(hŒ&Bits set in this word will be changed.”h]”hŒ&Bits set in this word will be changed.”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´Mýhj‘¨ubjM)�”}”(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@©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´Mhj‘¨ubjM)�”}”(hŒ-Whether there are tasks waiting on the folio.”h]”hŒ-Whether there are tasks waiting on the folio.”…”�”}”(hjg©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´Mhj‘¨ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ folio_test_uptodate (C function)”Œc.folio_test_uptodate”hNt”auh1hÜhjKò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”…”�”}”(hj–©h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj’©h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.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_test_uptodate”h]”j)�”}”(hŒfolio_test_uptodate”h]”hŒfolio_test_uptodate”…”�”}”(hj¶©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj²©ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj’©h²hh³j£©h´M ubj8)�”}”(hŒ(const struct folio *folio)”h]”j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjí©h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjΩubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjú©h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjΩubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj ªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjªubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j ªŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj¸©sbŒc.folio_test_uptodate”†”asbuh1hhjΩubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+ªh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjΩubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj9ªh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjΩ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&]”jjuh1j7hj’©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 folio up to date?”h]”hŒIs this folio up to date?”…”�”}”(hjpªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´M hjmª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²hhjKò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’ª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:118: ./include/linux/page-flags.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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.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Œ**Description**”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:118: ./include/linux/page-flags.h”h´MhjŒªubjM)�”}”(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«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´MhjŒªubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_test_large (C function)”Œc.folio_test_large”hNt”auh1hÜhjKò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”…”�”}”(hj1«h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj-«h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.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_test_large”h]”j)�”}”(hŒfolio_test_large”h]”hŒfolio_test_large”…”�”}”(hjQ«h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjM«ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj-«h²hh³j>«h´M^ubj8)�”}”(hŒ(const struct folio *folio)”h]”j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjm«h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hji«ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjz«h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhji«ubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjˆ«h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hji«ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•«h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhji«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”jèŒ reftarget”j¨«Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjS«sbŒc.folio_test_large”†”asbuh1hhji«ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆ«h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhji«ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÔ«h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhji«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&]”jjuh1j7hj-«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Œ+Does this folio contain more than one page?”h]”hŒ+Does this folio contain more than one page?”…”�”}”(hj ¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.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²hhjKò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-¬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:118: ./include/linux/page-flags.h”h´Mbhj'¬ubj¤)�”}”(hhh]”j©)�”}”(hŒ1``const struct folio *folio`` The folio to test. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjL¬h]”hŒconst struct folio *folio”…”�”}”(hjN¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjJ¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´M_hjF¬ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to test.”h]”hŒThe folio to test.”…”�”}”(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¬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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´Mahj'¬ubjM)�”}”(hŒ*True if the folio is larger than one page.”h]”hŒ*True if the folio is larger than one page.”…”�”}”(hj�¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´Mahj'¬ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒPageHuge (C function)”Œ c.PageHuge”hNt”auh1hÜhjKò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”…”�”}”(hj̬h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjȬh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.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ŒPageHuge”h]”j)�”}”(hŒPageHuge”h]”hŒPageHuge”…”�”}”(hjì¬h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjè¬ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjȬh²hh³jÙ¬h´Mubj8)�”}”(hŒ(const struct page *page)”h]”j>)�”}”(hŒconst struct page *page”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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­ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjA­h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>­ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jC­Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjî¬sbŒ c.PageHuge”†”asbuh1hhj­ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hja­h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj­ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjo­h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj­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&]”jjuh1j7hjȬ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Œ*Determine if the page belongs to hugetlbfs”h]”hŒ*Determine if the page belongs to hugetlbfs”…”�”}”(hj¦­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.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²hhjKò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Ž)�”}”(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:118: ./include/linux/page-flags.h”h´Mhj­ubj¤)�”}”(hhh]”j©)�”}”(hŒ.``const struct page *page`` The page to test. ”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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´Mhjá­ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page to test.”h]”hŒThe page to test.”…”�”}”(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Œ **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:118: ./include/linux/page-flags.h”h´Mhj­ubjM)�”}”(hŒ Any context.”h]”hŒ Any context.”…”�”}”(hj8®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´Mhj­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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´Mhj­ubjM)�”}”(hŒWTrue for hugetlbfs pages, false for anon pages or pages belonging to other filesystems.”h]”hŒWTrue for hugetlbfs pages, false for anon pages or pages belonging to other filesystems.”…”�”}”(hj_®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´Mhj­ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!page_has_movable_ops (C function)”Œc.page_has_movable_ops”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ3bool page_has_movable_ops (const struct page *page)”h]”hù)�”}”(hŒ2bool page_has_movable_ops(const struct page *page)”h]”(já)�”}”(hj½h]”hŒbool”…”�”}”(hjŽ®h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjŠ®h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.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Œpage_has_movable_ops”h]”j)�”}”(hŒpage_has_movable_ops”h]”hŒpage_has_movable_ops”…”�”}”(hj®®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjª®ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjŠ®h²hh³j›®h´M_ubj8)�”}”(hŒ(const struct page *page)”h]”j>)�”}”(hŒconst struct page *page”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjå®h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÆ®ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjò®h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÆ®ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¯ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j¯Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj°®sbŒc.page_has_movable_ops”†”asbuh1hhjÆ®ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#¯h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÆ®ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj1¯h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÆ®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&]”jjuh1j7hjŠ®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 for a movable_ops page”h]”hŒtest for a movable_ops page”…”�”}”(hjh¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´M_hje¯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²hhjKòh³Nh´Nubj„)�”}”(hŒã**Parameters** ``const struct page *page`` The page to test. **Description** Test whether this is a movable_ops page. Such pages will stay that way until freed. Returns true if this is a movable_ops page, 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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´Mchj„¯ubj¤)�”}”(hhh]”j©)�”}”(hŒ.``const struct page *page`` The page to test. ”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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´M`hj£¯ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page to test.”h]”hŒThe page 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 ¯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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´Mbhj„¯ubjM)�”}”(hŒSTest whether this is a movable_ops page. Such pages will stay that way until freed.”h]”hŒSTest whether this is a movable_ops page. Such pages will stay that way until freed.”…”�”}”(hjú¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´Mahj„¯ubjM)�”}”(hŒ)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjt°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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj�°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°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”jèŒ reftarget”j¯°Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjZ°sbŒc.folio_has_attached_private”†”asbuh1hhjp°ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjͰh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjp°ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÛ°h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjp°ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjè°h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjp°ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjl°ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj4°h²hh³jE°h´M³ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj0°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Œ,check if the folio has private data attached”h]”hŒ,check if the folio has private data attached”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.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²hhjKòh³Nh´Nubj„)�”}”(hŒÿ**Parameters** ``const struct folio *folio`` The folio to check. **Description** Use this in code that may encounter swapcache or hugetlb folios but only wants to detect attached private data. **Return** true if the folio has private data attached.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj4±h]”hŒ Parameters”…”�”}”(hj6±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj2±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´M·hj.±ubj¤)�”}”(hhh]”j©)�”}”(hŒ2``const struct folio *folio`` The folio to check. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjS±h]”hŒconst struct folio *folio”…”�”}”(hjU±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjQ±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´M´hjM±ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to check.”h]”hŒThe folio to check.”…”�”}”(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´hjJ±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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´M¶hj.±ubjM)�”}”(hŒoUse this in code that may encounter swapcache or hugetlb folios but only wants to detect attached private data.”h]”hŒoUse this in code that may encounter swapcache or hugetlb folios but only wants to detect attached private data.”…”�”}”(hj¤±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´M¸hj.±ubjM)�”}”(hŒ,true if the folio has private data attached.”h]”hŒ,true if the folio has private data attached.”…”�”}”(hj˱h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´M¹hj.±ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_has_private (C function)”Œc.folio_has_private”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ1int folio_has_private (const struct folio *folio)”h]”hù)�”}”(hŒ0int folio_has_private(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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.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_has_private”h]”j)�”}”(hŒfolio_has_private”h]”hŒfolio_has_private”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj²ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjö±h²hh³j²h´MÌubj8)�”}”(hŒ(const struct folio *folio)”h]”j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hj7²h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj3²ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD²h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj3²ubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjR²h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj3²ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_²h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj3²ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjp²h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjm²ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jr²Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj²sbŒc.folio_has_private”†”asbuh1hhj3²ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�²h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj3²ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjž²h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj3²ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj«²h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3²ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj/²ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjö±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Œ$Determine if folio has private stuff”h]”hŒ$Determine if folio has private stuff”…”�”}”(hjÕ²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.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²hhjKòh³Nh´Nubj„)�”}”(hŒ½**Parameters** ``const struct folio *folio`` The folio to be checked **Description** Determine if a folio has private stuff, indicating that release routines should be invoked upon it.”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:118: ./include/linux/page-flags.h”h´MÐhjñ²ubj¤)�”}”(hhh]”j©)�”}”(hŒ6``const struct folio *folio`` The folio to be checked ”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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´MÍhj³ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to be checked”h]”hŒThe folio to be 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 ³ubah}”(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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´MÏhjñ²ubjM)�”}”(hŒcDetermine if a folio has private stuff, indicating that release routines should be invoked upon it.”h]”hŒcDetermine if a folio has private stuff, indicating that release routines should be invoked upon it.”…”�”}”(hjg³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:118: ./include/linux/page-flags.h”h´MÎhjñ²ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_page_idx (C function)”Œc.folio_page_idx”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒQunsigned long folio_page_idx (const struct folio *folio, const struct page *page)”h]”hù)�”}”(hŒPunsigned long folio_page_idx(const struct folio *folio, const 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:119: ./include/linux/mm.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áubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj³³h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj’³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áubhÿ)�”}”(hŒfolio_page_idx”h]”j)�”}”(hŒfolio_page_idx”h]”hŒfolio_page_idx”…”�”}”(hjÓ³h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjϳubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj’³h²hh³j¤³h´Káubj8)�”}”(hŒ4(const struct folio *folio, const struct page *page)”h]”(j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj ´h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjë³ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjë³ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj(´h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj%´ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j*´Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÕ³sbŒc.folio_page_idx”†”asbuh1hhjë³ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjH´h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjë³ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjV´h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjë³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ç³ubj>)�”}”(hŒconst struct page *page”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hj|´h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjx´ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰´h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjx´ubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj—´h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjx´ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤´h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjx´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”jèŒ reftarget”j·´Œmodname”NŒ classname”Njìjï)�”}”jò]”jD´Œc.folio_page_idx”†”asbuh1hhjx´ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓ´h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjx´ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjá´h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjx´ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(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&]”jjuh1j7hj’³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Œ'Return the number of a page in a folio.”h]”hŒ'Return the number of a page 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:119: ./include/linux/mm.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&]”jFjAjGj0µjHj0µjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hŒù**Parameters** ``const struct folio *folio`` The folio. ``const struct page *page`` The folio page. **Description** This function expects that the page is actually part of the folio. The returned number is relative to the start of the folio.”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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Kåhj4µubj¤)�”}”(hhh]”(j©)�”}”(hŒ)``const struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjYµh]”hŒconst struct folio *folio”…”�”}”(hj[µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjWµubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´KâhjSµubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hjrµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jnµh´Kâhjoµubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjSµubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jnµh´KâhjPµubj©)�”}”(hŒ,``const struct page *page`` The folio page. ”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:119: ./include/linux/mm.h”h´KãhjŒµubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio page.”h]”hŒThe folio 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ãhjPµubeh}”(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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Kåhj4µubjM)�”}”(hŒ}This function expects that the page is actually part of the folio. The returned number is relative to the start of the folio.”h]”hŒ}This function expects that the page is actually part of the folio. The returned number is relative to the start 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:119: ./include/linux/mm.h”h´Kähj4µubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvma_flag_t (C type)”Œ c.vma_flag_t”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ vma_flag_t”h]”hù)�”}”(hŒtype vma_flag_t”h]”(jœ)�”}”(hj„h]”hŒtype”…”�”}”(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:119: ./include/linux/mm.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Œ vma_flag_t”h]”j)�”}”(hj ¶h]”hŒ vma_flag_t”…”�”}”(hj2¶h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj.¶ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþ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Œ/specifies an individual VMA flag by bit number.”h]”hŒ/specifies an individual VMA flag by bit number.”…”�”}”(hjT¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MhjQ¶h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¶h²hh³j¶h´Kêubeh}”(h]”h ]”(jAŒtype”eh"]”h$]”h&]”jFjAjGjl¶jHjl¶jI‰jJ‰jK‰uh1híh²hhjKòh³Nh´NubjM)�”}”(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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MhjKòh²hubjM)�”}”(hŒSThis value is made type safe by sparse to avoid passing invalid flag values around.”h]”hŒSThis value is made type safe by sparse to avoid passing invalid flag values around.”…”�”}”(hjˆ¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MhjKòh²hubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ)fault_flag_allow_retry_first (C function)”Œc.fault_flag_allow_retry_first”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ9bool fault_flag_allow_retry_first (enum fault_flag flags)”h]”hù)�”}”(hŒ8bool fault_flag_allow_retry_first(enum fault_flag 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:119: ./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Œfault_flag_allow_retry_first”h]”j)�”}”(hŒfault_flag_allow_retry_first”h]”hŒfault_flag_allow_retry_first”…”�”}”(hjжh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj̶ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¬¶h²hh³j½¶h´M´ubj8)�”}”(hŒ(enum fault_flag flags)”h]”j>)�”}”(hŒenum fault_flag flags”h]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(hjì¶h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjè¶ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjù¶h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjè¶ubh)�”}”(hhh]”j)�”}”(hŒ fault_flag”h]”hŒ fault_flag”…”�”}”(hj ·h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj·ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j ·Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÒ¶sbŒc.fault_flag_allow_retry_first”†”asbuh1hhjè¶ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*·h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjè¶ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj8·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&]”jjuh1j7hj¬¶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 ALLOW_RETRY the first time”h]”hŒ check ALLOW_RETRY the first time”…”�”}”(hjb·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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&]”jFjAjGjz·jHjz·jI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hXü**Parameters** ``enum fault_flag flags`` Fault flags. **Description** 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. **Return** true if the page fault allows retry and this is the first attempt of the fault handling; 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:119: ./include/linux/mm.h”h´M¸hj~·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&]”uh1jRhj¡·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mµhj�·ubjÉ)�”}”(hhh]”jM)�”}”(hŒ Fault flags.”h]”hŒ Fault 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š·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:119: ./include/linux/mm.h”h´M·hj~·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:119: ./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:119: ./include/linux/mm.h”h´M¼hj~·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:119: ./include/linux/mm.h”h´M½hj~·ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!vma_flags_is_hugetlb (C function)”Œc.vma_flags_is_hugetlb”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ4bool vma_flags_is_hugetlb (const vma_flags_t *flags)”h]”hù)�”}”(hŒ3bool vma_flags_is_hugetlb(const vma_flags_t *flags)”h]”(já)�”}”(hj½h]”hŒbool”…”�”}”(hjJ¸h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjF¸h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MFubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjX¸h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjF¸h²hh³jW¸h´MFubhÿ)�”}”(hŒvma_flags_is_hugetlb”h]”j)�”}”(hŒvma_flags_is_hugetlb”h]”hŒvma_flags_is_hugetlb”…”�”}”(hjj¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjf¸ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjF¸h²hh³jW¸h´MFubj8)�”}”(hŒ(const vma_flags_t *flags)”h]”j>)�”}”(hŒconst vma_flags_t *flags”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hj†¸h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj‚¸ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“¸h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‚¸ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j¦¸Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjl¸sbŒc.vma_flags_is_hugetlb”†”asbuh1hhj‚¸ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjĸh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‚¸ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÒ¸h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj‚¸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~¸ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjF¸h²hh³jW¸h´MFubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjB¸h²hh³jW¸h´MFubah}”(h]”j=¸ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jW¸h´MFhj?¸h²hubj4)�”}”(hhh]”jM)�”}”(hŒFDo the specified VMA flags indicate that the VMA is a hugetlb mapping?”h]”hŒFDo the specified VMA flags indicate that the VMA is a hugetlb mapping?”…”�”}”(hj ¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MFhj¹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj?¸h²hh³jW¸h´MFubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj!¹jHj!¹jI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hŒ‘**Parameters** ``const vma_flags_t *flags`` The VMA flags to test. **Return** true if the flags indicate a hugetlb mapping, 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:119: ./include/linux/mm.h”h´MJhj%¹ubj¤)�”}”(hhh]”j©)�”}”(hŒ4``const vma_flags_t *flags`` The VMA flags to test. ”h]”(j¯)�”}”(hŒ``const vma_flags_t *flags``”h]”jS)�”}”(hjJ¹h]”hŒconst vma_flags_t *flags”…”�”}”(hjL¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjH¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MHhjD¹ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe VMA flags to test.”h]”hŒThe VMA flags to test.”…”�”}”(hjc¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j_¹h´MHhj`¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjD¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j_¹h´MHhjA¹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:119: ./include/linux/mm.h”h´MJhj%¹ubjM)�”}”(hŒ>true if the flags indicate a hugetlb mapping, false otherwise.”h]”hŒ>true if the flags indicate a hugetlb mapping, false otherwise.”…”�”}”(hj›¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MJhj%¹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvma_is_hugetlb (C function)”Œc.vma_is_hugetlb”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ6bool vma_is_hugetlb (const struct vm_area_struct *vma)”h]”hù)�”}”(hŒ5bool vma_is_hugetlb(const struct vm_area_struct *vma)”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:119: ./include/linux/mm.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Œvma_is_hugetlb”h]”j)�”}”(hŒvma_is_hugetlb”h]”hŒvma_is_hugetlb”…”�”}”(hjê¹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjæ¹ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjƹh²hh³j×¹h´MSubj8)�”}”(hŒ"(const struct vm_area_struct *vma)”h]”j>)�”}”(hŒ const struct vm_area_struct *vma”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj!ºh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjºubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.ºh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjºubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jAºŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjì¹sbŒc.vma_is_hugetlb”†”asbuh1hhjºubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_ºh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjºubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjmºh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjºubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjzº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&]”jjuh1j7hjƹ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ŒIs **vma** a hugetlb mapping?”h]”(hŒIs ”…”�”}”(hj¤ºh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hj¬ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¤ºubhŒ a hugetlb mapping?”…”�”}”(hj¤ºh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.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²hhjKòh³Nh´Nubj„)�”}”(hŒ‹**Parameters** ``const struct vm_area_struct *vma`` The VMA to test. **Return** true if **vma** is a hugetlb mapping, 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:119: ./include/linux/mm.h”h´MWhjÒºubj¤)�”}”(hhh]”j©)�”}”(hŒ6``const struct vm_area_struct *vma`` The VMA to test. ”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:119: ./include/linux/mm.h”h´MThjñºubjÉ)�”}”(hhh]”jM)�”}”(hŒThe VMA to test.”h]”hŒThe VMA to test.”…”�”}”(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îºubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÒºubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj2»h]”hŒReturn”…”�”}”(hj4»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj0»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MVhjÒºubjM)�”}”(hŒ6true if **vma** is a hugetlb mapping, false otherwise.”h]”(hŒtrue if ”…”�”}”(hjH»h²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjP»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjH»ubhŒ' is a hugetlb mapping, false otherwise.”…”�”}”(hjH»h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MVhjÒºubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$vma_flags_is_mm_managed (C function)”Œc.vma_flags_is_mm_managed”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ7bool vma_flags_is_mm_managed (const vma_flags_t *flags)”h]”hù)�”}”(hŒ6bool vma_flags_is_mm_managed(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:119: ./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_mm_managed”h]”j)�”}”(hŒvma_flags_is_mm_managed”h]”hŒvma_flags_is_mm_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^ubj8)�”}”(hŒ(const vma_flags_t *flags)”h]”j>)�”}”(hŒconst vma_flags_t *flags”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjÅ»h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÁ»ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒ»h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÁ»ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j廌modname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj«»sbŒc.vma_flags_is_mm_managed”†”asbuh1hhjÁ»ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÁ»ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÁ»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½»ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj…»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ŒXDo the specified VMA flags indicate that the contents of the VMA are managed by core mm?”h]”hŒXDo the specified VMA flags indicate that the contents of the VMA are managed by core mm?”…”�”}”(hjH¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M^hjE¼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²hhjKòh³Nh´Nubj„)�”}”(hX**Parameters** ``const vma_flags_t *flags`` The VMA flags to test. **Description** Such a mapping is one established by a simple mmap() or brk() with no driver or other kernel component involved. They are rmappable, and core mm services rmap operations including reclaim, as well as population, CoW and merge/split (if eligible). Mappings which fail this test are those where this is not the case - e.g. MMIO, user-mapped kernel pages, udmabuf (pfnmap shmem), etc. **Return** true if the flags indicate an mm-managed mapping.”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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mbhjd¼ubj¤)�”}”(hhh]”j©)�”}”(hŒ4``const vma_flags_t *flags`` The VMA flags to test. ”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:119: ./include/linux/mm.h”h´M`hjƒ¼ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe VMA flags to test.”h]”hŒThe VMA flags 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€¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjd¼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:119: ./include/linux/mm.h”h´Mbhjd¼ubjM)�”}”(hŒpSuch a mapping is one established by a simple mmap() or brk() with no driver or other kernel component involved.”h]”hŒpSuch a mapping is one established by a simple mmap() or brk() with no driver or other kernel component involved.”…”�”}”(hjÚ¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mahjd¼ubjM)�”}”(hŒ…They are rmappable, and core mm services rmap operations including reclaim, as well as population, CoW and merge/split (if eligible).”h]”hŒ…They are rmappable, and core mm services rmap operations including reclaim, as well as population, CoW and merge/split (if eligible).”…”�”}”(hjé¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mdhjd¼ubjM)�”}”(hŒ†Mappings which fail this test are those where this is not the case - e.g. MMIO, user-mapped kernel pages, udmabuf (pfnmap shmem), etc.”h]”hŒ†Mappings which fail this test are those where this is not the case - e.g. MMIO, user-mapped kernel pages, udmabuf (pfnmap shmem), etc.”…”�”}”(hjø¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mghjd¼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:119: ./include/linux/mm.h”h´Mjhjd¼ubjM)�”}”(hŒ1true if the flags indicate an mm-managed mapping.”h]”hŒ1true if the flags indicate an mm-managed mapping.”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mkhjd¼ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvma_is_mm_managed (C function)”Œc.vma_is_mm_managed”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ9bool vma_is_mm_managed (const struct vm_area_struct *vma)”h]”hù)�”}”(hŒ8bool vma_is_mm_managed(const struct vm_area_struct *vma)”h]”(já)�”}”(hj½h]”hŒbool”…”�”}”(hjN½h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjJ½h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Msubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\½h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjJ½h²hh³j[½h´Msubhÿ)�”}”(hŒvma_is_mm_managed”h]”j)�”}”(hŒvma_is_mm_managed”h]”hŒvma_is_mm_managed”…”�”}”(hjn½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjj½ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjJ½h²hh³j[½h´Msubj8)�”}”(hŒ"(const struct vm_area_struct *vma)”h]”j>)�”}”(hŒ const struct vm_area_struct *vma”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¥½h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj†½ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²½h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj†½ubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jŽŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjp½sbŒc.vma_is_mm_managed”†”asbuh1hhj†½ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjã½h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj†½ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjñ½h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj†½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&]”jjuh1j7hjJ½h²hh³j[½h´Msubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjF½h²hh³j[½h´Msubah}”(h]”jA½ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j[½h´MshjC½h²hubj4)�”}”(hhh]”jM)�”}”(hŒ/Are the contents of **vma** managed by core mm?”h]”(hŒAre the contents of ”…”�”}”(hj(¾h²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hj0¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj(¾ubhŒ managed by core mm?”…”�”}”(hj(¾h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mshj%¾h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjC½h²hh³j[½h´Msubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjR¾jHjR¾jI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hŒÇ**Parameters** ``const struct vm_area_struct *vma`` The VMA to test. **Description** See vma_flags_is_mm_managed() for a description of this property. **Return** true if the VMA is mm-managed.”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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MwhjV¾ubj¤)�”}”(hhh]”j©)�”}”(hŒ6``const struct vm_area_struct *vma`` The VMA to test. ”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&]”uh1jRhjy¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mthju¾ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe VMA to test.”h]”hŒThe VMA to test.”…”�”}”(hj”¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�¾h´Mthj‘¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhju¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�¾h´Mthjr¾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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MvhjV¾ubjM)�”}”(hŒASee vma_flags_is_mm_managed() for a description of this property.”h]”hŒASee vma_flags_is_mm_managed() for a description of this property.”…”�”}”(hj̾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MuhjV¾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:119: ./include/linux/mm.h”h´MwhjV¾ubjM)�”}”(hŒtrue if the VMA is mm-managed.”h]”hŒtrue if the VMA is mm-managed.”…”�”}”(hjó¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MxhjV¾ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ'vma_flags_is_fixed_mapping (C function)”Œc.vma_flags_is_fixed_mapping”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ:bool vma_flags_is_fixed_mapping (const vma_flags_t *flags)”h]”hù)�”}”(hŒ9bool vma_flags_is_fixed_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:119: ./include/linux/mm.h”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Œvma_flags_is_fixed_mapping”h]”j)�”}”(hŒvma_flags_is_fixed_mapping”h]”hŒvma_flags_is_fixed_mapping”…”�”}”(hjB¿h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>¿ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¿h²hh³j/¿h´M€ubj8)�”}”(hŒ(const vma_flags_t *flags)”h]”j>)�”}”(hŒconst vma_flags_t *flags”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hj^¿h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjZ¿ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjk¿h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjZ¿ubh)�”}”(hhh]”j)�”}”(hŒ vma_flags_t”h]”hŒ vma_flags_t”…”�”}”(hj|¿h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjy¿ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j~¿Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjD¿sbŒc.vma_flags_is_fixed_mapping”†”asbuh1hhjZ¿ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœ¿h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjZ¿ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjª¿h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjZ¿ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(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&]”jjuh1j7hj¿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ŒcDo the specified VMA flags indicate that this is a fixed mapping that cannot be expanded or merged?”h]”hŒcDo the specified VMA flags indicate that this is a fixed mapping that cannot be expanded or merged?”…”�”}”(hjá¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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²hhjKòh³Nh´Nubj„)�”}”(hXE**Parameters** ``const vma_flags_t *flags`` The VMA flags to test. **Description** Fixed mappings are those whose size is set at the point of mmap (for instance, a mapping of a fixed range of memory established by a driver), and thus cannot be expanded or merged. **Return** true if the flags indicate a fixed 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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M„hjý¿ubj¤)�”}”(hhh]”j©)�”}”(hŒ4``const vma_flags_t *flags`` The VMA flags to test. ”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:119: ./include/linux/mm.h”h´M‚hjÀubjÉ)�”}”(hhh]”jM)�”}”(hŒThe VMA flags to test.”h]”hŒThe VMA flags to test.”…”�”}”(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À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:119: ./include/linux/mm.h”h´M„hjý¿ubjM)�”}”(hŒ´Fixed mappings are those whose size is set at the point of mmap (for instance, a mapping of a fixed range of memory established by a driver), and thus cannot be expanded or merged.”h]”hŒ´Fixed mappings are those whose size is set at the point of mmap (for instance, a mapping of a fixed range of memory established by a driver), and thus cannot be expanded or merged.”…”�”}”(hjsÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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:119: ./include/linux/mm.h”h´M‡hjý¿ubjM)�”}”(hŒ+true if the flags indicate a fixed mapping.”h]”hŒ+true if the flags indicate a fixed mapping.”…”�”}”(hjšÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mˆhjý¿ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!vma_is_fixed_mapping (C function)”Œc.vma_is_fixed_mapping”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ)�”}”(hŒ const struct vm_area_struct *vma”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj Áh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÁubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-Áh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÁubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”j@ÁŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjëÀsbŒc.vma_is_fixed_mapping”†”asbuh1hhjÁubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^Áh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÁubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjlÁh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÁubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjyÁ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&]”jjuh1j7hjÅÀ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 fixed mapping that cannot be expanded or merged?”h]”hŒ>Is this VMA a fixed mapping that cannot be expanded or merged?”…”�”}”(hj£Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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²hhjKòh³Nh´Nubj„)�”}”(hŒÑ**Parameters** ``const struct vm_area_struct *vma`` The VMA to test. **Description** See vma_flags_is_fixed_mapping() for a description of this property. **Return** true if the VMA maps a fixed 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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M˜hj¿Áubj¤)�”}”(hhh]”j©)�”}”(hŒ6``const struct vm_area_struct *vma`` The VMA to test. ”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:119: ./include/linux/mm.h”h´M–hjÞÁubjÉ)�”}”(hhh]”jM)�”}”(hŒThe VMA to test.”h]”hŒThe VMA 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ÛÁ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:119: ./include/linux/mm.h”h´M˜hj¿ÁubjM)�”}”(hŒDSee vma_flags_is_fixed_mapping() for a description of this property.”h]”hŒDSee vma_flags_is_fixed_mapping() for a description of this property.”…”�”}”(hj5Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M™hj¿ÁubjM)�”}”(hŒ%true if the VMA maps a fixed mapping.”h]”hŒ%true if the VMA maps a fixed mapping.”…”�”}”(hj\Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mšhj¿Áubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ#vma_flags_is_mm_backed (C function)”Œc.vma_flags_is_mm_backed”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ6bool vma_flags_is_mm_backed (const vma_flags_t *flags)”h]”hù)�”}”(hŒ5bool vma_flags_is_mm_backed(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:119: ./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_mm_backed”h]”j)�”}”(hŒvma_flags_is_mm_backed”h]”hŒvma_flags_is_mm_backed”…”�”}”(hj«Âh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj§Âubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj‡Âh²hh³j˜Âh´M¢ubj8)�”}”(hŒ(const vma_flags_t *flags)”h]”j>)�”}”(hŒconst vma_flags_t *flags”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjÇÂh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÃÂubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔÂh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÃÂubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jçÂŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj­ÂsbŒc.vma_flags_is_mm_backed”†”asbuh1hhjÃÂubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÃÂubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÃÂ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¿Âubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj‡Â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ŒBDo the specified VMA flags imply the mapping is backed by core mm?”h]”hŒBDo the specified VMA flags imply the mapping is backed by core mm?”…”�”}”(hjJÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”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²hhjKòh³Nh´Nubj„)�”}”(hX**Parameters** ``const vma_flags_t *flags`` The VMA flags to test. **Description** An mm-backed mapping is one managed by core mm (see vma_flags_is_mm_managed()) whose contents are established by core mm's own fault path rather than a custom ->fault handler. Mappings not managed by core mm are populated by their owner, and fixed mappings may be mm-managed but have their contents established by a custom ->fault handler, so neither are mm-backed. hugetlb mappings are fixed, but core mm owns them entirely, so they are. These are the only mappings which can sensibly be merged, locked, dumped or be subject to uffd faulting, as all of these assume core mm and core mm alone manages their contents. **Return** true if the flags imply an mm-backed mapping, otherwise false.”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:119: ./include/linux/mm.h”h´M¦hjfÃubj¤)�”}”(hhh]”j©)�”}”(hŒ4``const vma_flags_t *flags`` The VMA flags to test. ”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:119: ./include/linux/mm.h”h´M¤hj…ÃubjÉ)�”}”(hhh]”jM)�”}”(hŒThe VMA flags to test.”h]”hŒThe VMA flags 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‚Ãubah}”(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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M¦hjfÃubjM)�”}”(hŒ¯An mm-backed mapping is one managed by core mm (see vma_flags_is_mm_managed()) whose contents are established by core mm's own fault path rather than a custom ->fault handler.”h]”hŒ±An mm-backed mapping is one managed by core mm (see vma_flags_is_mm_managed()) whose contents are established by core mm’s own fault path rather than a custom ->fault handler.”…”�”}”(hjÜÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M¥hjfÃubjM)�”}”(hXMappings not managed by core mm are populated by their owner, and fixed mappings may be mm-managed but have their contents established by a custom ->fault handler, so neither are mm-backed. hugetlb mappings are fixed, but core mm owns them entirely, so they are.”h]”hXMappings not managed by core mm are populated by their owner, and fixed mappings may be mm-managed but have their contents established by a custom ->fault handler, so neither are mm-backed. hugetlb mappings are fixed, but core mm owns them entirely, so they are.”…”�”}”(hjëÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M©hjfÃubjM)�”}”(hŒ±These are the only mappings which can sensibly be merged, locked, dumped or be subject to uffd faulting, as all of these assume core mm and core mm alone manages their contents.”h]”hŒ±These are the only mappings which can sensibly be merged, locked, dumped or be subject to uffd faulting, as all of these assume core mm and core mm alone manages their contents.”…”�”}”(hjúÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M²•>hjfÃubjM)�”}”(hŒ>true if the flags imply an mm-backed mapping, otherwise false.”h]”hŒ>true if the flags imply an mm-backed 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:119: ./include/linux/mm.h”h´M³hjfÃubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvma_is_mm_backed (C function)”Œc.vma_is_mm_backed”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ8bool vma_is_mm_backed (const struct vm_area_struct *vma)”h]”hù)�”}”(hŒ7bool vma_is_mm_backed(const struct vm_area_struct *vma)”h]”(já)�”}”(hj½h]”hŒbool”…”�”}”(hjPÄh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjLÄh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”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ÿ)�”}”(hŒvma_is_mm_backed”h]”j)�”}”(hŒvma_is_mm_backed”h]”hŒvma_is_mm_backed”…”�”}”(hjpÄh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjlÄubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjLÄh²hh³j]Äh´MÅubj8)�”}”(hŒ"(const struct vm_area_struct *vma)”h]”j>)�”}”(hŒ const struct vm_area_struct *vma”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj§Äh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjˆÄubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´Äh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjˆÄubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jÇÄŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjrÄsbŒc.vma_is_mm_backed”†”asbuh1hhjˆÄubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåÄh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjˆÄubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjóÄh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjˆÄ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&]”jjuh1j7hjLÄh²hh³j]Äh´MÅubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjHÄh²hh³j]Äh´MÅubah}”(h]”jCÄah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j]Äh´MÅhjEÄh²hubj4)�”}”(hhh]”jM)�”}”(hŒIs **vma** backed by core mm?”h]”(hŒIs ”…”�”}”(hj*Åh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hj2Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj*ÅubhŒ backed by core mm?”…”�”}”(hj*Åh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MÅhj'Åh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjEÄh²hh³j]Äh´MÅubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjTÅjHjTÅjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hŒ¿**Parameters** ``const struct vm_area_struct *vma`` The VMA to test. **Description** See vma_flags_is_mm_backed() for details. **Return** true if the VMA is mm-backed, 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:119: ./include/linux/mm.h”h´MÉhjXÅubj¤)�”}”(hhh]”j©)�”}”(hŒ6``const struct vm_area_struct *vma`` The VMA to test. ”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:119: ./include/linux/mm.h”h´MÆhjwÅubjÉ)�”}”(hhh]”jM)�”}”(hŒThe VMA to test.”h]”hŒThe VMA to test.”…”�”}”(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Å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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MÈhjXÅubjM)�”}”(hŒ)See vma_flags_is_mm_backed() for details.”h]”hŒ)See vma_flags_is_mm_backed() for details.”…”�”}”(hjÎÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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:119: ./include/linux/mm.h”h´MÉhjXÅubjM)�”}”(hŒ.true if the VMA is mm-backed, otherwise false.”h]”hŒ.true if the VMA is mm-backed, otherwise false.”…”�”}”(hjõÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MÊhjXÅubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ vma_flags_can_merge (C function)”Œc.vma_flags_can_merge”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ3bool vma_flags_can_merge (const vma_flags_t *flags)”h]”hù)�”}”(hŒ2bool vma_flags_can_merge(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:119: ./include/linux/mm.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Œvma_flags_can_merge”h]”j)�”}”(hŒvma_flags_can_merge”h]”hŒvma_flags_can_merge”…”�”}”(hjDÆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj@Æubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj Æh²hh³j1Æh´MÒubj8)�”}”(hŒ(const vma_flags_t *flags)”h]”j>)�”}”(hŒconst vma_flags_t *flags”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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\Æ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”jèŒ reftarget”j€ÆŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjFÆsbŒc.vma_flags_can_merge”†”asbuh1hhj\Æubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžÆh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj\Æubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¬Æh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj\Æ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=hjXÆubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj Æ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ŒDDo the specified VMA flags permit the VMA to be merged with another?”h]”hŒDDo the specified VMA flags permit the VMA to be merged with another?”…”�”}”(hjãÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.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²hhjKòh³Nh´Nubj„)�”}”(hŒ…**Parameters** ``const vma_flags_t *flags`` The VMA flags to test. **Return** true if the flags permit merging, 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:119: ./include/linux/mm.h”h´MÖhjÿÆubj¤)�”}”(hhh]”j©)�”}”(hŒ4``const vma_flags_t *flags`` The VMA flags to test. ”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:119: ./include/linux/mm.h”h´MÔhjÇubjÉ)�”}”(hhh]”jM)�”}”(hŒThe VMA flags to test.”h]”hŒThe VMA flags to test.”…”�”}”(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Çubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÿÆ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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MÖhjÿÆubjM)�”}”(hŒ2true if the flags permit merging, false otherwise.”h]”hŒ2true if the flags permit merging, false otherwise.”…”�”}”(hjuÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MÕhjÿÆubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvma_can_merge (C function)”Œc.vma_can_merge”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ5bool vma_can_merge (const struct vm_area_struct *vma)”h]”hù)�”}”(hŒ4bool vma_can_merge(const struct vm_area_struct *vma)”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:119: ./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_can_merge”h]”j)�”}”(hŒ vma_can_merge”h]”hŒ vma_can_merge”…”�”}”(hjÄÇh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÀÇubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj Çh²hh³j±Çh´Míubj8)�”}”(hŒ"(const struct vm_area_struct *vma)”h]”j>)�”}”(hŒ const struct vm_area_struct *vma”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjûÇh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÜÇubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÜÇubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jÈŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÆÇsbŒc.vma_can_merge”†”asbuh1hhjÜÇubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9Èh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÜÇubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjGÈh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÜÇ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ØÇubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj Ç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 **vma**'s flags permit it to be merged with another VMA?”h]”(hŒDo ”…”�”}”(hj~Èh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hj†Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj~ÈubhŒ3’s flags permit it to be merged with another VMA?”…”�”}”(hj~Èh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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²hhjKòh³Nh´Nubj„)�”}”(hŒ‡**Parameters** ``const struct vm_area_struct *vma`` The VMA to test. **Return** true if the flags permit merging, 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:119: ./include/linux/mm.h”h´Mñhj¬Èubj¤)�”}”(hhh]”j©)�”}”(hŒ6``const struct vm_area_struct *vma`` The VMA to test. ”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:119: ./include/linux/mm.h”h´MîhjËÈubjÉ)�”}”(hhh]”jM)�”}”(hŒThe VMA to test.”h]”hŒThe VMA 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ÈÈ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:119: ./include/linux/mm.h”h´Mðhj¬ÈubjM)�”}”(hŒ2true if the flags permit merging, otherwise false.”h]”hŒ2true if the flags permit merging, otherwise false.”…”�”}”(hj"Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mïhj¬Èubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ vma_kernel_pagesize (C function)”Œc.vma_kernel_pagesize”hNt”auh1hÜhjKò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”…”�”}”(hjQÉh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjMÉh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M÷ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`Éh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjMÉh²hh³j_Éh´M÷ubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjnÉh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjMÉh²hh³j_É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Œ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þhjMÉh²hh³j_Éh´M÷ubj8)�”}”(hŒ(struct vm_area_struct *vma)”h]”j>)�”}”(hŒstruct vm_area_struct *vma”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjªÉh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¦Éubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·Éh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¦Éubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jÊÉŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj�ÉsbŒc.vma_kernel_pagesize”†”asbuh1hhj¦Éubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèÉh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¦Éubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjöÉh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¦É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&]”jjuh1j7hjMÉ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Œ+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:119: ./include/linux/mm.h”h´M÷hj*Êh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjFÉh²hh³j_Éh´M÷ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjEÊjHjEÊjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjOÊh]”hŒ Parameters”…”�”}”(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:119: ./include/linux/mm.h”h´MûhjIÊubj¤)�”}”(hhh]”j©)�”}”(hŒ1``struct vm_area_struct *vma`` The user mapping. ”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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MøhjhÊubjÉ)�”}”(hhh]”jM)�”}”(hŒThe user mapping.”h]”hŒThe user mapping.”…”�”}”(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Ê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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MúhjIÊ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.”…”�”}”(hj¿Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MùhjIÊ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:119: ./include/linux/mm.h”h´Mý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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MhjIÊ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:119: ./include/linux/mm.h”h´MhjIÊubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_order (C function)”Œ c.folio_order”hNt”auh1hÜhjKò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:119: ./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Žubjá)�”}”(hŒint”h]”hŒint”…”�”}”(hjAËh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj Ëh²hh³j2Ëh´MŽubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOËh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj Ëh²hh³j2Ëh´MŽubhÿ)�”}”(hŒ folio_order”h]”j)�”}”(hŒ folio_order”h]”hŒ folio_order”…”�”}”(hjaËh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj]Ëubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj Ëh²hh³j2Ëh´MŽubj8)�”}”(hŒ(const struct folio *folio)”h]”j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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Ë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”jèŒ reftarget”j¸ËŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjcËsbŒ c.folio_order”†”asbuh1hhjyËubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖËh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjyËubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjäËh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjyË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&]”jjuh1j7hj Ë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Œ 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:119: ./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&]”jFjAjGj3ÌjHj3ÌjI‰jJ‰jK‰uh1híh²hhjKò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:119: ./include/linux/mm.h”h´M’hj7Ì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&]”uh1jRhjZÌubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M�hjVÌubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(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Ìubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj7Ì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:119: ./include/linux/mm.h”h´M‘hj7Ì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:119: ./include/linux/mm.h”h´M�hj7Ì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:119: ./include/linux/mm.h”h´M“hj7Ì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:119: ./include/linux/mm.h”h´M”hj7Ìubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_reset_order (C function)”Œc.folio_reset_order”hNt”auh1hÜhjKò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:119: ./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_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´Mžubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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<Í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”jèŒ reftarget”j`ÍŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj&ÍsbŒc.folio_reset_order”†”asbuh1hhj<Íubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~Íh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj<Íubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjŒÍh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj<Í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=hj8Íubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÿÌ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Œ+Reset the folio order and derived _nr_pages”h]”hŒ+Reset the folio order and derived _nr_pages”…”�”}”(hjÃÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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²hhjKò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:119: ./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:119: ./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Œ**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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M¡hjßÍ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.”…”�”}”(hjUÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M hjßÍubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_mapcount (C function)”Œc.folio_mapcount”hNt”auh1hÜhjKò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”…”�”}”(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:119: ./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_mapcount”h]”j)�”}”(hŒfolio_mapcount”h]”hŒfolio_mapcount”…”�”}”(hj¥Îh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¡Îubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj€Îh²hh³j’Îh´Mubj8)�”}”(hŒ(const struct folio *folio)”h]”j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÜÎh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj½Îubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéÎh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj½Îubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjúÎh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj÷Îubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jüÎŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj§ÎsbŒc.folio_mapcount”†”asbuh1hhj½Îubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj½Îubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj(Ïh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj½Îubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj5Ï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&]”jjuh1j7hj€Îh²hh³j’Îh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj|Îh²hh³j’Îh´Mubah}”(h]”jwÎah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j’Îh´MhjyÎ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:119: ./include/linux/mm.h”h´Mhj\Ïh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjyÎh²hh³j’Îh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjwÏjHjwÏjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(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:119: ./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:119: ./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:119: ./include/linux/mm.h”h´Mhj{Ï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:119: ./include/linux/mm.h”h´Mhj{Ï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:119: ./include/linux/mm.h”h´Mhj{Ï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:119: ./include/linux/mm.h”h´Mhj{Ï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:119: ./include/linux/mm.h”h´M!hj{ÏubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj/Ðh]”hŒReturn”…”�”}”(hj1Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj-Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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.”…”�”}”(hjEÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M%hj{Ïubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_mapped (C function)”Œc.folio_mapped”hNt”auh1hÜhjKò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”…”�”}”(hjtÐh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjpÐh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M5ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚Ðh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjpÐh²hh³j�Ðh´M5ubhÿ)�”}”(hŒ folio_mapped”h]”j)�”}”(hŒ folio_mapped”h]”hŒ folio_mapped”…”�”}”(hj”Ðh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�Ðubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjpÐh²hh³j�Ðh´M5ubj8)�”}”(hŒ(const struct folio *folio)”h]”j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjËÐh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¬Ðubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØÐh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¬Ðubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjéÐh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjæÐubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jëÐŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj–ÐsbŒc.folio_mapped”†”asbuh1hhj¬Ðubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Ñh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¬Ðubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¬Ð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&]”jjuh1j7hjpÐh²hh³j�Ðh´M5ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjlÐh²hh³j�Ðh´M5ubah}”(h]”jgÐah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j�Ðh´M5hjiÐh²hubj4)�”}”(hhh]”jM)�”}”(hŒ$Is this folio mapped into userspace?”h]”hŒ$Is this folio mapped into userspace?”…”�”}”(hjNÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M5hjKÑh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjiÐh²hh³j�Ðh´M5ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjfÑjHjfÑjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjpÑh]”hŒ Parameters”…”�”}”(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:119: ./include/linux/mm.h”h´M9hjjÑ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:119: ./include/linux/mm.h”h´M6hj‰ÑubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hj¨Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¤Ñh´M6hj¥Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‰Ñubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¤Ñh´M6hj†Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1j£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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M8hjjÑ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:119: ./include/linux/mm.h”h´M8hjjÑubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒthp_order (C function)”Œ c.thp_order”hNt”auh1hÜhjKò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:119: ./include/linux/mm.h”h´Mbubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj Òh²hh³jÒh´Mbubjá)�”}”(hŒint”h]”hŒint”…”�”}”(hj,Òh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj Òh²hh³jÒh´Mbubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:Òh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj Òh²hh³jÒh´Mbubhÿ)�”}”(hŒ thp_order”h]”j)�”}”(hŒ thp_order”h]”hŒ thp_order”…”�”}”(hjLÒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjHÒubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj Òh²hh³jÒh´Mbubj8)�”}”(hŒ(struct page *page)”h]”j>)�”}”(hŒstruct page *page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjhÒh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjdÒubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuÒh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjdÒ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”jèŒ reftarget”jˆÒŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjNÒsbŒ c.thp_order”†”asbuh1hhjdÒubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦Òh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjdÒubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj´Òh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjdÒubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÁÒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjdÒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj`Òubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj Ò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Œ!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:119: ./include/linux/mm.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²hhjKò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:119: ./include/linux/mm.h”h´MfhjÓ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:119: ./include/linux/mm.h”h´Mhhj&ÓubjÉ)�”}”(hhh]”jM)�”}”(hŒ%Head page of a transparent huge page.”h]”hŒ%Head page of a transparent huge page.”…”�”}”(hjEÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MchjBÓubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj&Óubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jAÓh´Mhhj#Óubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÓubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒthp_size (C function)”Œ c.thp_size”hNt”auh1hÜhjKò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”…”�”}”(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:119: ./include/linux/mm.h”h´Mlubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•Óh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‚Óh²hh³j”Óh´Mlubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj£Óh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj‚Óh²hh³j”Óh´Mlubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±Óh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‚Óh²hh³j”Óh´Mlubhÿ)�”}”(hŒthp_size”h]”j)�”}”(hŒthp_size”h]”hŒthp_size”…”�”}”(hjÃÓh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¿Óubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj‚Óh²hh³j”Óh´Mlubj8)�”}”(hŒ(struct page *page)”h]”j>)�”}”(hŒstruct page *page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjßÓh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÛÓubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìÓh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÛÓubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjýÓh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjúÓubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÿÓŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÅÓsbŒ c.thp_size”†”asbuh1hhjÛÓubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÛÓubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj+Ôh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÛÓubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj8Ô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&]”jjuh1j7hj‚Óh²hh³j”Óh´Mlubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj~Óh²hh³j”Óh´Mlubah}”(h]”jyÓah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j”Óh´Mlhj{Óh²hubj4)�”}”(hhh]”jM)�”}”(hŒ Size of a transparent huge page.”h]”hŒ Size of a transparent huge page.”…”�”}”(hjbÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mlhj_Ôh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj{Óh²hh³j”Óh´Mlubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjzÔjHjzÔjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(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:119: ./include/linux/mm.h”h´Mphj~Ô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:119: ./include/linux/mm.h”h´Mmhj�Ô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³j¸Ôh´Mmhj¹Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�Ôubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¸Ôh´MmhjšÔ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:119: ./include/linux/mm.h”h´Mohj~Ô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:119: ./include/linux/mm.h”h´Mohj~Ôubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_get (C function)”Œ c.folio_get”hNt”auh1hÜhjKò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:119: ./include/linux/mm.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Œ folio_get”h]”j)�”}”(hŒ folio_get”h]”hŒ folio_get”…”�”}”(hjDÕh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj@Õubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÕh²hh³j1Õh´MÍubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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\Õ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”jèŒ reftarget”j€ÕŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjFÕsbŒ c.folio_get”†”asbuh1hhj\Õubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžÕh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj\Õubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¬Õh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj\Õ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Õubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÕ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Œ)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:119: ./include/linux/mm.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²hhjKò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:119: ./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:119: ./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³j9Öh´MÎhj:Öubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j9Öh´MÎhjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÿÕubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hj_Öh]”hŒContext”…”�”}”(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:119: ./include/linux/mm.h”h´MÐhjÿÕ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.”…”�”}”(hjuÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MÐhjÿÕubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_put (C function)”Œ c.folio_put”hNt”auh1hÜhjKò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”…”�”}”(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:119: ./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_put”h]”j)�”}”(hŒ folio_put”h]”hŒ folio_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îubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjáÖh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÝÖubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîÖh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÝÖubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÿÖh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjüÖubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j׌modname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÇÖsbŒ c.folio_put”†”asbuh1hhjÝÖubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÝÖubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj-×h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÝÖ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&]”jjuh1j7hj Ö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Œ)Decrement the reference count on a folio.”h]”hŒ)Decrement the reference count on a folio.”…”�”}”(hjd×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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²hhjKò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Ž)�”}”(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:119: ./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:119: ./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Œ**Description**”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:119: ./include/linux/mm.h”h´Mñhj€×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:119: ./include/linux/mm.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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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:119: ./include/linux/mm.h”h´M÷hj€×ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_put_refs (C function)”Œc.folio_put_refs”hNt”auh1hÜhjKò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”…”�”}”(hjLØh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjHØh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[Øh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjHØh²hh³jZØh´M ubhÿ)�”}”(hŒfolio_put_refs”h]”j)�”}”(hŒfolio_put_refs”h]”hŒfolio_put_refs”…”�”}”(hjmØh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjiØubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjHØh²hh³jZØh´M ubj8)�”}”(hŒ(struct folio *folio, int refs)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj‰Øh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj…Øubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–Øh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj…Øubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj§Øh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤Øubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j©ØŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjoØsbŒc.folio_put_refs”†”asbuh1hhj…Øubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇØh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj…Øubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÕØh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj…Ø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Œ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=hj�Øubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjHØh²hh³jZØh´M ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjDØh²hh³jZØh´M ubah}”(h]”j?Øah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jZØh´M hjAØh²hubj4)�”}”(hhh]”jM)�”}”(hŒ&Reduce the reference count on a folio.”h]”hŒ&Reduce the reference count on a folio.”…”�”}”(hjAÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M hj>Ùh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjAØh²hh³jZØh´M ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjYÙjHjYÙjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjcÙh]”hŒ Parameters”…”�”}”(hjeÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjaÙubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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:119: ./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 hjyÙubj©)�”}”(hŒF``int refs`` The amount to subtract from the folio's reference count. ”•h]”(j¯)�”}”(hŒ ``int refs``”h]”jS)�”}”(hj»Ùh]”hŒint refs”…”�”}”(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:119: ./include/linux/mm.h”h´M hjµÙ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´M hjÑÙubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjµÙubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÐÙh´M hjyÙ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:119: ./include/linux/mm.h”h´M hj]Ù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:119: ./include/linux/mm.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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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.”…”�”}”(hj3Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M hj]Ùubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolios_put (C function)”Œ c.folios_put”hNt”auh1hÜhjKò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”…”�”}”(hjbÚ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:119: ./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Œ folios_put”h]”j)�”}”(hŒ folios_put”h]”hŒ folios_put”…”�”}”(hjƒÚh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÚubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj^Úh²hh³jpÚh´M* ubj8)�”}”(hŒ(struct folio_batch *folios)”h]”j>)�”}”(hŒstruct folio_batch *folios”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjŸÚh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj›Úubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬Úh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj›Úubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j¿ÚŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj…ÚsbŒ c.folios_put”†”asbuh1hhj›Úubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝÚh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj›Úubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjëÚh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj›Ú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—Úubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj^Úh²hh³jpÚh´M* ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjZÚh²hh³jpÚh´M* ubah}”(h]”jUÚah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jpÚh´M* hjWÚ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:119: ./include/linux/mm.h”h´M* hjÛh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjWÚh²hh³jpÚh´M* ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj:ÛjHj:ÛjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjDÛh]”hŒ Parameters”…”�”}”(hjFÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjBÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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)�”}”(hjcÛh]”hŒstruct folio_batch *folios”…”�”}”(hjeÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjaÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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³jxÛ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>Û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:119: ./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.”…”�”}”(hj´Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M2 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:119: ./include/linux/mm.h”h´M3 hj>Ûubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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:119: ./include/linux/mm.h”h´Mp ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÜh²hh³jÜh´Mp 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´Mp ubj8)�”}”(hŒ(const vma_flags_t *flags)”h]”j>)�”}”(hŒconst vma_flags_t *flags”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjFÜh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjBÜubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSÜh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjBÜubh)�”}”(hhh]”j)�”}”(hŒ vma_flags_t”h]”hŒ vma_flags_t”…”�”}”(hjdÜh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjaÜubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jfÜŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj,ÜsbŒc.vma_flags_is_cow_mapping”†”asbuh1hhjBÜubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„Üh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjBÜubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj’Üh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjBÜubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjŸÜh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjBÜubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj>Üubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÜh²hh³jÜh´Mp ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÜh²hh³jÜh´Mp ubah}”(h]”jýÛah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÜh´Mp hjÿÛh²hubj4)�”}”(hhh]”jM)�”}”(hŒ'Do these VMA flags imply a CoW mapping?”h]”hŒ'Do these VMA flags imply 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:119: ./include/linux/mm.h”h´Mp hjÆÜh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÿÛh²hh³jÜh´Mp ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjáÜjHjáÜjI‰jJ‰jK‰uh1híh²hhjKò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:119: ./include/linux/mm.h”h´Mt 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:119: ./include/linux/mm.h”h´Mq 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´Mq hj Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÝubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÝh´Mq 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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Ms 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:119: ./include/linux/mm.h”h´Mr 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.”…”�”}”(hjjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mu 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.”…”�”}”(hjyÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mx hjåÜubjM)�”}”(hŒ3The criteria are !VMA_SHARED_BIT, VMA_MAYWRITE_BIT.”h]”hŒ3The criteria are !VMA_SHARED_BIT, 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:119: ./include/linux/mm.h”h´Mz 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.”…”�”}”(hj—Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M| hjåÜubj^)�”}”(hhh]”(jc)�”}”(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:119: ./include/linux/mm.h”h´M€ hj©Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj¦Ýubjc)�”}”(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.”…”�”}”(hjÆÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M‚ hjÂÝubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj¦Ýubjc)�”}”(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:119: ./include/linux/mm.h”h´M† hjÛÝubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj¦Ýubjc)�”}”(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:119: ./include/linux/mm.h”h´M‰ hjôÝubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj¦Ýubjc)�”}”(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:119: ./include/linux/mm.h”h´M� hj Þubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj¦Ýubeh}”(h]”h ]”h"]”h$]”h&]”j‚jƒuh1j]h³j»Ý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:119: ./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:119: ./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.”…”�”}”(hjSÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M” hjåÜubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(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:119: ./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_is_cow_mapping”h]”j)�”}”(hŒvma_is_cow_mapping”h]”hŒvma_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� ubj8)�”}”(hŒ"(const struct vm_area_struct *vma)”h]”j>)�”}”(hŒ const struct vm_area_struct *vma”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÙÞh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjºÞubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæÞh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjºÞubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jùÞŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj¤ÞsbŒc.vma_is_cow_mapping”†”asbuh1hhjºÞubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjºÞubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj%ßh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjºÞubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(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&]”jjuh1j7hj~Þ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Œ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:119: ./include/linux/mm.h”h´M� hjYßh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjwÞh²hh³j�Þh´M� ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjtßjHjtßjI‰jJ‰jK‰uh1híh²hhjKò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”…”�”}”(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:119: ./include/linux/mm.h”h´M¡ hjxß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)�”}”(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:119: ./include/linux/mm.h”h´Mž hj—ßubjÉ)�”}”(hhh]”jM)�”}”(hŒThe VMA to check.”h]”hŒThe VMA 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£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:119: ./include/linux/mm.h”h´M  hjxß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:119: ./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:119: ./include/linux/mm.h”h´M¡ hjxß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:119: ./include/linux/mm.h”h´M¢ hjxßubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hjDà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:119: ./include/linux/mm.h”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Œvma_desc_is_cow_mapping”h]”j)�”}”(hŒvma_desc_is_cow_mapping”h]”hŒvma_desc_is_cow_mapping”…”�”}”(hjdàh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj`àubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj@àh²hh³jQàh´Mª ubj8)�”}”(hŒ(struct vm_area_desc *desc)”h]”j>)�”}”(hŒstruct vm_area_desc *desc”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj€àh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj|àubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�àh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj|àubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j àŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjfàsbŒc.vma_desc_is_cow_mapping”†”asbuh1hhj|àubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾àh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj|àubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÌàh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj|à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=hjxàubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj@àh²hh³jQàh´Mª ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj<àh²hh³jQàh´Mª ubah}”(h]”j7àah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jQàh´Mª hj9à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:119: ./include/linux/mm.h”h´Mª hjáh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj9àh²hh³jQàh´Mª ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjájHjájI‰jJ‰jK‰uh1híh²hhjKò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:119: ./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)�”}”(hjDáh]”hŒstruct vm_area_desc *desc”…”�”}”(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:119: ./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³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:119: ./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:119: ./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:119: ./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.”…”�”}”(hj¼áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M¯ hjáubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_pfn (C function)”Œ c.folio_pfn”hNt”auh1hÜhjKò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:119: ./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Œ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Œ 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´Mü ubj8)�”}”(hŒ(const struct folio *folio)”h]”j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjDâ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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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@â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”jèŒ reftarget”jâŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj*âsbŒ c.folio_pfn”†”asbuh1hhj@âubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�âh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj@âubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj«âh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj@â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&]”jjuh1j7hjçá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 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:119: ./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²hhjKò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:119: ./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:119: ./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³j8ãh´Mý hj9ãubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjãubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j8ã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:119: ./include/linux/mm.h”h´Mÿ 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.”…”�”}”(hjtãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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:119: ./include/linux/mm.h”h´M 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.”…”�”}”(hj›ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M hjþâubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_mk_pte (C function)”Œc.folio_mk_pte”hNt”auh1hÜhjKò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”jèŒ reftarget”jÏãŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒ folio_mk_pte”sbŒc.folio_mk_pte”†”asbuh1hhjÆãh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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_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þhjÆãh²hh³jîãh´M ubj8)�”}”(hŒ,(const struct folio *folio, pgprot_t pgprot)”h]”(j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj7äh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjäubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDäh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjä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”jèŒ reftarget”jWäŒmodname”NŒ classname”Njìjï)�”}”jò]”jéãŒc.folio_mk_pte”†”asbuh1hhjäubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsäh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjäubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj�äh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjä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”jèŒ reftarget”j¬äŒmodname”NŒ classname”Njìjï)�”}”jò]”jéãŒc.folio_mk_pte”†”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&]”jjuh1j7hjÆã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 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:119: ./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²hhjKò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:119: ./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)�”}”(hjAåh]”hŒconst struct folio *folio”…”�”}”(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:119: ./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”…”�”}”(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Œ4``pgprot_t pgprot`` The page protection bits to use ”h]”(j¯)�”}”(hŒ``pgprot_t pgprot``”h]”jS)�”}”(hjzåh]”hŒpgprot_t pgprot”…”�”}”(hj|åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjxåubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M hjtå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È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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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:119: ./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:119: ./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:119: ./include/linux/mm.h”h´M hjåubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_mk_pmd (C function)”Œc.folio_mk_pmd”hNt”auh1hÜhjKò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”jèŒ reftarget”j&æŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒ folio_mk_pmd”sbŒc.folio_mk_pmd”†”asbuh1hhjæh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M% ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFæh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjæh²hh³jEæh´M% ubhÿ)�”}”(hŒ folio_mk_pmd”h]”j)�”}”(hjBæh]”hŒ folio_mk_pmd”…”�”}”(hjXæh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjTæubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjæh²hh³jEæh´M% ubj8)�”}”(hŒ,(const struct folio *folio, pgprot_t pgprot)”h]”(j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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æ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”jèŒ reftarget”j®æŒmodname”NŒ classname”Njìjï)�”}”jò]”j@æŒc.folio_mk_pmd”†”asbuh1hhjoæubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊæh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjoæubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjØæh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjoæubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjåæh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjoæubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjkæ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”jèŒ reftarget”jçŒmodname”NŒ classname”Njìjï)�”}”jò]”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=hjkæubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjæ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ŒCreate a PMD for this folio”h]”hŒCreate a PMD for this folio”…”�”}”(hjWçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M% hjTçh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjæh²hh³jEæh´M% ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjoçjHjoçjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(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:119: ./include/linux/mm.h”h´M) hjsçubj¤)�”}”(hhh]”(j©)�”}”(hŒ<``const struct folio *folio`` The folio to create a PMD 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:119: ./include/linux/mm.h”h´M& hj’çubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to create a PMD for”h]”hŒThe folio to create a PMD 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:119: ./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£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:119: ./include/linux/mm.h”h´M) hjsç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:119: ./include/linux/mm.h”h´M( hjsç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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M+ hjsçubjM)�”}”(hŒ3A page table entry suitable for mapping this folio.”h]”hŒ3A page table entry suitable for mapping this folio.”…”�”}”(hjIèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M, hjsçubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_mk_pud (C function)”Œc.folio_mk_pud”hNt”auh1hÜhjKò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&]”uh1jhjxèubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j}èŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒ folio_mk_pud”sbŒc.folio_mk_pud”†”asbuh1hhjtèh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M5 ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�èh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjtèh²hh³jœèh´M5 ubhÿ)�”}”(hŒ folio_mk_pud”h]”j)�”}”(hj™èh]”hŒ folio_mk_pud”…”�”}”(hj¯èh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj«èubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjtèh²hh³jœèh´M5 ubj8)�”}”(hŒ,(const struct folio *folio, pgprot_t pgprot)”h]”(j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjåèh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÆèubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòèh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÆèubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjéubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jéŒmodname”NŒ classname”Njìjï)�”}”jò]”j—èŒc.folio_mk_pud”†”asbuh1hhjÆèubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!éh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÆèubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj/éh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÆè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”…”�”}”(hjXéh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjUéubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jZéŒmodname”NŒ classname”Njìjï)�”}”jò]”j—èŒc.folio_mk_pud”†”asbuh1hhjQéubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvéh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjQéubj)�”}”(hŒpgprot”h]”hŒpgprot”…”�”}”(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&]”jjuh1j7hjtèh²hh³jœèh´M5 ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjpèh²hh³jœèh´M5 ubah}”(h]”jkèah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jœèh´M5 hjmè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:119: ./include/linux/mm.h”h´M5 hj«éh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjmèh²hh³jœèh´M5 ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÆéjHjÆéjI‰jJ‰jK‰uh1híh²hhjKò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:119: ./include/linux/mm.h”h´M9 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:119: ./include/linux/mm.h”h´M6 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´M6 hjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjééubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jêh´M6 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:119: ./include/linux/mm.h”h´M7 hj"êubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page protection bits to use”h]”hŒThe page protection bits to use”…”�”}”(hjAêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j=êh´M7 hj>êubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj"êubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j=êh´M7 hjæéubeh}”(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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M9 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().”…”�”}”(hjyêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M8 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:119: ./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:119: ./include/linux/mm.h”h´M< hjÊéubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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:119: ./include/linux/mm.h”h´MN ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝêh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjËêh²hh³jÜêh´MN 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´MN ubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj ëh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjëubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjëubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj)ëh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj&ëubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j+ëŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjñêsbŒc.folio_maybe_dma_pinned”†”asbuh1hhjëubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIëh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjëubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjWëh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjë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&]”jjuh1j7hjËêh²hh³jÜêh´MN ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÇêh²hh³jÜêh´MN ubah}”(h]”jÂêah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÜêh´MN hjÄê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:119: ./include/linux/mm.h”h´MN hj‹ëh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÄêh²hh³jÜêh´MN ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¦ëjHj¦ëjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(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:119: ./include/linux/mm.h”h´MR 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:119: ./include/linux/mm.h”h´MO hjÉëubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hjèëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jäëh´MO hjåëubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÉëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jäëh´MO 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:119: ./include/linux/mm.h”h´MQ 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:119: ./include/linux/mm.h”h´MP 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:119: ./include/linux/mm.h”h´MS 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:119: ./include/linux/mm.h”h´MX 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.”…”�”}”(hjMìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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:119: ./include/linux/mm.h”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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mb 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.”…”�”}”(hjƒìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mc hjªëubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒis_zero_page (C function)”Œc.is_zero_page”hNt”auh1hÜhjKò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”…”�”}”(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:119: ./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_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³j¿ìh´M‰ ubj8)�”}”(hŒ(const struct page *page)”h]”j>)�”}”(hŒconst struct page *page”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj íh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjêìubjó)�”}”(hŒ ”h]”hŒ ”…”�”•}”(hjíh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjêìubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj'íh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj$íubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j)íŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÔìsbŒc.is_zero_page”†”asbuh1hhjêìubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGíh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjêìubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjUíh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjêìubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(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&]”jjuh1j7hj®ì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 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:119: ./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²hhjKò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”…”�”}”(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:119: ./include/linux/mm.h”h´M� hj¨í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:119: ./include/linux/mm.h”h´MŠ hjÇí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È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:119: ./include/linux/mm.h”h´MŒ hj¨í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:119: ./include/linux/mm.h”h´M‹ hj¨íubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒis_zero_folio (C function)”Œc.is_zero_folio”hNt”auh1hÜhjKò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:119: ./include/linux/mm.h”h´M” ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmîh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj[îh²hh³jlîh´M” ubhÿ)�”}”(hŒ is_zero_folio”h]”j)�”}”(hŒ is_zero_folio”h]”hŒ is_zero_folio”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj{îubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj[îh²hh³jlîh´M” ubj8)�”}”(hŒ(const struct folio *folio)”h]”j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¶îh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj—îubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃîh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj—îubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÔîh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÑîubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÖîŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj�îsbŒc.is_zero_folio”†”asbuh1hhj—îubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjôîh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj—îubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj—î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&]”jjuh1j7hj[îh²hh³jlîh´M” ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjWîh²hh³jlîh´M” ubah}”(h]”jRîah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jlîh´M” hjTîh²hubj4)�”}”(hhh]”jM)�”}”(hŒQuery if a folio is a zero page”h]”hŒQuery if a folio is a zero page”…”�”}”(hj9ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M” hj6ïh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjTîh²hh³jlîh´M” ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjQïjHjQïjI‰jJ‰jK‰uh1híh²hhjKò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�hjYïubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M˜ hjUïubj¤)�”}”(hhh]”j©)�”}”(hŒ1``const struct folio *folio`` The folio to query ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjzïh]”hŒconst struct folio *folio”…”�”}”(hj|ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjxïubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M• hjtïubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to query”h]”hŒThe folio to query”…”�”}”(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• hjqï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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M— hjUï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:119: ./include/linux/mm.h”h´M– hjUïubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_nr_pages (C function)”Œc.folio_nr_pages”hNt”auh1hÜhjKò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:119: ./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Œ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Œ ”…”�”}”(hj7ðh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjðh²hh³jðh´M× ubhÿ)�”}”(hŒfolio_nr_pages”h]”j)�”}”(hŒfolio_nr_pages”h]”hŒfolio_nr_pages”…”�”}”(hjIðh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjEðubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjðh²hh³jðh´M× ubj8)�”}”(hŒ(const struct folio *folio)”h]”j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjeðh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjaðubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrðh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjaðubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj€ðh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjaðubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�ðh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjað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”jèŒ reftarget”j ðŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjKðsbŒc.folio_nr_pages”†”asbuh1hhjaðubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾ðh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjaðubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÌðh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjaðubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÙðh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjaðubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj]ðubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjð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 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:119: ./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²hhjKò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:119: ./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:119: ./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Œ **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:119: ./include/linux/mm.h”h´MÚ hjñubjM)�”}”(hŒA positive power of two.”h]”hŒA positive power of two.”…”�”}”(hj•ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MÚ hjñubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_next (C function)”Œ c.folio_next”hNt”auh1hÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÄñh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÀñh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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Œfolio”h]”hŒfolio”…”�”}”(hjãñh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjàñubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jåñŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒ folio_next”sbŒ c.folio_next”†”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ò ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÀñ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þhjÀñh²hh³jÑñh´Mò ubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj>òh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj:ò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”jèŒ reftarget”j^òŒmodname”NŒ classname”Njìjï)�”}”jò]”jÿñŒ c.folio_next”†”asbuh1hhj:òubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzòh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj:òubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjˆòh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj:ò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&]”jjuh1j7hjÀñ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 to the next physical folio.”h]”hŒ Move to the next physical folio.”…”�”}”(hj¿òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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²hhjKò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:119: ./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:119: ./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�hj9óubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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 ”…”�”}”(hjQó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 ]”(j%4jAŒc-type”eh"]”h$]”h&]”uh1jRhjYóubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j14Œ refdomain”jAŒreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰jìj74j:4Œbio_vec”uh1hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mô hjQó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 ”…”�”}”(hjQóh²hh³Nh´NubjS)�”}”(hŒ ``page++``”h]”hŒpage++”…”�”}”(hj}óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjQóubhŒ.”…”�”}”(hjQóh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jxó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:119: ./include/linux/mm.h”h´Mú 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:119: ./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:119: ./include/linux/mm.h”h´Mþ 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:119: ./include/linux/mm.h”h´Mý hjÛòubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_shift (C function)”Œ c.folio_shift”hNt”auh1hÜhjKò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:119: ./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Œ 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´M ubj8)�”}”(hŒ(const struct folio *folio)”h]”j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hj\ôh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjXôubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjiôh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjXôubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjwôh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjXô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”jèŒ reftarget”j—ôŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjBôsbŒ c.folio_shift”†”asbuh1hhjXôubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµôh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjXôubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÃôh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjXô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&]”jjuh1j7hjÿó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 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:119: ./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²hhjKò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:119: ./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&]”uh1jRhj9õubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M hj5õubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(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õ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:119: ./include/linux/mm.h”h´M 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:119: ./include/linux/mm.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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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:119: ./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:119: ./include/linux/mm.h”h´M 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:119: ./include/linux/mm.h”h´M hjõubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_size (C function)”Œ c.folio_size”hNt”auh1hÜhjKò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”jèŒ reftarget”jöŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒ folio_size”sbŒ c.folio_size”†”asbuh1hhjöh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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 ubj8)�”}”(hŒ(const struct folio *folio)”h]”j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hj[öh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjWöubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhöh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjWöubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjvö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ö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”jèŒ reftarget”j–öŒmodname”NŒ classname”Njìjï)�”}”jò]”j(öŒ c.folio_size”†”asbuh1hhjWöubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²öh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjWöubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÀöh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjWö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öubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjö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:119: ./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²hhjKò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:119: ./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)�”}”(hj8÷h]”hŒconst struct folio *folio”…”�”}”(hj:÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj6÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M hj2÷ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(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/÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj÷ubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjs÷h]”hŒContext”…”�”}”(hju÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjq÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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:119: ./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:119: ./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.”…”�”}”(hj°÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M hj÷ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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:119: ./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# ubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjøubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(øh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjøubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj9øh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj6øubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j;øŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjøsbŒc.folio_maybe_mapped_shared”†”asbuh1hhjøubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYøh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjøubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjgøh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjøubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(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&]”jjuh1j7hjÛ÷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”…”�”}”(hjžøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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²hhjKò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Ž)�”}”(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:119: ./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:119: ./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Œ**Description**”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:119: ./include/linux/mm.h”h´M' hjºø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â€�).”…”�”}”(hj0ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M& hjºø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:119: ./include/linux/mm.h”h´M* hjºø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.”…”�”}”(hjNùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M. hjºø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:”…”�”}”(hjdùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M9 hj`ùubjÉ)�”}”(hhh]”jÓM)�”}”(hhh]”(jc)�”}”(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:119: ./include/linux/mm.h”h´M4 hjyùubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjvùubjc)�”}”(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.”…”�”}”(hj–ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M7 hj’ùubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjvùubeh}”(h]”h ]”h"]”h$]”h&]”j?Nj@NjANhjBNjCNuh1jÒMhjsùubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj`ùubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jrùh´M9 hj]ùubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjºø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).”…”�”}”(hjÃùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M; hjºø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:119: ./include/linux/mm.h”h´MC hjÕùubjÉ)�”}”(hhh]”jÓM)�”}”(hhh]”(jc)�”}”(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:119: ./include/linux/mm.h”h´M? hjîùubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjëùubjc)�”}”(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:119: ./include/linux/mm.h”h´MA hjúubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjëùubjc)�”}”(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:119: ./include/linux/mm.h”h´MB hjúubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjëùubeh}”(h]”h ]”h"]”h$]”h&]”j?Nj@NjANhjBNjCNuh1jÒMhjèùubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÕùubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jçùh´MC hjÒùubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjºøubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjRúh]”hŒReturn”…”�”}”(hjTúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjPúubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´ME hjºø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.”…”�”}”(hjhúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MF hjºøubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(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:119: ./include/linux/mm.h”h´Mc ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦úh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj“úh²hh³j¥úh´Mc ubhÿ)�”}”(hŒfolio_expected_ref_count”h]”j)�”}”(hŒfolio_expected_ref_count”h]”hŒfolio_expected_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´Mc ubj8)�”}”(hŒ(const struct folio *folio)”h]”j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjïúh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÐúubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüúh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÐúubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj ûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ûubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jûŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjºúsbŒc.folio_expected_ref_count”†”asbuh1hhjÐúubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-ûh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÐúubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj;ûh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÐúubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjHû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&]”jjuh1j7hj“úh²hh³j¥úh´Mc ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj�úh²hh³j¥úh´Mc ubah}”(h]”jŠúah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¥úh´Mc hjŒúh²hubj4)�”}”(hhh]”jM)�”}”(hŒ%calculate the expected folio refcount”h]”hŒ%calculate the expected folio refcount”…”�”}”(hjrûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mc hjoûh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjŒúh²hh³j¥úh´Mc ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjŠûjHjŠûjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hX@**Parameters** ``const struct folio *folio`` the folio **Description** Calculate the expected folio refcount, taking references from the pagecache, swapcache, private data (folio->private != NULL) 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Ž)�”}”(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:119: ./include/linux/mm.h”h´Mg 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:119: ./include/linux/mm.h”h´Md hj­ûubjÉ)�”}”(hhh]”jM)�”}”(hŒ the folio”h]”hŒ the folio”…”�”}”(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 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:119: ./include/linux/mm.h”h´Mf hjŽûubjM)�”}”(hXCalculate the expected folio refcount, taking references from the pagecache, swapcache, private data (folio->private != NULL) 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, private data (folio->private != NULL) 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:119: ./include/linux/mm.h”h´Me 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:119: ./include/linux/mm.h”h´Mj 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:119: ./include/linux/mm.h”h´Mn 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()).”…”�”}”(hj1üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mq 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:119: ./include/linux/mm.h”h´Mu 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).”…”�”}”(hjOüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´My 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:119: ./include/linux/mm.h”h´M} 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:119: ./include/linux/mm.h”h´M€ hjŽûubjM)�”}”(hŒthe expected folio refcount.”h]”hŒ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:119: ./include/linux/mm.h”h´M� hjŽûubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒzap_vma (C function)”Œ c.zap_vma”hNt”auh1hÜhjKò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”…”�”}”(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:119: ./include/linux/mm.h”h´M1 ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃüh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj°üh²hh³jÂüh´M1 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þhj°üh²hh³jÂüh´M1 ubj8)�”}”(hŒ(struct vm_area_struct *vma)”h]”j>)�”}”(hŒstruct vm_area_struct *vma”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjñüh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjíüubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþüh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjíüubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jýŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj×üsbŒ c.zap_vma”†”asbuh1hhjíüubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/ýh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjíüubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj=ýh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjíüubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(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&]”jjuh1j7hj°üh²hh³jÂüh´M1 ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¬üh²hh³jÂüh´M1 ubah}”(h]”j§üah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÂüh´M1 hj©üh²hubj4)�”}”(hhh]”jM)�”}”(hŒ#zap all page table entries in a vma”h]”hŒ#zap all page table entries in a vma”…”�”}”(hjtýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M1 hjqýh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj©üh²hh³jÂüh´M1 ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjŒýjHjŒýjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hŒ@**Parameters** ``struct vm_area_struct *vma`` The vma to zap.”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:119: ./include/linux/mm.h”h´M5 hj�ýubj¤)�”}”(hhh]”j©)�”}”(hŒ.``struct vm_area_struct *vma`` The vma 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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M7 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:119: ./include/linux/mm.h”h´M2 hjËýubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¯ýubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÊýh´M7 hj¬ýubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj�ýubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒptdesc_address (C function)”Œc.ptdesc_address”hNt”auh1hÜhjKò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:119: ./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*ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj,þh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj þ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&]”uh1jhj9þubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj þh²hh³jþh´M*ubj8)�”}”(hŒ(const struct ptdesc *pt)”h]”j>)�”}”(hŒconst struct ptdesc *pt”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjYþh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjUþubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfþh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjUþubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjtþh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjUþubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�þh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjUþ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”jèŒ reftarget”j”þŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj?þsbŒc.ptdesc_address”†”asbuh1hhjUþubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²þh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjUþubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÀþh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjUþubj)�”}”(hŒpt”h]”hŒpt”…”�”}”(hjÍþh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjUþubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjQþubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj þ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:119: ./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²hhjKò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:119: ./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)�”}”(hj8ÿh]”hŒconst struct ptdesc *pt”…”�”}”(hj:ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj6ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M+hj2ÿubjÉ)�”}”(hhh]”jM)�”}”(hŒPage table descriptor.”h]”hŒPage table descriptor.”…”�”}”(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/ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÿubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjsÿh]”hŒReturn”…”�”}”(hjuÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjqÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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”…”�”}”(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:119: ./include/linux/mm.h”h´M-hjÿubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒptdesc_set_kernel (C function)”Œc.ptdesc_set_kernel”hNt”auh1hÜhjKò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àhjÆÿh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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_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þhjÆÿh²hh³jØÿh´M:ubj8)�”}”(hŒ(struct ptdesc *ptdesc)”h]”j>)�”}”(hŒstruct ptdesc *ptdesc”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjubh)�”}”(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”jèŒ reftarget”j'Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjíÿsbŒc.ptdesc_set_kernel”†”asbuh1hhjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjubj)�”}”(hŒptdesc”h]”hŒptdesc”…”�”}”(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&]”jjuh1j7hjÆÿ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 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:119: ./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²hhjKò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:119: ./include/linux/mm.h”h´M>hj¦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&]”uh1jRhjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M;hjÅ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È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:119: ./include/linux/mm.h”h´M=hj¦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.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M<hj¦ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ ptdesc_clear_kernel (C function)”Œc.ptdesc_clear_kernel”hNt”auh1hÜhjKò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”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjGh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MFubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjGh²hh³jYh´MFubhÿ)�”}”(hŒptdesc_clear_kernel”h]”j)�”}”(hŒptdesc_clear_kernel”h]”hŒptdesc_clear_kernel”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjhubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjGh²hh³jYh´MFubj8)�”}”(hŒ(struct ptdesc *ptdesc)”h]”j>)�”}”(hŒstruct ptdesc *ptdesc”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj„ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj„ubh)�”}”(hhh]”j)�”}”(hŒptdesc”h]”hŒptdesc”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj£ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j¨Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjnsbŒc.ptdesc_clear_kernel”†”asbuh1hhj„ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj„ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj„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&]”jjuh1j7hjGh²hh³jYh´MFubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjCh²hh³jYh´MFubah}”(h]”j>ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jYh´MFhj@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:119: ./include/linux/mm.h”h´MFhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj@h²hh³jYh´MFubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj#jHj#jI‰jJ‰jK‰uh1híh²hhjKò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:119: ./include/linux/mm.h”h´MJhj'ubj¤)�”}”(hhh]”j©)�”}”(hŒ4``struct ptdesc *ptdesc`` The ptdesc to be unmarked ”h]”(j¯)�”}”(hŒ``struct ptdesc *ptdesc``”h]”jS)�”}”(hjLh]”hŒstruct ptdesc *ptdesc”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjJubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MGhjFubjÉ)�”}”(hhh]”jM)�”}”(hŒThe ptdesc to be unmarked”h]”hŒThe ptdesc to be unmarked”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jah´MGhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjFubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jah´MGhjCubah}”(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:119: ./include/linux/mm.h”h´MIhj'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.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MHhj'ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒptdesc_test_kernel (C function)”Œc.ptdesc_test_kernel”hNt”auh1hÜhjKò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àhjÈh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.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Œ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þhjÈh²hh³jÙh´MWubj8)�”}”(hŒ(const struct ptdesc *ptdesc)”h]”j>)�”}”(hŒconst struct ptdesc *ptdesc”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjubh)�”}”(hhh]”j)�”}”(hŒptdesc”h]”hŒptdesc”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jCŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjîsbŒc.ptdesc_test_kernel”†”asbuh1hhjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjubj)�”}”(hŒptdesc”h]”hŒptdesc”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÈ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 a ptdesc is used to map the kernel”h]”hŒ+Check if a ptdesc is 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:119: ./include/linux/mm.h”h´MWhj£h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÁh²hh³jÙh´MWubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¾jHj¾jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(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:119: ./include/linux/mm.h”h´M[hjÂ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:119: ./include/linux/mm.h”h´MXhjáubjÉ)�”}”(hhh]”jM)�”}”(hŒThe ptdesc being tested”h]”hŒThe ptdesc being tested”…”�”}”(hjh²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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MZhjÂ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.”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MYhjÂubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpagetable_alloc (C function)”Œc.pagetable_alloc”hNt”auh1hÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjch²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mbubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjch²hh³jth´Mbubh)�”}”(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”jèŒ reftarget”jˆŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒpagetable_alloc”sbŒc.pagetable_alloc”†”asbuh1hhjch²hh³jth´Mbubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjch²hh³jth´Mbubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjch²hh³jth´Mbubhÿ)�”}”(hŒpagetable_alloc”h]”j)�”}”(hj¤h]”hŒpagetable_alloc”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÂubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjch²hh³jth´Mbubj8)�”}”(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”jèŒ reftarget”jæŒmodname”NŒ classname”Njìjï)�”}”jò]”j¢Œc.pagetable_alloc”†”asbuh1hhjÝubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÝubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjh²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Œ ”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj%ubjá)�”}”(hŒint”h]”hŒint”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj%ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj%ubj)�”}”(hŒorder”h]”hŒorder”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÙubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjch²hh³jth´Mbubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj_h²hh³jth´Mbubah}”(h]”jZah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jth´Mbhj\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:119: ./include/linux/mm.h”h´Mbhjˆh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj\h²hh³jth´Mbubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj£jHj£jI‰jJ‰jK‰uh1híh²hhjKò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:119: ./include/linux/mm.h”h´Mfhj§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:119: ./include/linux/mm.h”h´MchjÆubjÉ)�”}”(hhh]”jM)�”}”(hŒ GFP flags”h]”hŒ GFP flags”…”�”}”(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Œ/``unsigned int order`` desired pagetable order ”h]”(j¯)�”}”(hŒ``unsigned int order``”h]”jS)�”}”(hjh]”hŒunsigned int order”…”�”}”(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:119: ./include/linux/mm.h”h´MdhjÿubjÉ)�”}”(hhh]”jM)�”}”(hŒdesired pagetable order”h]”hŒdesired pagetable order”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jh´Mdhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jh´MdhjÃubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj§ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj@h]”hŒ Description”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mfhj§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.”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mehj§ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjgh]”hŒReturn”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mhhj§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:119: ./include/linux/mm.h”h´Mihj§ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpagetable_free (C function)”Œc.pagetable_free”hNt”auh1hÜhjKò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àhj¨h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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Œpagetable_free”h]”j)�”}”(hŒpagetable_free”h]”hŒpagetable_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ƒubj8)�”}”(hŒ(struct ptdesc *pt)”h]”j>)�”}”(hŒstruct ptdesc *pt”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjåubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjåubh)�”}”(hhh]”j)�”}”(hŒptdesc”h]”hŒptdesc”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÏsbŒc.pagetable_free”†”asbuh1hhjåubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjåubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjåubj)�”}”(hŒpt”h]”hŒpt”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjåubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjáubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj¨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 pagetables”h]”hŒFree pagetables”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mƒhjih²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²hhjKò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”…”�”}”(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:119: ./include/linux/mm.h”h´M‡hjˆ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:119: ./include/linux/mm.h”h´M„hj§ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page table descriptor”h]”hŒThe 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Œ**Description**”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:119: ./include/linux/mm.h”h´M†hjˆ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:119: ./include/linux/mm.h”h´M…hjˆubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvma_lookup (C function)”Œ c.vma_lookup”hNt”auh1hÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj)h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjIubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jNŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒ vma_lookup”sbŒ c.vma_lookup”†”asbuh1hhj)h²hh³j:h´M™ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj)h²hh³j:h´M™ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj)h²hh³j:h´M™ubhÿ)�”}”(hŒ vma_lookup”h]”j)�”}”(hjjh]”hŒ vma_lookup”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjˆubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj)h²hh³j:h´M™ubj8)�”}”(hŒ*(struct mm_struct *mm, unsigned long addr)”h]”(j>)�”}”(hŒstruct mm_struct *mm”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj£ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj£ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jÇŒmodname”NŒ classname”Njìjï)�”}”jò]”jhŒ c.vma_lookup”†”asbuh1hhj£ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj£ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj£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Œ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”…”�”}”(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Œaddr”h]”hŒaddr”…”�”}”(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&]”jjuh1j7hj)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”…”�”}”(hjy h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M™hjv 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²hhjKò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Ž)�”}”(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:119: ./include/linux/mm.h”h´M�hj• ubj¤)�”}”(hhh]”(j©)�”}”(hŒ4``struct mm_struct *mm`` The process address space. ”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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mšhj´ 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Èhj´ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÏ h´Mšhj± 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:119: ./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›hj± ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj• 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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M�hj• ubjM)�”}”(hŒ)�”}”(hŒ const struct vm_area_struct *vma”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjò h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÓ ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÓ ubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”j Œmodname”NŒ classname”Njìjï)�”}”jò]”j¤ Œc.vma_start_pgoff”†”asbuh1hhjÓ ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj. h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÓ ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj< h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÓ 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Ï ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj� 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Œ+Get the page offset of the start of **vma**”h]”(hŒ$Get the page offset of the start of ”…”�”}”(hjs h²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjs ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MÎhjp 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²hhjKòh³Nh´Nubj„)�”}”(hXœ**Parameters** ``const struct vm_area_struct *vma`` The VMA whose page offset is required. **Description** If the VMA is file-backed, this is the page offset into the file. 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. 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 and CoW 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Ž)�”}”(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:119: ./include/linux/mm.h”h´MÒhj� 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)�”}”(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:119: ./include/linux/mm.h”h´MÏhj¼ 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´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:119: ./include/linux/mm.h”h´MÑhj� 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:119: ./include/linux/mm.h”h´MÐhj� 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:119: ./include/linux/mm.h”h´MÒhj� ubjM)�”}”(hŒcIf **vma** is a MAP_PRIVATE file-backed mapping, then this returns the page offset within the file.”h]”(hŒIf ”…”�”}”(hjC h²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjK h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjC ubhŒY is a MAP_PRIVATE file-backed mapping, then this returns the page offset within the file.”…”�”}”(hjC h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MÖhj� ubjM)�”}”(hŒ†Edge cases: nommu does not abide by these and CoW 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 and CoW MAP_PRIVATE-pfnmap regions have their page offset set to the first PFN in the range.”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MÙ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:119: ./include/linux/mm.h”h´MÜhj� 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”…”�”}”(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:119: ./include/linux/mm.h”h´MÝhj� ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvma_end_pgoff (C function)”Œc.vma_end_pgoff”hNt”auh1hÜhjKò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”jèŒ reftarget”jÑ Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒ vma_end_pgoff”sbŒc.vma_end_pgoff”†”asbuh1hhjÈ h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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_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þhjÈ h²hh³jð h´Måubj8)�”}”(hŒ"(const struct vm_area_struct *vma)”h]”j>)�”}”(hŒ const struct vm_area_struct *vma”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj9 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 ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjW h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjT ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jY Œmodname”NŒ classname”Njìjï)�”}”jò]”jë Œc.vma_end_pgoff”†”asbuh1hhj ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjƒ h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj 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&]”jjuh1j7hjÈ 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Œ3Get the page offset of the exclusive end of **vma**”h]”(hŒ,Get the 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º ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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²hhjKò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:119: ./include/linux/mm.h”h´Méhjä 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&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MæhjubjÉ)�”}”(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³jh´Mæhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jh´Mæhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjä ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjDh]”hŒ Description”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mèhjä 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 ”…”�”}”(hjZh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjZubhŒ4, which is useful for expressing page offset ranges.”…”�”}”(hjZh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mçhjä 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:119: ./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:119: ./include/linux/mm.h”h´Míhjä ubjM)�”}”(hŒ)The exclusive end page offset of **vma**.”h]”(hŒ!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Œ.”…”�”}”(hj¢h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mîhjä ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒvma_last_pgoff (C function)”Œc.vma_last_pgoff”hNt”auh1hÜhjKò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”jèŒ reftarget”jèŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒvma_last_pgoff”sbŒc.vma_last_pgoff”†”asbuh1hhjßh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Möubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjßh²hh³jh´Möubhÿ)�”}”(hŒvma_last_pgoff”h]”j)�”}”(hjh]”hŒvma_last_pgoff”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjßh²hh³jh´Möubj8)�”}”(hŒ"(const struct vm_area_struct *vma)”h]”j>)�”}”(hŒ const struct vm_area_struct *vma”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj1ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj1ubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj1ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj1ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjkubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jpŒmodname”NŒ classname”Njìjï)�”}”jò]”jŒc.vma_last_pgoff”†”asbuh1hhj1ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj1ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj1ubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj-ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjß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Œ/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:119: ./include/linux/mm.h”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²hhjKò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Ž)�”}”(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:119: ./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&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M÷hjubjÉ)�”}”(hhh]”jM)�”}”(hŒ+The VMA whose last page offset is required.”h]”hŒ+The VMA whose last page offset is required.”…”�”}”(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:119: ./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 ”…”�”}”(hjqh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjqubhŒ.”…”�”}”(hjqh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Møhjû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:119: ./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:119: ./include/linux/mm.h”h´MýhjûubjM)�”}”(hŒ The last page offset of **vma**.”h]”(hŒThe last 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:119: ./include/linux/mm.h”h´Mþhjûubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”jèŒ reftarget”jÿŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒvma_start_anon_pgoff”sbŒc.vma_start_anon_pgoff”†”asbuh1hhjöh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjöh²hh³jh´Mubhÿ)�”}”(hŒvma_start_anon_pgoff”h]”j)�”}”(hjh]”hŒvma_start_anon_pgoff”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj-ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjöh²hh³jh´Mubj8)�”}”(hŒ"(const struct vm_area_struct *vma)”h]”j>)�”}”(hŒ const struct vm_area_struct *vma”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjHubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjHubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjHubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjHubh)�”}”(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”jèŒ reftarget”j‡Œmodname”NŒ classname”Njìjï)�”}”jò]”jŒc.vma_start_anon_pgoff”†”asbuh1hhjHubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjHubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjHubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjHubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjDubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjöh²hh³jh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjòh²hh³jh´Mubah}”(h]”jíah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jh´Mhjï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:119: ./include/linux/mm.h”h´Mhjåh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjïh²hh³jh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjjHjjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjh]”hŒ Parameters”…”�”}”(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:119: ./include/linux/mm.h”h´M hjubj¤)�”}”(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)�”}”(hj7h]”hŒ const struct vm_area_struct *vma”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mhj1ubjÉ)�”}”(hhh]”jM)�”}”(hŒ0The VMA whose anonymous page offset is required.”h]”hŒ0The VMA whose anonymous page offset is required.”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jLh´MhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jLh´Mhj.ubah}”(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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M hjubjM)�”}”(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.”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MhjubjM)�”}”(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().”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M hjubjM)�”}”(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.”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MhjubjM)�”}”(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:119: ./include/linux/mm.h”h´Mhjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ=pgoff_t vma_end_anon_pgoff (const struct vm_area_struct *vma)”h]”hù)�”}”(hŒ)�”}”(hŒ const struct vm_area_struct *vma”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj\ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj\ubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”j›Œmodname”NŒ classname”Njìjï)�”}”jò]”j-Œc.vma_end_anon_pgoff”†”asbuh1hhj\ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj\ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj\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=hjXubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj h²hh³j2h´M ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjh²hh³j2h´M ubah}”(h]”jah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j2h´M hjh²hubj4)�”}”(hhh]”jM)�”}”(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”…”�”}”(hjh²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:119: ./include/linux/mm.h”h´M hjùh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjh²hh³j2h´M ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj&jHj&jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hj0h]”hŒ Parameters”…”�”}”(hj2h²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:119: ./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)�”}”(hjOh]”hŒ const struct vm_area_struct *vma”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M"hjIubjÉ)�”}”(hhh]”jM)�”}”(hŒ4The VMA whose end anonymous page offset is required.”h]”hŒ4The VMA whose end anonymous page offset is required.”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jdh´M"hjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjIubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jdh´M"hjFubah}”(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:119: ./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 ”…”�”}”(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:119: ./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.”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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:119: ./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:119: ./include/linux/mm.h”h´M*hj*ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”jèŒ reftarget”j.Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒvma_last_anon_pgoff”sbŒc.vma_last_anon_pgoff”†”asbuh1hhj%h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M2ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj%h²hh³jMh´M2ubhÿ)�”}”(hŒvma_last_anon_pgoff”h]”j)�”}”(hjJh]”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³jMh´M2ubj8)�”}”(hŒ"(const struct vm_area_struct *vma)”h]”j>)�”}”(hŒ const struct vm_area_struct *vma”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjwubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjwubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjwubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjwubh)�”}”(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”jèŒ reftarget”j¶Œmodname”NŒ classname”Njìjï)�”}”jò]”jHŒc.vma_last_anon_pgoff”†”asbuh1hhjwubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjwubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjwubj)�”}”(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&]”jjuh1j7hj%h²hh³jMh´M2ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj!h²•hh³jMh´M2ubah}”(h]”jah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jMh´M2hjh²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 ”…”�”}”(hjh²hh³Nh´NubjŽ)�”}”(hŒ**vma**”h]”hŒvma”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubhŒ.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M2hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjh²hh³jMh´M2ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjAjHjAjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjKh]”hŒ Parameters”…”�”}”(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:119: ./include/linux/mm.h”h´M6hjEubj¤)�”}”(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)�”}”(hjjh]”hŒ const struct vm_area_struct *vma”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M4hjdubjÉ)�”}”(hhh]”jM)�”}”(hŒ5The VMA whose last anonymous page offset is required.”h]”hŒ5The VMA whose last anonymous page offset is required.”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jh´M4hj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjdubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jh´M4hjaubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjEubjM)�”}”(hŒ**Description**”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:119: ./include/linux/mm.h”h´M6hjEubjM)�”}”(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.”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M5hjEubjM)�”}”(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:119: ./include/linux/mm.h”h´M8hjEubjM)�”}”(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:119: ./include/linux/mm.h”h´M9hjEubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmmap_action_remap (C function)”Œc.mmap_action_remap”hNt”auh1hÜhjKò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àhjh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MKubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjh²hh³j1h´MKubhÿ)�”}”(hŒmmap_action_remap”h]”j)�”}”(hŒmmap_action_remap”h]”hŒmmap_action_remap”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj@ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjh²hh³j1h´MKubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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\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”jèŒ reftarget”j€Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjFsbŒc.mmap_action_remap”†”asbuh1hhj\ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj\ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj\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=hjXubj>)�”}”(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=hjXubj>)�”}”(hŒunsigned long start_pfn”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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Œlong”h]”hŒlong”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjubj)�”}”(hŒ start_pfn”h]”hŒ start_pfn”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjXubj>)�”}”(hŒunsigned long size”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjpubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjpubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjpubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjpubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjpubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjXubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjh²hh³j1h´MKubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjh²hh³j1h´MKubah}”(h]”jah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j1h´MKhjh²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:119: ./include/linux/mm.h”h´MKhjÓh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjh²hh³j1h´MKubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjîjHjîjI‰jJ‰jK‰uh1híh²hhjKò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:119: ./include/linux/mm.h”h´MOhjò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)�”}”(hjh]”hŒstruct vm_area_desc *desc”…”�”}”(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:119: ./include/linux/mm.h”h´MMhjubjÉ)�”}”(hhh]”jM)�”}”(hŒ/The VMA descriptor for the VMA requiring remap.”h]”hŒ/The VMA descriptor for the VMA requiring remap.”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j,h´MMhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j,h´MMhjubj©)�”}”(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)�”}”(hjPh]”hŒunsigned long start”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MNhjJubjÉ)�”}”(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.”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jeh´MNhjfubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjJubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jeh´MNhjubj©)�”}”(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:119: ./include/linux/mm.h”h´MOhjƒubjÉ)�”}”(hhh]”jM)�”}”(hŒ$The first PFN in the range to remap.”h]”hŒ$The first PFN in the range to remap.”…”�”}”(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´MOhjubj©)�”}”(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)�”}”(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:119: ./include/linux/mm.h”h´MPhj¼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´MPhjØubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j×h´MPhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjòubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mfubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjh²hh³j)h´Mfubhÿ)�”}”(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&]”uh1jhj8ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjh²hh³j)h´Mfubj8)�”}”(hŒ4(struct vm_area_desc *desc, unsigned long start_pfn)”h]”(j>)�”}”(hŒstruct vm_area_desc *desc”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjTubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjTubh)�”}”(hhh]”j)�”}”(hŒ vm_area_desc”h]”hŒ vm_area_desc”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjsubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jxŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj>sbŒc.mmap_action_remap_full”†”asbuh1hhjTubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjTubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjTubj)�”}”(hŒdesc”h]”hŒdesc”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjTubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjPubj>)�”}”(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”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjPubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjh²hh³j)h´Mfubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjh²hh³j)h´Mfubah}”(h]”jah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j)h´Mfhjh²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:119: ./include/linux/mm.h”h´Mfhj)h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjh²hh³j)h´Mfubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjDjHjDjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjNh]”hŒ Parameters”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjLubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MjhjHubj¤)�”}”(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)�”}”(hjmh]”hŒstruct vm_area_desc *desc”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjkubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MhhjgubjÉ)�”}”(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´Mhhjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‚h´Mhhjdubj©)�”}”(hŒ@``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:119: ./include/linux/mm.h”h´Mjhj ubjÉ)�”}”(hhh]”jM)�”}”(hŒ$The first PFN in the range to remap.”h]”hŒ$The first PFN in the range to remap.”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mihj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j»h´Mjhjdubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjHubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ mmap_action_ioremap (C function)”Œc.mmap_action_ioremap”hNt”auh1hÜhjKò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”…”�”}”(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:119: ./include/linux/mm.h”h´Mrubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjüh²hh³jh´Mrubhÿ)�”}”(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&]”uh1jhjubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjüh²hh³jh´Mrubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj9ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj9ubh)�”}”(hhh]”j)�”}”(hŒ vm_area_desc”h]”hŒ vm_area_desc”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjXubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j]Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj#sbŒc.mmap_action_ioremap”†”asbuh1hhj9ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj9ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj9ubj)�”}”(hŒdesc”h]”hŒdesc”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj5ubj>)�”}”(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=hj5ubj>)�”}”(hŒunsigned long start_pfn”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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Œ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Œ start_pfn”h]”hŒ start_pfn”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjüubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj5ubj>)�”}”(hŒunsigned long size”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjMubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjMubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjMubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjMubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjMubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj5ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjüh²hh³jh´Mrubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjøh²hh³jh´Mrubah}”(h]”jóah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jh´Mrhjõ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.”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mrhj°h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjõh²hh³jh´Mrubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjËjHjËjI‰jJ‰jK‰uh1híh²hhjKò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:119: ./include/linux/mm.h”h´MvhjÏ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:119: ./include/linux/mm.h”h´Mthjî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´Mthj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjîubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j h´Mthjë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:119: ./include/linux/mm.h”h´Muhj'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.”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jBh´MuhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jBh´Muhjëubj©)�”}”(hŒA``unsigned long start_pfn`` The first PFN in the range to remap. ”h]”(j¯)�”}”(hŒ``unsigned long start_pfn``”h]”jS)�”}”(hjfh]”hŒunsigned long start_pfn”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mvhj`ubjÉ)�”}”(hhh]”jM)�”}”(hŒ$The first PFN in the range to remap.”h]”hŒ$The first PFN in the range to remap.”…”�”}”(hjh²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Œ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)�”}”(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:119: ./include/linux/mm.h”h´Mwhj™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´Mwhjµubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j´h´Mwhjëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÏubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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:119: ./include/linux/mm.h”h´M„ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjôh²hh³jh´M„ubhÿ)�”}”(hŒmmap_action_ioremap_full”h]”j)�”}”(hŒmmap_action_ioremap_full”h]”hŒmmap_action_ioremap_full”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjôh²hh³jh´M„ubj8)�”}”(hŒ4(struct vm_area_desc *desc, unsigned long start_pfn)”h]”(j>)�”}”(hŒstruct vm_area_desc *desc”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj1ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj1ubh)�”}”(hhh]”j)�”}”(hŒ vm_area_desc”h]”hŒ vm_area_desc”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjPubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jUŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjsbŒc.mmap_action_ioremap_full”†”asbuh1hhj1ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj1ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj1ubj)�”}”(hŒdesc”h]”hŒdesc”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj1ubeh}”(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-ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjô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Œ^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:119: ./include/linux/mm.h”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²hhjKò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:119: ./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)�”}”(hjJ h]”hŒstruct vm_area_desc *desc”…”�”}”(hjL h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjH ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M†hjD ubjÉ)�”}”(hhh]”jM)�”}”(hŒ/The VMA descriptor for the VMA requiring remap.”h]”hŒ/The VMA descriptor for the VMA requiring remap.”…”�”}”(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Œ@``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:119: ./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.”…”�”}”(hjœ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./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ˆhjA ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj% ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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:119: ./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�ubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj!ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'!h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj!ubh)�”}”(hhh]”j)�”}”(hŒ vm_area_desc”h]”hŒ vm_area_desc”…”�”}”(hj8!h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj5!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j:!Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj!sbŒc.mmap_action_simple_ioremap”†”asbuh1hhj!ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjX!h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj!ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjf!h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj!ubj)�”}”(hŒdesc”h]”hŒdesc”…”�”}”(hjs!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”jèŒ reftarget”j‘!Œmodname”NŒ classname”Njìjï)�”}”jò]”jT!Œc.mmap_action_simple_ioremap”†”asbuh1hhjˆ!ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­!h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjˆ!ubj)�”}”(hŒstart_phys_addr”h]”hŒstart_phys_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 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&]”jjuh1j7hjÙ 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.”…”�”}”(hj6"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M�hj3"h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÒ h²hh³jë h´M�ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjN"jHjN"jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjX"h]”hŒ Parameters”…”�”}”(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:119: ./include/linux/mm.h”h´M”hjR"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)�”}”(hjw"h]”hŒstruct vm_area_desc *desc”…”�”}”(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:119: ./include/linux/mm.h”h´M“hjq"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Èhjq"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŒ"h´M“hjn"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)�”}”(hj°"h]”hŒphys_addr_t start_phys_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:119: ./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.”…”�”}”(hjÉ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÅ"h´M”hjÆ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjª"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÅ"h´M”hjn"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:119: ./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•hjn"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjR"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:119: ./include/linux/mm.h”h´M—hjR"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:119: ./include/linux/mm.h”h´M—hjR"ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hji#h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhje#h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”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Œ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&]”uh1jhj†#ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhje#h²hh³jw#h´M¦ubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¦#h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¢#ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³#h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¢#ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jÆ#Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjŒ#sbŒc.mmap_action_map_kernel_pages”†”asbuh1hhj¢#ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjä#h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¢#ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjò#h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¢#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”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”…”�”}”(hj4$h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj$ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjB$h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj$ubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjP$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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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$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”jèŒ reftarget”j‰$Œmodname”NŒ classname”Njìjï)�”}”jò]”jà#Œc.mmap_action_map_kernel_pages”†”asbuh1hhje$ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥$h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhje$ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj³$h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhje$ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÀ$h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhje$ubj)�”}”(hŒpages”h]”hŒpages”…”�”}”(hjÍ$h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhje$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjž#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=hjž#ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hje#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Œ¦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 ”…”�”}”(hjH%h²hh³Nh´NubjŽ)�”}”(hŒ**num**”h]”hŒnum”…”�”}”(hjP%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjH%ubhŒ kernel pages contained in the ”…”�”}”(hjH%h²hh³Nh´NubjŽ)�”}”(hŒ **pages**”h]”hŒpages”…”�”}”(hjb%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjH%ubhŒ@ array should be mapped to userland starting at virtual address ”…”�”}”(hjH%h²hh³Nh´NubjŽ)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hjt%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjH%ubhŒ.”…”�”}”(hjH%h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M¦hjE%h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj^#h²hh³jw#h´M¦ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj–%jHj–%jI‰jJ‰jK‰uh1híh²hhjKò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** array.”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:119: ./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&]”uh1jRhj½%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M©hj¹%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Èhj¹%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÔ%h´M©hj¶%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:119: ./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ªhj¶%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)�”}”(hj1&h]”hŒstruct page **pages”…”�”}”(hj3&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:119: ./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.”…”�”}”(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ŒH``unsigned long nr_pages`` The number of entries in the **pages** array.”h]”(j¯)�”}”(hŒ``unsigned long nr_pages``”h]”jS)�”}”(hjj&h]”hŒunsigned long nr_pages”…”�”}”(hjl&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjh&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M­hjd&ubjÉ)�”}”(hhh]”jM)�”}”(hŒ-The number of entries in the **pages** array.”h]”(hŒThe number of entries 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.”…”�”}”(hjƒ&h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M¬hj€&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjd&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ƒhjKò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ÜhjKò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:119: ./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_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´M¼ubj8)�”}”(hŒ0(struct vm_area_desc *desc, struct page **pages)”h]”(j>)�”}”(hŒstruct vm_area_desc *desc”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj'ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 'h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj'ubh)�”}”(hhh]”j)�”}”(hŒ vm_area_desc”h]”hŒ vm_area_desc”…”�”}”(hj1'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj.'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j3'Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjù&sbŒ#c.mmap_action_map_kernel_pages_full”†”asbuh1hhj'ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQ'h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj'ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj_'h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj'ubj)�”}”(hŒdesc”h]”hŒdesc”…”�”}”(hjl'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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj…'h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj�'ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’'h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�'ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj£'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj 'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j¥'Œmodname”NŒ classname”Njìjï)�”}”jò]”jM'Œ#c.mmap_action_map_kernel_pages_full”†”asbuh1hhj�'ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁ'h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�'ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÏ'h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj�'ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÜ'h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj�'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 'ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÒ&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 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:119: ./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&]”jFjAjGja(jHja(jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjk(h]”hŒ Parameters”…”�”}”(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:119: ./include/linux/mm.h”h´MÀhje(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&]”uh1jRhjˆ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M¿hj„(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Èhj„(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŸ(h´M¿hj�(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:119: ./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Àhj�(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³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MÂhje(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:119: ./include/linux/mm.h”h´MÁhje(ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒrange_is_subset (C function)”Œc.range_is_subset”hNt”auh1hÜhjKò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”…”�”}”(hjg)h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjc)h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju)h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjc)h²hh³jt)h´Mubhÿ)�”}”(hŒrange_is_subset”h]”j)�”}”(hŒrange_is_subset”h]”hŒrange_is_subset”…”�”}”(hj‡)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjƒ)ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjc)h²hh³jt)h´Mubj8)�”}”(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”…”�”}”(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_start”h]”hŒ outer_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 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=hj›)ubj>)�”}”(hŒunsigned long inner_start”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Œlong”h]”hŒlong”…”�”}”(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Œ inner_start”h]”hŒ inner_start”…”�”}”(hj}*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjA*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj›)ubj>)�”}”(hŒunsigned long inner_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Œ inner_end”h]”hŒ inner_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&]”jjuh1j7hjc)h²hh³jt)h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj_)h²hh³jt)h´Mubah}”(h]”jZ)ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jt)h´Mhj\)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:119: ./include/linux/mm.h”h´Mhjõ*h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj\)h²hh³jt)h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj+jHj+jI‰jJ‰jK‰uh1híh²hhjKò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:119: ./include/linux/mm.h”h´M hj+ubj¤)�”}”(hhh]”(j©)�”}”(hŒ<``unsigned long outer_start`` The start of the outer range. ”h]”(j¯)�”}”(hŒ``unsigned long outer_start``”h]”jS)�”}”(hj9+h]”hŒunsigned long outer_start”…”�”}”(hj;+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj7+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M hj3+ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe start of the outer range.”h]”hŒThe start of the outer range.”…”�”}”(hjR+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jN+h´M hjO+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj3+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jN+h´M hj0+ubj©)�”}”(hŒB``unsigned long outer_end`` The exclusive end of the outer range. ”h]”(j¯)�”}”(hŒ``unsigned long outer_end``”h]”jS)�”}”(hjr+h]”hŒunsigned long outer_end”…”�”}”(hjt+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjp+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M hjl+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³j‡+h´M hjˆ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjl+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‡+h´M hj0+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&]”uh1jRhj©+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M hj¥+ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe start of the inner range.”h]”hŒThe start of the inner 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 hj0+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:119: ./include/linux/mm.h”h´M hjÞ+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´M hjú+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÞ+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jù+h´M hj0+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:119: ./include/linux/mm.h”h´Mhj+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”…”�”}”(hj9,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj5,ubhŒP if [inner_start, inner_end) is a subset of [outer_start, outer_end), otherwise ”…”�”}”(hj5,h²hh³Nh´NubjS)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjK,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj5,ub•œhŒ.”…”�”}”(hj5,h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mhj+ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒrange_in_vma (C function)”Œc.range_in_vma”hNt”auh1hÜhjKò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”…”�”}”(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:119: ./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Œ range_in_vma”h]”j)�”}”(hŒ range_in_vma”h]”hŒ range_in_vma”…”�”}”(hj¤,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ,ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj€,h²hh³j‘,h´Mubj8)�”}”(hŒJ(const struct vm_area_struct *vma, unsigned long start, unsigned long end)”h]”(j>)�”}”(hŒ const struct vm_area_struct *vma”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÛ,h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¼,ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjè,h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¼,ubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jû,Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj¦,sbŒc.range_in_vma”†”asbuh1hhj¼,ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¼,ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj'-h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¼,ubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hj4-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”…”�”}”(hjM-h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjI-ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[-h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjI-ubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hji-h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjI-ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjw-h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjI-ubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj…-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjI-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&]”jjuh1j7hj€,h²hh³j‘,h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj|,h²hh³j‘,h´Mubah}”(h]”jw,ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j‘,h´Mhjy,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:119: ./include/linux/mm.h”h´Mhjý-h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjy,h²hh³j‘,h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj<.jHj<.jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjF.h]”hŒ Parameters”…”�”}”(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:119: ./include/linux/mm.h”h´Mhj@.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)�”}”(hje.h]”hŒ const struct vm_area_struct *vma”…”�”}”(hjg.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjc.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mhj_.ubjÉ)�”}”(hhh]”jM)�”}”(hŒvm_start**, **vma->vm_end**), ``false`` otherwise.”h]”(jS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjP/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjL/ubhŒ if [”…”�”}”(hjL/h²hh³Nh´NubjŽ)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hjb/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjL/ubhŒ, ”…”�”}”(hjL/h²hh³Nh´NubjŽ)�”}”(hŒ**end**”h]”hŒend”…”�”}”(hjt/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjL/ubhŒ) is a subset of [”…”�”}”(hjL/h²hh³Nh´NubjŽ)�”}”(hŒ**vma->vm_start**”h]”hŒ vma->vm_start”…”�”}”(hj†/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjL/ubhŒ, ”…”�”}”(hjL/h²hh³Nh´NubjŽ)�”}”(hŒ**vma->vm_end**”h]”hŒ vma->vm_end”…”�”}”(hj˜/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjL/ubhŒ), ”…”�”}”(hjL/h²hh³Nh´NubjS)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjª/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjL/ubhŒ otherwise.”…”�”}”(hjL/h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´Mhj@.ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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:119: ./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_in_vma_desc”h]”j)�”}”(hŒrange_in_vma_desc”h]”hŒrange_in_vma_desc”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÿ/ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjß/h²hh³jð/h´M,ubj8)�”}”(hŒI(const struct vm_area_desc *desc, unsigned long start, unsigned long end)”h]”(j>)�”}”(hŒconst struct vm_area_desc *desc”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj:0h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj0ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjG0h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj0ubh)�”}”(hhh]”j)�”}”(hŒ vm_area_desc”h]”hŒ vm_area_desc”…”�”}”(hjX0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjU0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jZ0Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj0sbŒc.range_in_vma_desc”†”asbuh1hhj0ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjx0h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj0ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj†0h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj0ubj)�”}”(hŒdesc”h]”hŒdesc”…”�”}”(hj“0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj0ubj>)�”}”(hŒunsigned long start”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¬0h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj¨0ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjº0h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¨0ubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÈ0h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj¨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Œunsigned long end”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjý0h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjù0ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 1h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjù0ubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjù0ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'1h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjù0ubj)�”}”(hŒend”h]”hŒend”…”�”}”(hj51h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjù0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj0ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjß/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Œhis the specified [**start**, **end**) range a subset of the VMA described by **desc**, a VMA descriptor?”h]”(hŒis the specified [”…”�”}”(hj_1h²hh³Nh´NubjŽ)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hjg1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj_1ubhŒ, ”…”�”}”(hj_1h²hh³Nh´NubjŽ)�”}”(hŒ**end**”h]”hŒend”…”�”}”(hjy1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj_1ubhŒ)) range a subset of the VMA described by ”…”�”}”(hj_1h²hh³Nh´NubjŽ)�”}”(hŒ**desc**”h]”hŒdesc”…”�”}”(hj‹1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj_1ubhŒ, a VMA descriptor?”…”�”}”(hj_1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M,hj\1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjØ/h²hh³jð/h´M,ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj­1jHj­1jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hj·1h]”hŒ Parameters”…”�”}”(hj¹1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjµ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M0hj±1ubj¤)�”}”(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Ö1h]”hŒconst struct vm_area_desc *desc”…”�”}”(hjØ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÔ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M.hjÐ1ubjÉ)�”}”(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ï1h²hh³Nh´NubjŽ)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hj÷1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjï1ubhŒ, ”…”�”}”(hjï1h²hh³Nh´NubjŽ)�”}”(hŒ**end**”h]”hŒend”…”�”}”(hj 2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjï1ubhŒ).”…”�”}”(hjï1h²hh³Nh´Nubeh}”(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ŒA``unsigned long start`` The start of the range we wish to check. ”h]”(j¯)�”}”(hŒ``unsigned long start``”h]”jS)�”}”(hj32h]”hŒunsigned long start”…”�”}”(hj52h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj12ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M/hj-2ubjÉ)�”}”(hhh]”jM)�”}”(hŒ(The start of the range we wish to check.”h]”hŒ(The start of the range we wish to check.”…”�”}”(hjL2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jH2h´M/hjI2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj-2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jH2h´M/hjÍ1ubj©)�”}”(hŒG``unsigned long end`` The exclusive end of the range we wish to check. ”h]”(j¯)�”}”(hŒ``unsigned long end``”h]”jS)�”}”(hjl2h]”hŒunsigned long end”…”�”}”(hjn2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M0hjf2ubjÉ)�”}”(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.”…”�”}”(hj…2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�2h´M0hj‚2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjf2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�2h´M0hjÍ1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj±1ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj§2h]”hŒReturn”…”�”}”(hj©2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¥2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M2hj±1ubjM)�”}”(hŒf``true`` if [**start**, **end**) is a subset of [**desc->start**, **desc->end**), ``false`` otherwise.”h]”(jS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjÁ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj½2ubhŒ if [”…”�”}”(hj½2h²hh³Nh´NubjŽ)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hjÓ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj½2ubhŒ, ”…”�”}”(hj½2h²hh³Nh´NubjŽ)�”}”(hŒ**end**”h]”hŒend”…”�”}”(hjå2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj½2ubhŒ) is a subset of [”…”�”}”(hj½2h²hh³Nh´NubjŽ)�”}”(hŒ**desc->start**”h]”hŒ desc->start”…”�”}”(hj÷2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj½2ubhŒ, ”…”�”}”hj½2sbjŽ)�”}”(hŒ **desc->end**”h]”hŒ desc->end”…”�”}”(hj 3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj½2ubhŒ), ”…”�”}”(hj½2h²hh³Nh´NubjS)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj½2ubhŒ otherwise.”…”�”}”(hj½2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M2hj±1ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒclear_pages (C function)”Œ c.clear_pages”hNt”auh1hÜhjKò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”…”�”}”(hjT3h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjP3h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M…ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc3h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjP3h²hh³jb3h´M…ubhÿ)�”}”(hŒ clear_pages”h]”j)�”}”(hŒ clear_pages”h]”hŒ clear_pages”…”�”}”(hju3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjq3ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjP3h²hh³jb3h´M…ubj8)�”}”(hŒ!(void *addr, unsigned int npages)”h]”(j>)�”}”(hŒ void *addr”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‘3h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj�3ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ3h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�3ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj­3h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj�3ubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjº3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj‰3ubj>)�”}”(hŒunsigned int npages”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÓ3h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÏ3ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjá3h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÏ3ubjá)�”}”(hŒint”h]”hŒint”…”�”}”(hjï3h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÏ3ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý3h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÏ3ubj)�”}”(hŒnpages”h]”hŒnpages”…”�”}”(hj 4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÏ3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj‰3ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjP3h²hh³jb3h´M…ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjL3h²hh³jb3h´M…ubah}”(h]”jG3ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jb3h´M…hjI3h²hubj4)�”}”(hhh]”jM)�”}”(hŒ+clear a page range for kernel-internal use.”h]”hŒ+clear a page range for kernel-internal use.”…”�”}”(hj54h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M…hj24h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjI3h²hh³jb3h´M…ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjM4jHjM4jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjW4h]”hŒ Parameters”…”�”}”(hjY4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjU4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M‰hjQ4ubj¤)�”}”(hhh]”(j©)�”}”(hŒ``void *addr`` start address ”h]”(j¯)�”}”(hŒ``void *addr``”h]”jS)�”}”(hjv4h]”hŒ void *addr”…”�”}”(hjx4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjt4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M†hjp4ubjÉ)�”}”(hhh]”jM)�”}”(hŒ start address”h]”hŒ start address”…”�”}”(hj�4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‹4h´M†hjŒ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjp4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‹4h´M†hjm4ubj©)�”}”(hŒ(``unsigned int npages`` number of pages ”h]”(j¯)�”}”(hŒ``unsigned int npages``”h]”jS)�”}”(hj¯4h]”hŒunsigned int npages”…”�”}”(hj±4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj­4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M‡hj©4ubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages”h]”hŒnumber of pages”…”�”}”(hjÈ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÄ4h´M‡hjÅ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj©4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÄ4h´M‡hjm4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjQ4ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjê4h]”hŒ Description”…”�”}”(hjì4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjè4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M‰hjQ4ubjM)�”}”(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.”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´MˆhjQ4ubjM)�”}”(hŒ&Does absolutely no exception handling.”h]”hŒ&Does absolutely no exception handling.”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M‹hjQ4ubjM)�”}”(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.”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M�hjQ4ubjM)�”}”(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-5h²hh³Nh´NubjŽ)�”}”(hŒ **npages**”h]”hŒnpages”…”�”}”(hj55h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj-5ubhŒ1 to no more than PROCESS_PAGES_NON_PREEMPT_BATCH.”…”�”}”(hj-5h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:119: ./include/linux/mm.h”h´M’hjQ4ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_ref_count (C function)”Œc.folio_ref_count”hNt”auh1hÜhjKò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”…”�”}”(hjn5h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjj5h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./include/linux/page_ref.h”h´KGubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}5h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjj5h²hh³j|5h´KGubhÿ)�”}”(hŒfolio_ref_count”h]”j)�”}”(hŒfolio_ref_count”h]”hŒfolio_ref_count”…”�”}”(hj�5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‹5ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjj5h²hh³j|5h´KGubj8)�”}”(hŒ(const struct folio *folio)”h]”j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hj«5h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj§5ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸5h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj§5ubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÆ5h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj§5ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓ5h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj§5ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjä5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjá5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jæ5Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj‘5sbŒc.folio_ref_count”†”asbuh1hhj§5ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj§5ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj§5ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj§5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj£5ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjj5h²hh³j|5h´KGubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjf5h²hh³j|5h´KGubah}”(h]”ja5ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j|5h´KGhjc5h²hubj4)�”}”(hhh]”jM)�”}”(hŒ"The reference count on this folio.”h]”hŒ"The reference count on this folio.”…”�”}”(hjI6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./include/linux/page_ref.h”h´KGhjF6h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjc5h²hh³j|5h´KGubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGja6jHja6jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjk6h]”hŒ Parameters”…”�”}”(hjm6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hji6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./include/linux/page_ref.h”h´KKhje6ubj¤)�”}”(hhh]”j©)�”}”(hŒ)``const struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjŠ6h]”hŒconst struct folio *folio”…”�”}”(hjŒ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjˆ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./include/linux/page_ref.h”h´KHhj„6ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hj£6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jŸ6h´KHhj 6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj„6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŸ6h´KHhj�6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hje6ubjM)�”}”(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³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./include/linux/page_ref.h”h´KJhje6ubjM)�”}”(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Û6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./include/linux/page_ref.h”h´KIhje6ubjM)�”}”(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ê6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./include/linux/page_ref.h”h´KOhje6ubj^)�”}”(hhh]”(jc)�”}”(hŒ Each reference from a page table”h]”jM)�”}”(hjþ6h]”hŒ Each reference from a page table”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./include/linux/page_ref.h”h´KShjü6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjù6ubjc)�”}”(hŒThe page cache”h]”jM)�”}”(hj7h]”hŒThe page cache”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./include/linux/page_ref.h”h´KThj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjù6ubjc)�”}”(hŒFilesystem private data”h]”jM)�”}”(hj.7h]”hŒFilesystem private data”…”�”}”(hj07h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./include/linux/page_ref.h”h´KUhj,7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjù6ubjc)�”}”(hŒ The LRU list”h]”jM)�”}”(hjF7h]”hŒ The LRU list”…”�”}”(hjH7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./include/linux/page_ref.h”h´KVhjD7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjù6ubjc)�”}”(hŒPipes”h]”jM)�”}”(hj^7h]”hŒPipes”…”�”}”(hj`7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./include/linux/page_ref.h”h´KWhj\7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjù6ubjc)�”}”(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”…”�”}”(hjx7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./include/linux/page_ref.h”h´KXhjt7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjù6ubeh}”(h]”h ]”h"]”h$]”h&]”j‚jƒuh1j]h³j 7h´KShje6ubjM)�”}”(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).”…”�”}”(hj“7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./include/linux/page_ref.h”h´KZhje6ubjM)�”}”(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³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./include/linux/page_ref.h”h´Kfhje6ubjM)�”}”(hŒ'The number of references to this folio.”h]”hŒ'The number of references to this folio.”…”�”}”(hjº7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./include/linux/page_ref.h”h´Kghje6ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_try_get (C function)”Œc.folio_try_get”hNt”auh1hÜhjKò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é7h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjå7h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./include/linux/page_ref.h”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷7h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjå7h²hh³jö7h´Mubhÿ)�”}”(hŒ folio_try_get”h]”j)�”}”(hŒ folio_try_get”h]”hŒ folio_try_get”…”�”}”(hj 8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj8ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjå7h²hh³jö7h´Mubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj%8h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj!8ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj28h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj!8ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjC8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj@8ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jE8Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj 8sbŒc.folio_try_get”†”asbuh1hhj!8ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc8h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj!8ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjq8h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj!8ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj~8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj!8ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj8ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjå7h²hh³jö7h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjá7h²hh³jö7h´Mubah}”(h]”jÜ7ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jö7h´MhjÞ7h²hubj4)�”}”(hhh]”jM)�”}”(hŒ,Attempt to increase the refcount on a folio.”h]”hŒ,Attempt to increase the refcount on a folio.”…”�”}”(hj¨8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./include/linux/page_ref.h”h´Mhj¥8h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÞ7h²hh³jö7h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÀ8jHjÀ8jI‰jJ‰jK‰uh1híh²hhjKò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Ê8h]”hŒ Parameters”…”�”}”(hjÌ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÈ8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./include/linux/page_ref.h”h´M hjÄ8ubj¤)�”}”(hhh]”j©)�”}”(hŒ#``struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjé8h]”hŒstruct folio *folio”…”�”}”(hjë8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjç8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./include/linux/page_ref.h”h´M hjã8ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio.”h]”hŒ The folio.”…”�”}”(hj9h²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à8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÄ8ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj$9h]”hŒ Description”…”�”}”(hj&9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj"9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./include/linux/page_ref.h”h´M hjÄ8ubjM)�”}”(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:9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./include/linux/page_ref.h”h´M hjÄ8ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjK9h]”hŒReturn”…”�”}”(hjM9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjI9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./include/linux/page_ref.h”h´MhjÄ8ubjM)�”}”(hŒ9True if the reference count was successfully incremented.”h]”hŒ9True if the reference count was successfully incremented.”…”�”}”(hja9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:121: ./include/linux/page_ref.h”h´MhjÄ8ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒzone_is_contiguous (C function)”Œc.zone_is_contiguous”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ1bool zone_is_contiguous (const struct zone *zone)”h]”hù)�”}”(hŒ0bool zone_is_contiguous(const struct zone *zone)”h]”(já)�”}”(hj½h]”hŒbool”…”�”}”(hj�9h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjŒ9h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´M¬ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjž9h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjŒ9h²hh³j�9h´M¬ubhÿ)�”}”(hŒzone_is_contiguous”h]”j)�”}”(hŒzone_is_contiguous”h]”hŒzone_is_contiguous”…”�”}”(hj°9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¬9ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjŒ9h²hh³j�9h´M¬ubj8)�”}”(hŒ(const struct zone *zone)”h]”j>)�”}”(hŒconst struct zone *zone”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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È9ubh)�”}”(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”jèŒ reftarget”j:Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj²9sbŒc.zone_is_contiguous”†”asbuh1hhjÈ9ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%:h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÈ9ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj3:h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÈ9ubj)�”}”(hŒzone”h]”hŒzone”…”�”}”(hj@:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÈ9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÄ9ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjŒ9h²hh³j�9h´M¬ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjˆ9h²hh³j�9h´M¬ubah}”(h]”jƒ9ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j�9h´M¬hj…9h²hubj4)�”}”(hhh]”jM)�”}”(hŒ!test whether a zone is contiguous”h]”hŒ!test whether a zone is contiguous”…”�”}”(hjj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´M¬hjg:h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj…9h²hh³j�9h´M¬ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj‚:jHj‚:jI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hX®**Parameters** ``const struct zone *zone`` the zone to test. **Description** In a contiguous zone, it is valid to call pfn_to_page() on any PFN in the spanned zone without requiring pfn_valid() or pfn_to_online_page() checks. Note that missing synchronization with memory offlining makes any PFN traversal prone to races. ZONE_DEVICE zones are always marked non-contiguous. **Return** true if contiguous, 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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´M°hj†:ubj¤)�”}”(hhh]”j©)�”}”(hŒ.``const struct zone *zone`` the zone to test. ”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:122: ./include/linux/mmzone.h”h´M­hj¥:ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe zone to test.”h]”hŒthe zone 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¢: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:122: ./include/linux/mmzone.h”h´M¯hj†:ubjM)�”}”(hŒ”In a contiguous zone, it is valid to call pfn_to_page() on any PFN in the spanned zone without requiring pfn_valid() or pfn_to_online_page() checks.”h]”hŒ”In a contiguous zone, it is valid to call pfn_to_page() on any PFN in the spanned zone without requiring pfn_valid() or pfn_to_online_page() checks.”…”�”}”(hjü:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´M®hj†:ubjM)�”}”(hŒ_Note that missing synchronization with memory offlining makes any PFN traversal prone to races.”h]”hŒ_Note that missing synchronization with memory offlining makes any PFN traversal prone to races.”…”�”}”(hj ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´M±hj†:ubjM)�”}”(hŒ3ZONE_DEVICE zones are always marked non-contiguous.”h]”hŒ3ZONE_DEVICE zones are always marked non-contiguous.”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./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:122: ./include/linux/mmzone.h”h´M¶hj†:ubjM)�”}”(hŒ$true if contiguous, otherwise false.”h]”hŒ$true if contiguous, otherwise false.”…”�”}”(hjA;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´M·hj†:ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒis_highmem (C function)”Œ c.is_highmem”hNt”auh1hÜhjKò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”…”�”}”(hjp;h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjl;h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”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ÿ)�”}”(hŒ is_highmem”h]”j)�”}”(hŒ is_highmem”h]”hŒ is_highmem”…”�”}”(hj‘;h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�;ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjl;h²hh³j~;h´Müubj8)�”}”(hŒ(const struct zone *zone)”h]”j>)�”}”(hŒconst struct zone *zone”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÈ;h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj©;ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕ;h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj©;ubh)�”}”(hhh]”j)�”}”(hŒzone”h]”hŒzone”…”�”}”(hjæ;h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjã;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jè;Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj“;sbŒ c.is_highmem”†”asbuh1hhj©;ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj©;ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj©;ubj)�”}”(hŒzone”h]”hŒzone”…”�”}”(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&]”jjuh1j7hjl;h²hh³j~;h´Müubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjh;h²hh³j~;h´Müubah}”(h]”jc;ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j~;h´Mühje;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.”…”�”}”(hjK<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´MühjH<h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hje;h²hh³j~;h´Müubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjc<jHjc<jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjm<h]”hŒ Parameters”…”�”}”(hjo<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjk<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´Mhjg<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:122: ./include/linux/mmzone.h”h´Mÿhj†<ubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to struct zone variable”h]”hŒpointer to struct zone variable”…”�”}”(hj¥<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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£hjg<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:122: ./include/linux/mmzone.h”h´Mhjg<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:122: ./include/linux/mmzone.h”h´Mhjg<ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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:122: ./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²hhjKòh³Nh´NubjM)�”}”(hŒ!``for_each_online_pgdat (pgdat)``”h]”jS)�”}”(hjB=h]”hŒfor_each_online_pgdat (pgdat)”…”�”}”(hjD=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:122: ./include/linux/mmzone.h”h´M'hjKò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:122: ./include/linux/mmzone.h”h´M%hjX=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jj=h´M%hjKòh²hubj„)�”}”(hŒ;**Parameters** ``pgdat`` pointer to a pg_data_t variable”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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´M)hjq=ubj¤)�”}”(hhh]”j©)�”}”(hŒ)``pgdat`` pointer to a pg_data_t variable”h]”(j¯)�”}”(hŒ ``pgdat``”h]”jS)�”}”(hj–=h]”hŒpgdat”…”�”}”(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:122: ./include/linux/mmzone.h”h´M+hj�=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:122: ./include/linux/mmzone.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£hjq=ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfor_each_zone (C macro)”Œc.for_each_zone”hNt”auh1hÜhjKò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:122: ./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²hhjKò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:122: ./include/linux/mmzone.h”h´M/hjKò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:122: ./include/linux/mmzone.h”h´M-hj<>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jN>h´M-hjKò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�hjY>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´M1hjU>ubj¤)�”}”(hhh]”j©)�”}”(hŒ)``zone`` pointer to struct zone variable ”h]”(j¯)�”}”(hŒ``zone``”h]”jS)�”}”(hjz>h]”hŒzone”…”�”}”(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:122: ./include/linux/mmzone.h”h´M.hjt>ubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to struct zone variable”h]”hŒpointer to struct zone variable”…”�”}”(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.hjq>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³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´M0hjU>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:122: ./include/linux/mmzone.h”h´M/hjU>ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ next_zones_zonelist (C function)”Œc.next_zones_zonelist”hNt”auh1hÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjú>h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjö>h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´MTubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjö>h²hh³j?h´MTubh)�”}”(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”jèŒ reftarget”j?Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒnext_zones_zonelist”sbŒc.next_zones_zonelist”†”asbuh1hhjö>h²hh³j?h´MTubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:?h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjö>h²hh³j?h´MTubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjH?h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjö>h²hh³j?h´MTubhÿ)�”}”(hŒnext_zones_zonelist”h]”j)�”}”(hj7?h]”hŒnext_zones_zonelist”…”�”}”(hjY?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjU?ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjö>h²hh³j?h´MTubj8)�”}”(hŒL(struct zoneref *z, enum zone_type highest_zoneidx, const nodemask_t *nodes)”h]”(j>)�”}”(hŒstruct zoneref *z”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjt?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?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”jèŒ reftarget”j”?Œmodname”NŒ classname”Njìjï)�”}”jò]”j5?Œc.next_zones_zonelist”†”asbuh1hhjp?ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°?h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjp?ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¾?h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjp?ubj)�”}”(hŒz”h]”hŒz”…”�”}”(hjË?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjp?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjl?ubj>)�”}”(hŒenum zone_type highest_zoneidx”h]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(hjä?h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjà?ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñ?h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjà?ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j@Œmodname”NŒ classname”Njìjï)�”}”jò]”j5?Œ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=hjl?ubj>)�”}”(hŒconst nodemask_t *nodes”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjG@h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjC@ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjT@h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjC@ubh)�”}”(hhh]”j)�”}”(hŒ nodemask_t”h]”hŒ nodemask_t”…”�”}”(hje@h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjb@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jg@Œmodname”NŒ classname”Njìjï)�”}”jò]”j5?Œc.next_zones_zonelist”†”asbuh1hhjC@ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒ@h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjC@ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj‘@h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjC@ubj)�”}”(hŒnodes”h]”hŒnodes”…”�”}”(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&]”jjuh1j7hjö>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Œ‚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:122: ./include/linux/mmzone.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²hhjKò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:122: ./include/linux/mmzone.h”h´MXhjä@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 Ah]”hŒstruct zoneref *z”…”�”}”(hj Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´MUhjAubjÉ)�”}”(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"Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jAh´MUhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjAubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jAh´MUhjAubj©)�”}”(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)�”}”(hjBAh]”hŒenum zone_type highest_zoneidx”…”�”}”(hjDAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj@Aubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´MVhjBubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jCBŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒfirst_zones_zonelist”sbŒc.first_zones_zonelist”†”asbuh1hhjBh²hh³j/Bh´Mlubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbBh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjBh²hh³j/Bh´Mlubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjpBh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjBh²hh³j/Bh´Mlubhÿ)�”}”(hŒfirst_zones_zonelist”h]”j)�”}”(hj_Bh]”hŒfirst_zones_zonelist”…”�”}”(hj�Bh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj}Bubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjBh²hh³j/Bh´Mlubj8)�”}”(hŒT(struct zonelist *zonelist, enum zone_type highest_zoneidx, const nodemask_t *nodes)”h]”(j>)�”}”(hŒstruct zonelist *zonelist”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjœBh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj˜Bubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©Bh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj˜Bubh)�”}”(hhh]”j)�”}”(hŒzonelist”h]”hŒzonelist”…”�”}”(hjºBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj·Bubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j¼BŒmodname”NŒ classname”Njìjï)�”}”jò]”j]BŒc.first_zones_zonelist”†”asbuh1hhj˜Bubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØBh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj˜Bubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjæBh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj˜Bubj)�”}”(hŒzonelist”h]”hŒzonelist”…”�”}”(hjóBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj˜Bubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj”Bubj>)�”}”(hŒenum zone_type highest_zoneidx”h]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(hj Ch²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjCubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjCubh)�”}”(hhh]”j)�”}”(hŒ zone_type”h]”hŒ zone_type”…”�”}”(hj*Ch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj'Cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j,CŒmodname”NŒ classname”Njìjï)�”}”jò]”j]BŒc.first_zones_zonelist”†”asbuh1hhjCubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHCh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjCubj)�”}”(hŒhighest_zoneidx”h]”hŒhighest_zoneidx”…”�”}”(hjVCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjCubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj”Bubj>)�”}”(hŒconst nodemask_t *nodes”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjoCh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjkCubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|Ch²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjkCubh)�”}”(hhh]”j)�”}”(hŒ nodemask_t”h]”hŒ nodemask_t”…”�”}”(hj�Ch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŠCubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j�CŒmodname”NŒ classname”Njìjï)�”}”jò]”j]BŒc.first_zones_zonelist”†”asbuh1hhjkCubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«Ch²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjkCubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¹Ch²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjkCubj)�”}”(hŒnodes”h]”hŒnodes”…”�”}”(hjÆCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjkCubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj”Bubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjBh²hh³j/Bh´Mlubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjBh²hh³j/Bh´Mlubah}”(h]”jBah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j/Bh´MlhjBh²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ðCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´MlhjíCh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjBh²hh³j/Bh´Mlubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjDjHjDjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjDh]”hŒ Parameters”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjDubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´Mphj Dubj¤)�”}”(hhh]”(j©)�”}”(hŒI``struct zonelist *zonelist`` The zonelist to search for a suitable zone ”h]”(j¯)�”}”(hŒ``struct zonelist *zonelist``”h]”jS)�”}”(hj1Dh]”hŒstruct zonelist *zonelist”…”�”}”(hj3Dh²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:122: ./include/linux/mmzone.h”h´Mmhj+DubjÉ)�”}”(hhh]”jM)�”}”(hŒ*The zonelist to search for a suitable zone”h]”hŒ*The zonelist to search for a suitable zone”…”�”}”(hjJDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jFDh´MmhjGDubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj+Dubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jFDh´Mmhj(Dubj©)�”}”(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)�”}”(hjjDh]”hŒenum zone_type highest_zoneidx”…”�”}”(hjlDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjhDubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´MnhjdDubjÉ)�”}”(hhh]”jM)�”}”(hŒ,The zone index of the highest zone to return”h]”hŒ,The zone index of the highest zone to return”…”�”}”(hjƒDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jDh´Mnhj€Dubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjdDubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jDh´Mnhj(Dubj©)�”}”(hŒM``const nodemask_t *nodes`` An optional nodemask to filter the zonelist with ”h]”(j¯)�”}”(hŒ``const nodemask_t *nodes``”h]”jS)�”}”(hj£Dh]”hŒconst nodemask_t *nodes”…”�”}”(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:122: ./include/linux/mmzone.h”h´Mohj�DubjÉ)�”}”(hhh]”jM)�”}”(hŒ0An optional nodemask to filter the zonelist with”h]”hŒ0An optional nodemask to filter the zonelist with”…”�”}”(hj¼Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¸Dh´Mohj¹Dubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�Dubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¸Dh´Mohj(Dubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj DubjM)�”}”(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:122: ./include/linux/mmzone.h”h´Mqhj DubjM)�”}”(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ôDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´Mphj DubjM)�”}”(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.”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´Muhj DubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjEh]”hŒReturn”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjEubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´Myhj DubjM)�”}”(hŒ1Zoneref pointer for the first suitable zone found”h]”hŒ1Zoneref pointer for the first suitable zone found”…”�”}”(hj*Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´Mzhj Dubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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)�”}”(hjSEh]”hŒfor_each_zone_zonelist_nodemask”…”�”}”(hj]Eh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjYEubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjUEh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´M…ubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjQEh²hh³jpEh´M…ubah}”(h]”jLEah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jpEh´M…hjNEh²hubj4)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1j3hjNEh²hh³jpEh´M…ubeh}”(h]”h ]”(jAŒmacro”eh"]”h$]”h&]”jFjAjGj‰EjHj‰EjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´NubjM)�”}”(hŒG``for_each_zone_zonelist_nodemask (zone, z, zlist, highidx, nodemask)``”h]”jS)�”}”(hj�Eh]”hŒCfor_each_zone_zonelist_nodemask (zone, z, zlist, highidx, nodemask)”…”�”}”(hj‘Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�Eubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´M‡hjKò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”…”�”}”(hj©Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´M…hj¥Eubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³j·Eh´M…hjKò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Ä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:122: ./include/linux/mmzone.h”h´M‰hj¾Eubj¤)�”}”(hhh]”(j©)�”}”(hŒ*``zone`` The current zone in the iterator ”h]”(j¯)�”}”(hŒ``zone``”h]”jS)�”}”(hjãEh]”hŒzone”…”�”}”(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:122: ./include/linux/mmzone.h”h´M†hjÝEubjÉ)�”}”(hhh]”jM)�”}”(hŒ The current zone in the iterator”h]”hŒ The current zone in the iterator”…”�”}”(hjüEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jøEh´M†hjùEubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÝEubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jøEh´M†hjÚEubj©)�”}”(hŒD``z`` The current pointer within zonelist->_zonerefs being iterated ”h]”(j¯)�”}”(hŒ``z``”h]”jS)�”}”(hjFh]”hŒz”…”�”}”(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:122: ./include/linux/mmzone.h”h´M‡hjFubjÉ)�”}”(hhh]”jM)�”}”(hŒ=The current pointer within zonelist->_zonerefs being iterated”h]”hŒ=The current pointer within zonelist->_zonerefs being iterated”…”�”}”(hj5Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j1Fh´M‡hj2Fubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjFubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j1Fh´M‡hjÚEubj©)�”}”(hŒ&``zlist`` The zonelist being iterated ”h]”(j¯)�”}”(hŒ ``zlist``”h]”jS)�”}”(hjUFh]”hŒzlist”…”�”}”(hjWFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjSFubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´MˆhjOFubjÉ)�”}”(hhh]”jM)�”}”(hŒThe zonelist being iterated”h]”hŒThe zonelist being iterated”…”�”}”(hjnFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jjFh´MˆhjkFubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjOFubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jjFh´MˆhjÚEubj©)�”}”(hŒ9``highidx`` The zone index of the highest zone to return ”h]”(j¯)�”}”(hŒ ``highidx``”h]”jS)�”}”(hjŽFh]”hŒhighidx”…”�”}”(hj�Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjŒFubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´M‰hjˆFubjÉ)�”}”(hhh]”jM)�”}”(hŒ,The zone index of the highest zone to return”h]”hŒ,The zone index of the highest zone to return”…”�”}”(hj§Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j£Fh´M‰hj¤Fubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjˆFubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j£Fh´M‰hjÚEubj©)�”}”(hŒ/``nodemask`` Nodemask allowed by the allocator ”h]”(j¯)�”}”(hŒ ``nodemask``”h]”jS)�”}”(hjÇFh]”hŒnodemask”…”�”}”(hjÉFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÅFubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´MŠhjÁFubjÉ)�”}”(hhh]”jM)�”}”(hŒ!Nodemask allowed by the allocator”h]”hŒ!Nodemask allowed by the allocator”…”�”}”(hjàFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÜFh´MŠhjÝFubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÁFubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÜFh´MŠhjÚEubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¾EubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjGh]”hŒ Description”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjGubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´MŒhj¾EubjM)�”}”(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”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´M‹hj¾Eubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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)�”}”(hjAGh]”hŒfor_each_zone_zonelist”…”�”}”(hjKGh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjGGubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjCGh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´M�ubah}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj?Gh²hh³j^Gh´M�ubah}”(h]”j:Gah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j^Gh´M�hjzones 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²Gh]”hŒ Parameters”…”�”}”(hj´Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj°Gubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´M¡hj¬Gubj¤)�”}”(hhh]”(j©)�”}”(hŒ*``zone`` The current zone in the iterator ”h]”(j¯)�”}”(hŒ``zone``”h]”jS)�”}”(hjÑGh]”hŒzone”…”�”}”(hjÓGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÏGubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´MžhjËGubjÉ)�”}”(hhh]”jM)�”}”(hŒ The current zone in the iterator”h]”hŒ The current zone in the iterator”…”�”}”(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Œ@``z`` The current pointer within zonelist->zones being iterated ”h]”(j¯)�”}”(hŒ``z``”h]”jS)�”}”(hj Hh]”hŒz”…”�”}”(hj Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjHubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´MŸhjHubjÉ)�”}”(hhh]”jM)�”}”(hŒ9The current pointer within zonelist->zones being iterated”h]”hŒ9The current pointer within zonelist->zones being iterated”…”�”}”(hj#Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jHh´MŸhj Hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjHubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jHh´MŸhjÈGubj©)�”}”(hŒ&``zlist`` The zonelist being iterated ”h]”(j¯)�”}”(hŒ ``zlist``”h]”jS)�”}”(hjCHh]”hŒzlist”…”�”}”(hjEHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjAHubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´M hj=HubjÉ)�”}”(hhh]”jM)�”}”(hŒThe zonelist being iterated”h]”hŒThe zonelist being iterated”…”�”}”(hj\Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jXHh´M hjYHubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj=Hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jXHh´M hjÈGubj©)�”}”(hŒ9``highidx`` The zone index of the highest zone to return ”h]”(j¯)�”}”(hŒ ``highidx``”h]”jS)�”}”(hj|Hh]”hŒhighidx”…”�”}”(hj~Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjzHubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´M¡hjvHubjÉ)�”}”(hhh]”jM)�”}”(hŒ,The zone index of the highest zone to return”h]”hŒ,The zone index of the highest zone to return”…”�”}”(hj•Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‘Hh´M¡hj’Hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjvHubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‘Hh´M¡hjÈGubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¬GubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj·Hh]”hŒ Description”…”�”}”(hj¹Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjµHubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´M£hj¬GubjM)�”}”(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ÍHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´M¢hj¬Gubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpfn_valid (C function)”Œ c.pfn_valid”hNt”auh1hÜhjKò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üHh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjøHh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´MÞubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Ih²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjøHh²hh³j Ih´MÞubhÿ)�”}”(hŒ pfn_valid”h]”j)�”}”(hŒ pfn_valid”h]”hŒ pfn_valid”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjIubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjøHh²hh³j Ih´MÞubj8)�”}”(hŒ(unsigned long pfn)”h]”j>)�”}”(hŒunsigned long pfn”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj9Ih²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj5Iubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGIh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj5Iubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjUIh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj5Iubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcIh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj5Iubj)�”}”(hŒpfn”h]”hŒpfn”…”�”}”(hjqIh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj5Iubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj1Iubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjøHh²hh³j Ih´MÞubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjôHh²hh³j Ih´MÞubah}”(h]”jïHah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j Ih´MÞhjñHh²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”…”�”}”(hj›Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´MÞhj˜Ih²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjñHh²hh³j Ih´MÞubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj³IjHj³IjI‰jJ‰jK‰uh1híh²hhjKò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½Ih]”hŒ Parameters”…”�”}”(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:122: ./include/linux/mmzone.h”h´Mâhj·Iubj¤)�”}”(hhh]”j©)�”}”(hŒ5``unsigned long pfn`` the page frame number to check ”h]”(j¯)�”}”(hŒ``unsigned long pfn``”h]”jS)�”}”(hjÜIh]”hŒunsigned long pfn”…”�”}”(hjÞIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÚIubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´MßhjÖIubjÉ)�”}”(hhh]”jM)�”}”(hŒthe page frame number to check”h]”hŒthe page frame number to check”…”�”}”(hjõIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jñIh´MßhjòIubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÖIubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jñIh´MßhjÓIubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj·IubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjJh]”hŒ Description”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjJubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´Máhj·IubjM)�”}”(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-Jh²hh³Nh´NubjŽ)�”}”(hŒ**pfn**”h]”hŒpfn”…”�”}”(hj5Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj-JubhŒl. Note, that availability of the memory map entry does not imply that there is actual usable memory at that ”…”�”}”(hj-Jh²hh³Nh´NubjŽ)�”}”(hŒ**pfn**”h]”hŒpfn”…”�”}”(hjGJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj-JubhŒA. The struct page may represent a hole or an unusable page frame.”…”�”}”(hj-Jh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´Màhj·IubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjbJh]”hŒReturn”…”�”}”(hjdJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj`Jubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´Måhj·IubjM)�”}”(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”…”�”}”(hjxJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:122: ./include/linux/mmzone.h”h´Mæhj·Iubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_mapping (C function)”Œc.folio_mapping”hNt”auh1hÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj§Jh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj£Jh²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:123: ./mm/util.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)�”}”(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”jèŒ reftarget”jÈJŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒ folio_mapping”sbŒc.folio_mapping”†”asbuh1hhj£Jh²hh³j´Jh´MÆubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçJh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj£Jh²hh³j´Jh´MÆubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjõJh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj£Jh²hh³j´Jh´MÆubhÿ)�”}”(hŒ folio_mapping”h]”j)�”}”(hjäJh]”hŒ folio_mapping”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjKubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj£Jh²hh³j´Jh´MÆubj8)�”}”(hŒ(const struct folio *folio)”h]”j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hj!Kh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjKubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.Kh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjKubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj)�”}”(hŒstruct vm_area_struct *vma”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÊLh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÆLubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×Lh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÆLubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjèLh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjåLubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jêLŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj°LsbŒc.__anon_vma_prepare”†”asbuh1hhjÆLubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÆLubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÆLubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hj#Mh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÆLubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÂLubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj‰Lh²hh³j›Lh´K ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj…Lh²hh³j›Lh´K ubah}”(h]”j€Lah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j›Lh´K hj‚Lh²hubj4)�”}”(hhh]”jM)�”}”(hŒ%attach an anon_vma to a memory region”h]”hŒ%attach an anon_vma to a memory region”…”�”}”(hjMMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´K hjJMh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj‚Lh²hh³j›Lh´K ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjeMjHjeMjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjoMh]”hŒ Parameters”…”�”}”(hjqMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjmMubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´K¤hjiMubj¤)�”}”(hhh]”j©)�”}”(hŒ=``struct vm_area_struct *vma`` the memory region in question ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hjŽMh]”hŒstruct vm_area_struct *vma”…”�”}”(hj�Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjŒMubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´K¡hjˆMubjÉ)�”}”(hhh]”jM)�”}”(hŒthe memory region in question”h]”hŒthe memory region in question”…”�”}”(hj§Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j£Mh´K¡hj¤Mubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjˆMubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j£Mh´K¡hj…Mubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjiMubjM)�”}”(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³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´K£hjiMubjM)�”}”(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ßMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´K¢hjiMubjM)�”}”(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îMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´K¦hjiMubjM)�”}”(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ýMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´K­hjiMubjM)�”}”(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 Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´K³hjiMubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒanon_vma_clone (C function)”Œc.anon_vma_clone”hNt”auh1hÜhjKò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;Nh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj7Nh²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M'ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJNh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj7Nh²hh³jINh´M'ubhÿ)�”}”(hŒanon_vma_clone”h]”j)�”}”(hŒanon_vma_clone”h]”hŒanon_vma_clone”…”�”}”(hj\Nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjXNubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj7Nh²hh³jINh´M'ubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjxNh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjtNubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…Nh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjtNubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj–Nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj“Nubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j˜NŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj^NsbŒc.anon_vma_clone”†”asbuh1hhjtNubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶Nh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjtNubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÄNh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjtNubj)�”}”(hŒdst”h]”hŒdst”…”�”}”(hjÑNh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjtNubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjpNubj>)�”}”(hŒstruct vm_area_struct *src”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjOubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j OŒmodname”NŒ classname”Njìjï)�”}”jò]”j²NŒc.anon_vma_clone”†”asbuh1hhjæNubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&Oh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjæNubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj4Oh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjæNubj)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hjAOh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjæNubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjpNubj>)�”}”(hŒenum vma_operation operation”h]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(hjZOh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjVOubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgOh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjVOubh)�”}”(hhh]”j)�”}”(hŒ vma_operation”h]”hŒ vma_operation”…”�”}”(hjxOh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjuOubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jzOŒmodname”NŒ classname”Njìjï)�”}”jò]”j²NŒc.anon_vma_clone”†”asbuh1hhjVOubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–Oh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjVOubj)�”}”(hŒ operation”h]”hŒ operation”…”�”}”(hj¤Oh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjVOubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjpNubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj7Nh²hh³jINh´M'ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj3Nh²hh³jINh´M'ubah}”(h]”j.Nah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jINh´M'hj0Nh²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ÎOh²hh³Nh´NubjŽ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjÖOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÎOubhŒ9 linking to all of the anon_vma objects contained within ”…”�”}”(hjÎOh²hh³Nh´NubjŽ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hjèOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÎOubhŒ anon_vma_chain’s.”…”�”}”(hjÎOh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M'hjËOh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj0Nh²hh³jINh´M'ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj PjHj PjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjPh]”hŒ Parameters”…”�”}”(hjPh²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:126: ./mm/rmap.c”h´M+hjPubj¤)�”}”(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)�”}”(hj3Ph]”hŒstruct vm_area_struct *dst”…”�”}”(hj5Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj1Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M)hj-PubjÉ)�”}”(hhh]”jM)�”}”(hŒ1The destination VMA with an empty anon_vma_chain.”h]”hŒ1The destination VMA with an empty anon_vma_chain.”…”�”}”(hjLPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jHPh´M)hjIPubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj-Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jHPh´M)hj*Pubj©)�”}”(hŒD``struct vm_area_struct *src`` The source VMA we wish to duplicate. ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *src``”h]”jS)�”}”(hjlPh]”hŒstruct vm_area_struct *src”…”�”}”(hjnPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjjPubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M*hjfPubjÉ)�”}”(hhh]”jM)�”}”(hŒ$The source VMA we wish to duplicate.”h]”hŒ$The source VMA we wish to duplicate.”…”�”}”(hj…Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�Ph´M*hj‚Pubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjfPubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�Ph´M*hj*Pubj©)�”}”(hŒT``enum vma_operation operation`` The type of operation which resulted in the clone. ”h]”(j¯)�”}”(hŒ ``enum vma_operation operation``”h]”jS)�”}”(hj¥Ph]”hŒenum vma_operation operation”…”�”}”(hj§Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj£Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M+hjŸPubjÉ)�”}”(hhh]”jM)�”}”(hŒ2The type of operation which resulted in the clone.”h]”hŒ2The type of operation which resulted in the clone.”…”�”}”(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*Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjPubjM)�”}”(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³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M-hjPubjM)�”}”(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öPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M,hjPubjM)�”}”(hŒThis is invoked for:”h]”hŒThis is invoked for:”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M/hjPubj^)�”}”(hhh]”(jc)�”}”(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 ”…”�”}”(hjQh²hh³Nh´NubjŽ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hj#Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjQubhŒ is unfaulted and ”…”�”}”(hjQh²hh³Nh´NubjŽ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hj5Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjQubhŒ is faulted - meaning we clone ”…”�”}”(hjQh²hh³Nh´NubjŽ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hjGQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjQubhŒ into ”…”�”}”(hjQh²hh³Nh´NubjŽ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjYQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjQubhŒ.”…”�”}”(hjQh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M1hjQubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjQubjc)�”}”(hŒ VMA split.”h]”jM)�”}”(hjzQh]”hŒ VMA split.”…”�”}”(hj|Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M3hjxQubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjQubjc)�”}”(hŒ VMA (m)remap.”h]”jM)�”}”(hj’Qh]”hŒ VMA (m)remap.”…”�”}”(hj”Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M4hj�Qubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjQubjc)�”}”(hŒFork of faulted VMA. ”h]”jM)�”}”(hŒFork of faulted VMA.”h]”hŒFork of faulted VMA.”…”�”}”(hj¬Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M5hj¨Qubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjQubeh}”(h]”h ]”h"]”h$]”h&]”j‚jƒuh1j]h³jqQh´M1hjPubjM)�”}”(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ÇQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M7hjPubjM)�”}”(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ÖQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M:hjPubjM)�”}”(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³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M?hjPubjM)�”}”(hŒ!0 on success, -ENOMEM on failure.”h]”hŒ!0 on success, -ENOMEM on failure.”…”�”}”(hjýQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M@hjPubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒunlink_anon_vmas (C function)”Œc.unlink_anon_vmas”hNt”auh1hÜhjKò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,Rh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj(Rh²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MØubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;Rh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj(Rh²hh³j:Rh´MØubhÿ)�”}”(hŒunlink_anon_vmas”h]”j)�”}”(hŒunlink_anon_vmas”h]”hŒunlink_anon_vmas”…”�”}”(hjMRh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjIRubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj(Rh²hh³j:Rh´MØubj8)�”}”(hŒ(struct vm_area_struct *vma)”h]”j>)�”}”(hŒstruct vm_area_struct *vma”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjiRh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjeRubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvRh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjeRubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj‡Rh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj„Rubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j‰RŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjORsbŒc.unlink_anon_vmas”†”asbuh1hhjeRubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§Rh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjeRubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjµRh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjeRubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjÂRh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjeRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjaRubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj(Rh²hh³j:Rh´MØubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj$Rh²hh³j:Rh´MØubah}”(h]”jRah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j:Rh´MØhj!Rh²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ìRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MØhjéRh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj!Rh²hh³j:Rh´MØubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjSjHjSjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjSh]”hŒ Parameters”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj Subah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MÜhjSubj¤)�”}”(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-Sh]”hŒstruct vm_area_struct *vma”…”�”}”(hj/Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj+Subah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MÚhj'SubjÉ)�”}”(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.”…”�”}”(hjFSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jBSh´MÚhjCSubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj'Subeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jBSh´MÚhj$Subah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjSubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjhSh]”hŒ Description”…”�”}”(hjjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjfSubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MÜhjSubjM)�”}”(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.”…”�”}”(hj~Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MÛhjSubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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­Sh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj©Sh²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MIubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼Sh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj©Sh²hh³j»Sh´MIubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÊSh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj©Sh²hh³j»Sh´MIubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØSh²hh³Nh´Nubah}”(•Ah]”h ]”jÿah"]”h$]”h&]”uh1jòhj©Sh²hh³j»Sh´MIubhÿ)�”}”(hŒpage_address_in_vma”h]”j)�”}”(hŒpage_address_in_vma”h]”hŒpage_address_in_vma”…”�”}”(hjêSh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjæSubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj©Sh²hh³j»Sh´MIubj8)�”}”(hŒV(const struct folio *folio, const struct page *page, const struct vm_area_struct *vma)”h]”(j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjTubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjTubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj!Th²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjTubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.Th²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjTubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj?Th²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj)�”}”(hŒconst struct page *page”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hj“Th²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj�Tubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Th²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�Tubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj®Th²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj�Tubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»Th²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�Tubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÌTh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÉTubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÎTŒmodname”NŒ classname”Njìjï)�”}”jò]”j[TŒc.page_address_in_vma”†”asbuh1hhj�Tubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêTh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�Tubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjøTh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj�Tubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�Tubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjþSubj>)�”}”(hŒ const struct vm_area_struct *vma”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjUubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+Uh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjUubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj9Uh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjUubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFUh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjUubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjWUh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjTUubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jYUŒmodname”NŒ classname”Njìjï)�”}”jò]”j[TŒc.page_address_in_vma”†”asbuh1hhjUubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuUh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjUubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjƒUh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjUubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hj�Uh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjUubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjþSubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj©Sh²hh³j»Sh´MIubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¥Sh²hh³j»Sh´MIubah}”(h]”j Sah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j»Sh´MIhj¢Sh²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ºUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MIhj·Uh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¢Sh²hh³j»Sh´MIubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÒUjHjÒUjI‰jJ‰jK‰uh1híh²hhjKò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ÜUh]”hŒ Parameters”…”�”}”(hjÞUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÚUubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MMhjÖUubj¤)�”}”(hhh]”(j©)�”}”(hŒ=``const struct folio *folio`` The folio containing the page. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjûUh]”hŒconst struct folio *folio”…”�”}”(hjýUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjùUubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MJhjõUubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio containing the page.”h]”hŒThe folio containing the page.”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jVh´MJhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjõUubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jVh´MJhjòUubj©)�”}”(hŒ7``const struct page *page`` The page within the folio. ”h]”(j¯)�”}”(hŒ``const struct page *page``”h]”jS)�”}”(hj4Vh]”hŒconst struct page *page”…”�”}”(hj6Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj2Vubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MKhj.VubjÉ)�”}”(hhh]”jM)�”}”(hŒThe page within the folio.”h]”hŒThe page within the folio.”…”�”}”(hjMVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jIVh´MKhjJVubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj.Vubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jIVh´MKhjòUubj©)�”}”(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)�”}”(hjmVh]”hŒ const struct vm_area_struct *vma”…”�”}”(hjoVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjkVubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MLhjgVubjÉ)�”}”(hhh]”jM)�”}”(hŒ'The VMA we need to know the address in.”h]”hŒ'The VMA we need to know the address in.”…”�”}”(hj†Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‚Vh´MLhjƒVubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjgVubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‚Vh´MLhjòUubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÖUubjM)�”}”(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³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MNhjÖUubjM)�”}”(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¾Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MMhjÖUubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjÏVh]”hŒContext”…”�”}”(hjÑVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÍVubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MShjÖUubjM)�”}”(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åVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MThjÖUubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjöVh]”hŒReturn”…”�”}”(hjøVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjôVubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MXhjÖUubjM)�”}”(hŒ:The virtual address corresponding to this page in the VMA.”h]”hŒ:The virtual address corresponding to this page in the VMA.”…”�”}”(hj Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MXhjÖUubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_referenced (C function)”Œc.folio_referenced”hNt”auh1hÜhjKò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;Wh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj7Wh²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M#ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJWh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj7Wh²hh³jIWh´M#ubhÿ)�”}”(hŒfolio_referenced”h]”j)�”}”(hŒfolio_referenced”h]”hŒfolio_referenced”…”�”}”(hj\Wh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjXWubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj7Wh²hh³jIWh´M#ubj8)�”}”(hŒV(struct folio *folio, int is_locked, struct mem_cgroup *memcg, vma_flags_t *vma_flags)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjxWh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjtWubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…Wh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjtWubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj–Wh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj“Wubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j˜WŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj^WsbŒc.folio_referenced”†”asbuh1hhjtWubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶Wh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjtWubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÄWh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjtWubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÑWh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjtWubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjpWubj>)�”}”(hŒ int is_locked”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjêWh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjæWubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjøWh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjæWubj)�”}”(hŒ is_locked”h]”hŒ is_locked”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjæWubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjpWubj>)�”}”(hŒstruct mem_cgroup *memcg”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjXubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,Xh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjXubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hj=Xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj:Xubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j?XŒmodname”NŒ classname”Njìjï)�”}”jò]”j²WŒc.folio_referenced”†”asbuh1hhjXubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[Xh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjXubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjiXh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjXubj)�”}”(hŒmemcg”h]”hŒmemcg”…”�”}”(hjvXh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjXubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjpWubj>)�”}”(hŒvma_flags_t *vma_flags”h]”(h)�”}”(hhh]”j)�”}”(hŒ vma_flags_t”h]”hŒ vma_flags_t”…”�”}”(hj’Xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�Xubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j”XŒmodname”NŒ classname”Njìjï)�”}”jò]”j²WŒc.folio_referenced”†”asbuh1hhj‹Xubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°Xh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‹Xubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¾Xh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj‹Xubj)�”}”(hŒ vma_flags”h]”hŒ vma_flags”…”�”}”(hjËXh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‹Xubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjpWubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj7Wh²hh³jIWh´M#ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj3Wh²hh³jIWh´M#ubah}”(h]”j.Wah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jIWh´M#hj0Wh²hubj4)�”}”(hhh]”jM)�”}”(hŒ!Test if the folio was referenced.”h]”hŒ!Test if the folio was referenced.”…”�”}”(hjõXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M#hjòXh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj0Wh²hh³jIWh´M#ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj YjHj YjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjYh]”hŒ Parameters”…”�”}”(hjYh²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:126: ./mm/rmap.c”h´M'hjYubj¤)�”}”(hhh]”(j©)�”}”(hŒ+``struct folio *folio`` The folio to test. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj6Yh]”hŒstruct folio *folio”…”�”}”(hj8Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj4Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M$hj0YubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to test.”h]”hŒThe folio to test.”…”�”}”(hjOYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jKYh´M$hjLYubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj0Yubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jKYh´M$hj-Yubj©)�”}”(hŒ2``int is_locked`` Caller holds lock on the folio. ”h]”(j¯)�”}”(hŒ``int is_locked``”h]”jS)�”}”(hjoYh]”hŒ int is_locked”…”�”}”(hjqYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjmYubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M%hjiYubjÉ)�”}”(hhh]”jM)�”}”(hŒCaller holds lock on the folio.”h]”hŒCaller holds lock on the folio.”…”�”}”(hjˆYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j„Yh´M%hj…Yubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjiYubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j„Yh´M%hj-Yubj©)�”}”(hŒ2``struct mem_cgroup *memcg`` target memory cgroup ”h]”(j¯)�”}”(hŒ``struct mem_cgroup *memcg``”h]”jS)�”}”(hj¨Yh]”hŒstruct mem_cgroup *memcg”…”�”}”(hjªYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¦Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M&hj¢YubjÉ)�”}”(hhh]”jM)�”}”(hŒtarget memory cgroup”h]”hŒtarget memory cgroup”…”�”}”(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-Yubj©)�”}”(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áYh]”hŒvma_flags_t *vma_flags”…”�”}”(hjãYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjßYubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M'hjÛYubjÉ)�”}”(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ú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-Yubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjYubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjZh]”hŒ Description”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M)hjYubjM)�”}”(hŒ)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÅZh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÁZubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒZh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÁZubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjãZh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjàZubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jåZŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj«ZsbŒc.mapping_wrprotect_range”†”asbuh1hhjÁZubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÁZubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÁZubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÁZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj½Zubj>)�”}”(hŒ pgoff_t pgoff”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”jèŒ reftarget”j<[Œmodname”NŒ classname”Njìjï)�”}”jò]”jÿZŒc.mapping_wrprotect_range”†”asbuh1hhj3[ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjX[h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj3[ubj)�”}”(hŒpgoff”h]”hŒpgoff”…”�”}”(hjf[h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3[ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj½Zubj>)�”}”(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½Zubj>)�”}”(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½Zubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj„Zh²hh³j–Zh´Míubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj€Zh²hh³j–Zh´Míubah}”(h]”j{Zah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j–Zh´Míhj}Zh²hubj4)�”}”(hhh]”jM)�”}”(hŒ0Write-protect all mappings in a specified range.”h]”hŒ0Write-protect all mappings in a specified range.”…”�”}”(hj2\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´Míhj/\h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj}Zh²hh³j–Zh´Míubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjJ\jHjJ\jI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hX÷**Parameters** ``struct address_space *mapping`` The mapping whose reverse mapping should be traversed. ``pgoff_t pgoff`` The page offset at which **pfn** is mapped within **mapping**. ``unsigned long pfn`` The PFN of the page mapped in **mapping** at **pgoff**. ``unsigned long nr_pages`` The number of physically contiguous base pages spanned. **Description** 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). The **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**. **Return** the number of write-protected PTEs, or an 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³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MñhjN\ubj¤)�”}”(hhh]”(j©)�”}”(hŒY``struct address_space *mapping`` The mapping whose reverse mapping should be traversed. ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjs\h]”hŒstruct address_space *mapping”…”�”}”(hju\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjq\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´Mïhjm\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³jˆ\h´Mïhj‰\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjm\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jˆ\h´Mïhjj\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”…”�”}”(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:126: ./mm/rmap.c”h´Mðhj¦\ubjÉ)�”}”(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Èhj¦\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÁ\h´Mðhjj\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:126: ./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ñhjj\ubj©)�”}”(hŒS``unsigned long nr_pages`` The number of physically contiguous base pages spanned. ”h]”(j¯)�”}”(hŒ``unsigned long nr_pages``”h]”jS)�”}”(hjf]h]”hŒunsigned long nr_pages”…”�”}”(hjh]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjd]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´Mòhj`]ubjÉ)�”}”(hhh]”jM)�”}”(hŒ7The number of physically contiguous base pages spanned.”h]”hŒ7The number of physically contiguous base pages spanned.”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MôhjN\ubjM)�”}”(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:126: ./mm/rmap.c”h´MóhjN\ubjM)�”}”(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:126: ./mm/rmap.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³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MýhjN\ubjM)�”}”(hŒ0the number of write-protected PTEs, or an error.”h]”hŒ0the number of write-protected PTEs, or an error.”…”�”}”(hj5^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MþhjN\ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpfn_mkclean_range (C function)”Œc.pfn_mkclean_range”hNt”auh1hÜhjKò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”…”�”}”(hjd^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:126: ./mm/rmap.c”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs^h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj`^h²hh³jr^h´Mubhÿ)�”}”(hŒpfn_mkclean_range”h]”j)�”}”(hŒpfn_mkclean_range”h]”hŒpfn_mkclean_range”…”�”}”(hj…^h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�^ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj`^h²hh³jr^h´Mubj8)�”}”(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”…”�”}”(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 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Œ pgoff_t pgoff”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjF_h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjC_ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jH_Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj‡^sbŒc.pfn_mkclean_range”†”asbuh1hhj?_ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjf_h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj?_ubj)�”}”(hŒpgoff”h]”hŒpgoff”…”�”}”(hjt_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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj�_h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj‰_ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjš_h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‰_ubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”j­_Œmodname”NŒ classname”Njìjï)�”}”jò]”jb_Œc.pfn_mkclean_range”†”asbuh1hhj‰_ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉ_h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‰_ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj×_h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj‰_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&]”jjuh1j7hj`^h²hh³jr^h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj\^h²hh³jr^h´Mubah}”(h]”jW^ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jr^h´MhjY^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”…”�”}”(hjL`h²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:126: ./mm/rmap.c”h´Mhj `h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjY^h²hh³jr^h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj€`jHj€`jI‰jJ‰jK‰uh1híh²hhjKò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�hjˆ`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´Mhj„`ubj¤)�”}”(hhh]”(j©)�”}”(hŒ!``unsigned long pfn`` start 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³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´Mhj£`ubjÉ)�”}”(hhh]”jM)�”}”(hŒ start pfn.”h]”hŒ start pfn.”…”�”}”(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``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:126: ./mm/rmap.c”h´MhjÜ`ubjÉ)�”}”(hhh]”jM)�”}”(hŒ)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjGbh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjCbubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTbh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjCbubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjebh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjbbubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jgbŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj-bsbŒc.folio_move_anon_rmap”†”asbuh1hhjCbubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…bh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjCbubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj“bh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjCbubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj bh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjCbubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj?bubj>)�”}”(hŒstruct vm_area_struct *vma”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¹bh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjµbubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆbh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjµbubh)�”}”(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”jèŒ reftarget”jÙbŒmodname”NŒ classname”Njìjï)�”}”jò]”j�bŒc.folio_move_anon_rmap”†”asbuh1hhjµbubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõbh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjµbubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjµbubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjµbubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj?bubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjbh²hh³jbh´M ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjbh²hh³jbh´M ubah}”(h]”jýaah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jbh´M hjÿah²hubj4)�”}”(hhh]”jM)�”}”(hŒmove a folio to our anon_vma”h]”hŒmove a folio to our anon_vma”…”�”}”(hj:ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M hj7ch²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÿah²hh³jbh´M ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjRcjHjRcjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hXn**Parameters** ``struct folio *folio`` The folio to move to our anon_vma ``struct vm_area_struct *vma`` The vma the folio belongs to **Description** When a folio belongs exclusively to one process after a COW event, that folio can be moved into the anon_vma that belongs to just that process, so the rmap code will not search the parent or sibling processes.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj\ch]”hŒ Parameters”…”�”}”(hj^ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjZcubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M¤hjVcubj¤)�”}”(hhh]”(j©)�”}”(hŒ:``struct folio *folio`` The folio to move to our anon_vma ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj{ch]”hŒstruct folio *folio”…”�”}”(hj}ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjycubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M¡hjucubjÉ)�”}”(hhh]”jM)�”}”(hŒ!The folio to move to our anon_vma”h]”hŒ!The folio to move to our anon_vma”…”�”}”(hj”ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�ch´M¡hj‘cubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjucubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�ch´M¡hjrcubj©)�”}”(hŒ<``struct vm_area_struct *vma`` The vma the folio belongs to ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hj´ch]”hŒstruct vm_area_struct *vma”…”�”}”(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:126: ./mm/rmap.c”h´M¢hj®cubjÉ)�”}”(hhh]”jM)�”}”(hŒThe vma the folio belongs to”h]”hŒThe vma the folio belongs to”…”�”}”(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¢hjrcubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjVcubjM)�”}”(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:126: ./mm/rmap.c”h´M¤hjVcubjM)�”}”(hŒÑWhen a folio belongs exclusively to one process after a COW event, that folio can be moved into the anon_vma that belongs to just that process, so the rmap code will not search the parent or sibling processes.”h]”hŒÑWhen a folio belongs exclusively to one process after a COW event, that folio can be moved into the anon_vma that belongs to just that process, so the rmap code will not search the parent or sibling processes.”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M£hjVcubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ__folio_set_anon (C function)”Œc.__folio_set_anon”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒnvoid __folio_set_anon (struct folio *folio, struct vm_area_struct *vma, unsigned long address, bool exclusive)”h]”hù)�”}”(hŒmvoid __folio_set_anon(struct folio *folio, struct vm_area_struct *vma, unsigned long address, bool exclusive)”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj4dh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj0dh²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M¹ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCdh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj0dh²hh³jBdh´M¹ubhÿ)�”}”(hŒ__folio_set_anon”h]”j)�”}”(hŒ__folio_set_anon”h]”hŒ__folio_set_anon”…”�”}”(hjUdh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjQdubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj0dh²hh³jBdh´M¹ubj8)�”}”(hŒX(struct folio *folio, struct vm_area_struct *vma, unsigned long address, bool exclusive)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjqdh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjmdubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~dh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjmdubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj�dh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŒdubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j‘dŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjWdsbŒc.__folio_set_anon”†”asbuh1hhjmdubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯dh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjmdubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj½dh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjmdubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÊdh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjmdubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjidubj>)�”}”(hŒstruct vm_area_struct *vma”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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ßdubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjþdubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jeŒmodname”NŒ classname”Njìjï)�”}”jò]”j«dŒc.__folio_set_anon”†”asbuh1hhjßdubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjßdubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj-eh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjßdubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hj:eh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjßdubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjidubj>)�”}”(hŒunsigned long address”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjSeh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjOeubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjaeh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjOeubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjoeh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjOeubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}eh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjOeubj)�”}”(hŒaddress”h]”hŒaddress”…”�”}”(hj‹eh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjOeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjidubj>)�”}”(hŒbool exclusive”h]”(já)�”}”(hj½h]”hŒbool”…”�”}”(hj¤eh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj eubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±eh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj eubj)�”}”(hŒ exclusive”h]”hŒ exclusive”…”�”}”(hj¿eh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj eubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjidubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj0dh²hh³jBdh´M¹ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj,dh²hh³jBdh´M¹ubah}”(h]”j'dah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jBdh´M¹hj)dh²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éeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M¹hjæeh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj)dh²hh³jBdh´M¹ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjfjHjfjI‰jJ‰jK‰uh1híh²hhjKò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 fh]”hŒ Parameters”…”�”}”(hj fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj fubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M½hjfubj¤)�”}”(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*fh]”hŒstruct folio *folio”…”�”}”(hj,fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj(fubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´Mºhj$fubjÉ)�”}”(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.”…”�”}”(hjCfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j?fh´Mºhj@fubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj$fubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j?fh´Mºhj!fubj©)�”}”(hŒ<``struct vm_area_struct *vma`` VM area to add the folio to. ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hjcfh]”hŒstruct vm_area_struct *vma”…”�”}”(hjefh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjafubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M»hj]fubjÉ)�”}”(hhh]”jM)�”}”(hŒVM area to add the folio to.”h]”hŒVM area to add the folio to.”…”�”}”(hj|fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jxfh´M»hjyfubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj]fubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jxfh´M»hj!fubj©)�”}”(hŒ>``unsigned long address`` User virtual address of the mapping ”h]”(j¯)�”}”(hŒ``unsigned long address``”h]”jS)�”}”(hjœfh]”hŒunsigned long address”…”�”}”(hjžfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjšfubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M¼hj–fubjÉ)�”}”(hhh]”jM)�”}”(hŒ#User virtual address of the mapping”h]”hŒ#User virtual address of the mapping”…”�”}”(hjµfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j±fh´M¼hj²fubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj–fubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j±fh´M¼hj!fubj©)�”}”(hŒA``bool exclusive`` Whether the folio is exclusive to the process.”h]”(j¯)�”}”(hŒ``bool exclusive``”h]”jS)�”}”(hjÕfh]”hŒbool exclusive”…”�”}”(hj×fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÓfubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M¾hjÏfubjÉ)�”}”(hhh]”jM)�”}”(hŒ.Whether the folio is exclusive to the process.”h]”hŒ.Whether the folio is exclusive to the process.”…”�”}”(hjîfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M½hjëfubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÏfubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jêfh´M¾hj!fubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjfubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hj/gh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj+gh²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MÙubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>gh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj+gh²hh³j=gh´MÙubhÿ)�”}”(hŒ__page_check_anon_rmap”h]”j)�”}”(hŒ__page_check_anon_rmap”h]”hŒ__page_check_anon_rmap”…”�”}”(hjPgh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjLgubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj+gh²hh³j=gh´MÙubj8)�”}”(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]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjlgh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjhgubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjygh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjhgubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj‡gh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjhgubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”gh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjhgubh)�”}”(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”jèŒ reftarget”j§gŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjRgsbŒc.__page_check_anon_rmap”†”asbuh1hhjhgubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅgh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjhgubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÓgh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjhgubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjàgh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjhgubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjdgubj>)�”}”(hŒconst struct page *page”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjùgh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjõgubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjõgubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjõgubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!hh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjõgubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj2hh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj/hubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j4hŒmodname”NŒ classname”Njìjï)�”}”jò]”jÁgŒc.__page_check_anon_rmap”†”asbuh1hhjõgubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPhh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjõgubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj^hh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjõgubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjkhh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjõgubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjdgubj>)�”}”(hŒstruct vm_area_struct *vma”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj„hh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj€hubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘hh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj€hubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj¢hh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŸhubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j¤hŒmodname”NŒ classname”Njìjï)�”}”jò]”jÁgŒc.__page_check_anon_rmap”†”asbuh1hhj€hubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀhh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj€hubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÎhh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj€hubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjÛhh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj€hubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjdgubj>)�”}”(hŒunsigned long address”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjôhh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjðhubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjðhubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjðhubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjðhubj)�”}”(hŒaddress”h]”hŒaddress”…”�”}”(hj,ih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjðhubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjdgubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj+gh²hh³j=gh´MÙubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj'gh²hh³j=gh´MÙubah}”(h]”j"gah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j=gh´MÙhj$gh²hubj4)�”}”(hhh]”jM)�”}”(hŒ$sanity check anonymous rmap addition”h]”hŒ$sanity check anonymous rmap addition”…”�”}”(hjVih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MÙhjSih²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj$gh²hh³j=gh´MÙubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjnijHjnijI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjxih]”hŒ Parameters”…”�”}”(hjzih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjviubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MÝhjriubj¤)�”}”(hhh]”(j©)�”}”(hŒ=``const struct folio *folio`` The folio containing **page**. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hj—ih]”hŒconst struct folio *folio”…”�”}”(hj™ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj•iubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MÚhj‘iubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio containing **page**.”h]”(hŒThe folio containing ”…”�”}”(hj°ih²hh³Nh´NubjŽ)�”}”(hŒ**page**”h]”hŒpage”…”�”}”(hj¸ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj°iubhŒ.”…”�”}”(hj°ih²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¬ih´MÚhj­iubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‘iubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¬ih´MÚhjŽiubj©)�”}”(hŒ=``const struct page *page`` the page to check the mapping of ”h]”(j¯)�”}”(hŒ``const struct page *page``”h]”jS)�”}”(hjâih]”hŒconst struct page *page”…”�”}”(hjäih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjàiubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MÛhjÜiubjÉ)�”}”(hhh]”jM)�”}”(hŒ the page to check the mapping of”h]”hŒ the page to check the mapping of”…”�”}”(hjûih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j÷ih´MÛhjøiubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÜiubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j÷ih´MÛhjŽiubj©)�”}”(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)�”}”(hjjh]”hŒstruct vm_area_struct *vma”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MÜhjjubjÉ)�”}”(hhh]”jM)�”}”(hŒ)the vm area in which the mapping is added”h]”hŒ)the vm area in which the mapping is added”…”�”}”(hj4jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j0jh´MÜhj1jubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j0jh´MÜhjŽiubj©)�”}”(hŒ9``unsigned long address`` the user virtual address mapped”h]”(j¯)�”}”(hŒ``unsigned long address``”h]”jS)�”}”(hjTjh]”hŒunsigned long address”…”�”}”(hjVjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjRjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”•vh´MÞhjNjubjÉ)�”}”(hhh]”jM)�”}”(hŒthe user virtual address mapped”h]”hŒthe user virtual address mapped”…”�”}”(hjmjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MÝhjjjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjNjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jijh´MÞhjŽiubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjriubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hj®jh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjªjh²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M4ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½jh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjªjh²hh³j¼jh´M4ubhÿ)�”}”(hŒfolio_add_anon_rmap_ptes”h]”j)�”}”(hŒfolio_add_anon_rmap_ptes”h]”hŒfolio_add_anon_rmap_ptes”…”�”}”(hjÏjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjËjubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjªjh²hh³j¼jh´M4ubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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çjubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj kh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjkubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j kŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÑjsbŒc.folio_add_anon_rmap_ptes”†”asbuh1hhjçjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)kh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjçjubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj7kh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjçjubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjDkh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjçjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjãjubj>)�”}”(hŒstruct page *page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj]kh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjYkubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjkh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjYkubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj{kh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjxkubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j}kŒmodname”NŒ classname”Njìjï)�”}”jò]”j%kŒc.folio_add_anon_rmap_ptes”†”asbuh1hhjYkubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™kh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjYkubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj§kh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjYkubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj´kh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjYkubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjãjubj>)�”}”(hŒ int nr_pages”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Œ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ãjubj>)�”}”(hŒstruct vm_area_struct *vma”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjþkubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjþkubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjlubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j"lŒmodname”NŒ classname”Njìjï)�”}”jò]”j%kŒc.folio_add_anon_rmap_ptes”†”asbuh1hhjþkubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>lh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjþkubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjLlh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjþkubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjYlh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjþkubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjãjubj>)�”}”(hŒunsigned long address”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjrlh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjnlubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€lh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjnlubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjŽlh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjnlubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœlh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjnlubj)�”}”(hŒaddress”h]”hŒaddress”…”�”}”(hjªlh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjnlubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjãjubj>)�”}”(hŒ rmap_t flags”h]”(h)�”}”(hhh]”j)�”}”(hŒrmap_t”h]”hŒrmap_t”…”�”}”(hjÆlh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÃlubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÈlŒmodname”NŒ classname”Njìjï)�”}”jò]”j%kŒc.folio_add_anon_rmap_ptes”†”asbuh1hhj¿lubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjälh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¿lubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjòlh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¿lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjãjubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjªjh²hh³j¼jh´M4ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¦jh²hh³j¼jh´M4ubah}”(h]”j¡jah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¼jh´M4hj£jh²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”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M4hjmh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj£jh²hh³j¼jh´M4ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj4mjHj4mjI‰jJ‰jK‰uh1híh²hhjKò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>mh]”hŒ Parameters”…”�”}”(hj@mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjFoh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjBoubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSoh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjBoubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjdoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjaoubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jfoŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj,osbŒc.folio_add_anon_rmap_pmd”†”asbuh1hhjBoubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„oh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjBoubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj’oh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjBoubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjŸoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjBoubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj>oubj>)�”}”(hŒstruct page *page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¸oh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj´oubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅoh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj´oubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÖoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÓoubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jØoŒmodname”NŒ classname”Njìjï)�”}”jò]”j€oŒc.folio_add_anon_rmap_pmd”†”asbuh1hhj´oubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjôoh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj´oubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj´oubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj´oubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj>oubj>)�”}”(hŒstruct vm_area_struct *vma”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj(ph²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj$pubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5ph²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj$pubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjFph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjCpubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jHpŒmodname”NŒ classname”Njìjï)�”}”jò]”j€oŒc.folio_add_anon_rmap_pmd”†”asbuh1hhj$pubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdph²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj$pubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjrph²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj$pubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj$pubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj>oubj>)�”}”(hŒunsigned long address”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Œaddress”h]”hŒaddress”…”�”}”(hjÐph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj”pubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj>oubj>)�”}”(hŒ rmap_t flags”h]”(h)�”}”(hhh]”j)�”}”(hŒrmap_t”h]”hŒrmap_t”…”�”}”(hjìph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjépubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jîpŒmodname”NŒ classname”Njìjï)�”}”jò]”j€oŒc.folio_add_anon_rmap_pmd”†”asbuh1hhjåpubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj qh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjåpubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjåpubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj>oubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjoh²hh³joh´MLubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjoh²hh³joh´MLubah}”(h]”jünah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³joh´MLhjþnh²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”…”�”}”(hjBqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MLhj?qh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjþnh²hh³joh´MLubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjZqjHjZqjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjdqh]”hŒ Parameters”…”�”}”(hjfqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjbqubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MPhj^qubj¤)�”}”(hhh]”(j©)�”}”(hŒ8``struct folio *folio`` The folio to add the mapping to ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjƒqh]”hŒstruct folio *folio”…”�”}”(hj…qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�qubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MMhj}qubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to add the mapping to”h]”hŒThe folio to add the mapping to”…”�”}”(hjœqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j˜qh´MMhj™qubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj}qubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j˜qh´MMhjzqubj©)�”}”(hŒ,``struct page *page`` The first page to add ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hj¼qh]”hŒstruct page *page”…”�”}”(hj¾qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjºqubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MNhj¶qubjÉ)�”}”(hhh]”jM)�”}”(hŒThe first page to add”h]”hŒThe first page to add”…”�”}”(hjÕqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÑqh´MNhjÒqubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¶qubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÑqh´MNhjzqubj©)�”}”(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õqh]”hŒstruct vm_area_struct *vma”…”�”}”(hj÷qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjóqubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MOhjïqubjÉ)�”}”(hhh]”jM)�”}”(hŒ)The vm area in which the mapping is added”h]”hŒ)The vm area in which the mapping is added”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j rh´MOhj rubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjïqubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j rh´MOhjzqubj©)�”}”(hŒL``unsigned long address`` The user virtual address of the first page to map ”h]”(j¯)�”}”(hŒ``unsigned long address``”h]”jS)�”}”(hj.rh]”hŒunsigned long address”…”�”}”(hj0rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj,rubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MPhj(rubjÉ)�”}”(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”…”�”}”(hjGrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jCrh´MPhjDrubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj(rubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jCrh´MPhjzqubj©)�”}”(hŒ ``rmap_t flags`` The rmap flags ”h]”(j¯)�”}”(hŒ``rmap_t flags``”h]”jS)�”}”(hjgrh]”hŒ rmap_t flags”…”�”}”(hjirh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjerubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MQhjarubjÉ)�”}”(hhh]”jM)�”}”(hŒThe rmap flags”h]”hŒThe rmap flags”…”�”}”(hj€rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j|rh´MQhj}rubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjarubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j|rh´MQhjzqubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj^qubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj¢rh]”hŒ Description”…”�”}”(hj¤rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj rubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MShj^qubjM)�”}”(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¸rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MRhj^qubjM)�”}”(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Çrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MThj^qubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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örh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjòrh²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´Mdubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjòrh²hh³jsh´Mdubhÿ)�”}”(hŒfolio_add_new_anon_rmap”h]”j)�”}”(hŒfolio_add_new_anon_rmap”h]”hŒfolio_add_new_anon_rmap”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjsubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjòrh²hh³jsh´Mdubj8)�”}”(hŒV(struct folio *folio, struct vm_area_struct *vma, unsigned long address, rmap_t flags)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj3sh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj/subjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@sh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj/subh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjQsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjNsubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jSsŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjssbŒc.folio_add_new_anon_rmap”†”asbuh1hhj/subjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqsh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj/subjr)�”}”(hjuh]”hŒ*”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj/subj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjŒsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj/subeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj+subj>)�”}”(hŒstruct vm_area_struct *vma”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¥sh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¡subjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²sh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¡subh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjÃsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÀsubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÅsŒmodname”NŒ classname”Njìjï)�”}”jò]”jmsŒc.folio_add_new_anon_rmap”†”asbuh1hhj¡subjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjásh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¡subjr)�”}”(hjuh]”hŒ*”…”�”}”(hjïsh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¡subj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjüsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¡subeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj+subj>)�”}”(hŒunsigned long address”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjtubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#th²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjtubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj1th²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjtubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?th²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjtubj)�”}”(hŒaddress”h]”hŒaddress”…”�”}”(hjMth²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjtubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj+subj>)�”}”(hŒ rmap_t flags”h]”(h)�”}”(hhh]”j)�”}”(hŒrmap_t”h]”hŒrmap_t”…”�”}”(hjith²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjftubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jktŒmodname”NŒ classname”Njìjï)�”}”jò]”jmsŒc.folio_add_new_anon_rmap”†”asbuh1hhjbtubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡th²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjbtubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj•th²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjbtubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj+subeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjòrh²hh³jsh´Mdubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjîrh²hh³jsh´Mdubah}”(h]”jérah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jsh´Mdhjërh²hubj4)�”}”(hhh]”jM)�”}”(hŒ%Add mapping to a new anonymous folio.”h]”hŒ%Add mapping to a new anonymous folio.”…”�”}”(hj¿th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´Mdhj¼th²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjërh²hh³jsh´Mdubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj×tjHj×tjI‰jJ‰jK‰uh1híh²hhjKò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áth]”hŒ Parameters”…”�”}”(hjãth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjßtubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MhhjÛtubj¤)�”}”(hhh]”(j©)�”}”(hŒ9``struct folio *folio`` The folio to add the mapping to. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjuh]”hŒstruct folio *folio”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjþtubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MehjútubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio to add the mapping to.”h]”hŒ The folio to add the mapping to.”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³juh´Mehjuubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjútubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³juh´Mehj÷tubj©)�”}”(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)�”}”(hj9uh]”hŒstruct vm_area_struct *vma”…”�”}”(hj;uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj7uubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´Mfhj3uubjÉ)�”}”(hhh]”jM)�”}”(hŒ)the vm area in which the mapping is added”h]”hŒ)the vm area in which the mapping is added”…”�”}”(hjRuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jNuh´MfhjOuubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj3uubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jNuh´Mfhj÷tubj©)�”}”(hŒ:``unsigned long address`` the user virtual address mapped ”h]”(j¯)�”}”(hŒ``unsigned long address``”h]”jS)�”}”(hjruh]”hŒunsigned long address”…”�”}”(hjtuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjpuubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MghjluubjÉ)�”}”(hhh]”jM)�”}”(hŒthe user virtual address mapped”h]”hŒthe user virtual address mapped”…”�”}”(hj‹uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‡uh´Mghjˆuubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjluubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‡uh´Mghj÷tubj©)�”}”(hŒ ``rmap_t flags`` The rmap flags ”h]”(j¯)�”}”(hŒ``rmap_t flags``”h]”jS)�”}”(hj«uh]”hŒ rmap_t flags”…”�”}”(hj­uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj©uubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´Mhhj¥uubjÉ)�”}”(hhh]”jM)�”}”(hŒThe rmap flags”h]”hŒThe rmap flags”…”�”}”(hjÄuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÀuh´MhhjÁuubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¥uubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÀuh´Mhhj÷tubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÛtubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjæuh]”hŒ Description”…”�”}”(hjèuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjäuubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MjhjÛtubjM)�”}”(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üuh²hh³Nh´Nubjí )�”}”(hŒ*new*”h]”hŒnew”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jì hjüuubhŒÚ 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üuh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MihjÛtubjM)�”}”(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.”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MohjÛtubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hjLvh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjHvh²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M¿ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[vh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjHvh²hh³jZvh´M¿ubhÿ)�”}”(hŒfolio_add_file_rmap_ptes”h]”j)�”}”(hŒfolio_add_file_rmap_ptes”h]”hŒfolio_add_file_rmap_ptes”…”�”}”(hjmvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjivubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjHvh²hh³jZvh´M¿ubj8)�”}”(hŒR(struct folio *folio, struct page *page, int nr_pages, struct vm_area_struct *vma)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj‰vh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj…vubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–vh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj…vubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj§vh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤vubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j©vŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjovsbŒc.folio_add_file_rmap_ptes”†”asbuh1hhj…vubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇvh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj…vubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÕvh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj…vubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjâvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj…vubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj�vubj>)�”}”(hŒstruct page *page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjûvh²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÷vubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjwubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jwŒmodname”NŒ classname”Njìjï)�”}”jò]”jÃvŒc.folio_add_file_rmap_ptes”†”asbuh1hhj÷vubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7wh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj÷vubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjEwh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj÷vubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjRwh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj÷vubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj�vubj>)�”}”(hŒ int nr_pages”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjkwh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjgwubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjywh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjgwubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hj‡wh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjgwubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj�vubj>)�”}”(hŒstruct vm_area_struct *vma”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj wh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjœwubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­wh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjœwubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj¾wh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj»wubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÀwŒmodname”NŒ classname”Njìjï)�”}”jò]”jÃvŒc.folio_add_file_rmap_ptes”†”asbuh1hhjœwubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜwh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjœwubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjêwh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjœwubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hj÷wh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjœwubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj�vubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjHvh²hh³jZvh´M¿ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjDvh²hh³jZvh´M¿ubah}”(h]”j?vah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jZvh´M¿hjAvh²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!xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M¿hjxh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjAvh²hh³jZvh´M¿ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj9xjHj9xjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjCxh]”hŒ Parameters”…”�”}”(hjExh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjAxubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MÃhj=xubj¤)�”}”(hhh]”(j©)�”}”(hŒ9``struct folio *folio`` The folio to add the mappings to ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjbxh]”hŒstruct folio *folio”…”�”}”(hjdxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj`xubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MÀhj\xubjÉ)�”}”(hhh]”jM)�”}”(hŒ The folio to add the mappings to”h]”hŒ The folio to add the mappings to”…”�”}”(hj{xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jwxh´MÀhjxxubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj\xubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jwxh´MÀhjYxubj©)�”}”(hŒ,``struct page *page`` The first page to add ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hj›xh]”hŒstruct page *page”…”�”}”(hj�xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj™xubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MÁhj•xubjÉ)�”}”(hhh]”jM)�”}”(hŒThe first page to add”h]”hŒThe first page to add”…”�”}”(hj´xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j°xh´MÁhj±xubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj•xubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j°xh´MÁhjYxubj©)�”}”(hŒD``int nr_pages`` The number of pages that will be mapped using PTEs ”h]”(j¯)�”}”(hŒ``int nr_pages``”h]”jS)�”}”(hjÔxh]”hŒ int nr_pages”…”�”}”(hjÖxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÒxubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MÂhjÎxubjÉ)�”}”(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íxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jéxh´MÂhjêxubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÎxubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jéxh´MÂhjYxubj©)�”}”(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 yh]”hŒstruct vm_area_struct *vma”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj yubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MÃhjyubjÉ)�”}”(hhh]”jM)�”}”(hŒ+The vm area in which the mappings are added”h]”hŒ+The vm area in which the mappings are added”…”�”}”(hj&yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j"yh´MÃhj#yubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjyubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j"yh´MÃhjYxubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj=xubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjHyh]”hŒ Description”…”�”}”(hjJyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjFyubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MÅhj=xubjM)�”}”(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^yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MÄhj=xubjM)�”}”(hŒ-The caller needs to hold the page table lock.”h]”hŒ-The caller needs to hold the page table lock.”…”�”}”(hjmyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MÆhj=xubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hjœyh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj˜yh²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.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Œfolio_add_file_rmap_pmd”h]”j)�”}”(hŒfolio_add_file_rmap_pmd”h]”hŒfolio_add_file_rmap_pmd”…”�”}”(hj½yh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¹yubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj˜yh²hh³jªyh´MÐubj8)�”}”(hŒD(struct folio *folio, struct page *page, struct vm_area_struct *vma)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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Õyubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj÷yh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjôyubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jùyŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj¿ysbŒc.folio_add_file_rmap_pmd”†”asbuh1hhjÕyubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÕyubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj%zh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÕyubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj2zh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕyubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÑyubj>)�”}”(hŒstruct page *page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjKzh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjGzubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXzh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjGzubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjizh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjfzubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jkzŒmodname”NŒ classname”Njìjï)�”}”jò]”jzŒc.folio_add_file_rmap_pmd”†”asbuh1hhjGzubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡zh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjGzubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj•zh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjGzubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj¢zh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjGzubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÑyubj>)�”}”(hŒstruct vm_area_struct *vma”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj»zh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj·zubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈzh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj·zubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjÙzh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÖzubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÛzŒmodname”NŒ classname”Njìjï)�”}”jò]”jzŒc.folio_add_file_rmap_pmd”†”asbuh1hhj·zubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷zh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj·zubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj·zubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj·zubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÑyubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj˜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Œ,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:126: ./mm/rmap.c”h´MÐhj9{h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj‘yh²hh³jªyh´MÐubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjT{jHjT{jI‰jJ‰jK‰uh1híh²hhjKò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”…”�”}”(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:126: ./mm/rmap.c”h´MÔhjX{ubj¤)�”}”(hhh]”(j©)�”}”(hŒ8``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:126: ./mm/rmap.c”h´MÑhjw{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´MÑhj“{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjw{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j’{h´MÑhjt{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:126: ./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Òhjt{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:126: ./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Ó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³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MÕhjX{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)”…”�”}”(hj@|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MÔhjX{ubjM)�”}”(hŒ-The caller needs to hold the page table lock.”h]”hŒ-The caller needs to hold the page table lock.”…”�”}”(hjO|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MÖhjX{ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hj~|h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjz|h²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´Mäubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�|h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjz|h²hh³jŒ|h´Mäubhÿ)�”}”(hŒfolio_add_file_rmap_pud”h]”j)�”}”(hŒfolio_add_file_rmap_pud”h]”hŒfolio_add_file_rmap_pud”…”�”}”(hjŸ|h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj›|ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjz|h²hh³jŒ|h´Mäubj8)�”}”(hŒD(struct folio *folio, struct page *page, struct vm_area_struct *vma)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj»|h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj·|ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈ|h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj·|ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÙ|h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÖ|ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÛ|Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj¡|sbŒc.folio_add_file_rmap_pud”†”asbuh1hhj·|ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjù|h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj·|ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj·|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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj-}h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj)}ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:}h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj)}ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjK}h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjH}ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jM}Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ|Œc.folio_add_file_rmap_pud”†”asbuh1hhj)}ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hji}h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj)}ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjw}h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj)}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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj�}h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj™}ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª}h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj™}ubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”j½}Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ|Œc.folio_add_file_rmap_pud”†”asbuh1hhj™}ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙ}h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj™}ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjç}h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj™}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&]”jjuh1j7hjz|h²hh³jŒ|h´Mäubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjv|h²hh³jŒ|h´Mäubah}”(h]”jq|ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jŒ|h´Mähjs|h²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~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´Mähj~h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjs|h²hh³jŒ|h´Mäubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj6~jHj6~jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hj@~h]”hŒ Parameters”…”�”}”(hjB~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:126: ./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)�”}”(hj_~h]”hŒstruct folio *folio”…”�”}”(hja~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:126: ./mm/rmap.c”h´MåhjY~ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to add the mapping to”h]”hŒThe folio to add the mapping to”…”�”}”(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åhjV~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:126: ./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æhjV~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:126: ./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çhjV~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj:~ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj h]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./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:126: ./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.”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´Mêhj:~ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(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:126: ./mm/rmap.c”h´Mgubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj\h²hh³jnh´Mgubhÿ)�”}”(hŒfolio_remove_rmap_ptes”h]”j)�”}”(hŒfolio_remove_rmap_ptes”h]”hŒfolio_remove_rmap_ptes”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj}ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj\h²hh³jnh´Mgubj8)�”}”(hŒR(struct folio *folio, struct page *page, int nr_pages, struct vm_area_struct *vma)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj™ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj™ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¸ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j½Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjƒsbŒc.folio_remove_rmap_ptes”†”asbuh1hhj™ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj™ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj™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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj €ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj €ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj-€h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj*€ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j/€Œmodname”NŒ classname”Njìjï)�”}”jò]”j׌c.folio_remove_rmap_ptes”†”asbuh1hhj €ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjK€h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj €ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjY€h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj €ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjf€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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj´€h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj°€ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁ€h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj°€ubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jÔ€Œmodname”NŒ classname”Njìjï)�”}”jò]”j׌c.folio_remove_rmap_ptes”†”asbuh1hhj°€ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjð€h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj°€ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjþ€h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj°€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&]”jjuh1j7hj\h²hh³jnh´Mgubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjXh²hh³jnh´Mgubah}”(h]”jSah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jnh´MghjUh²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”…”�”}”(hj5�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´Mghj2�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjUh²hh³jnh´Mgubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjM�jHjM�jI‰jJ‰jK‰uh1híh²hhjKò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.”•7h]”(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³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MkhjQ�ubj¤)�”}”(hhh]”(j©)�”}”(hŒ>``struct folio *folio`` The folio to remove the mappings from ”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³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´Mhhjp�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ%The folio to remove the mappings from”h]”hŒ%The folio to remove the mappings from”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‹�h´MhhjŒ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjp�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‹�h´Mhhjm�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:126: ./mm/rmap.c”h´Mihj©�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´MihjÅ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj©�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÄ�h´Mihjm�ubj©)�”}”(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è�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:126: ./mm/rmap.c”h´Mjhjâ�ubjÉ)�”}”(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‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jý�h´Mjhjþ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjâ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jý�h´Mjhjm�ubj©)�”}”(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!‚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:126: ./mm/rmap.c”h´Mkhj‚ubjÉ)�”}”(hhh]”jM)�”}”(hŒ/The vm area from which the mappings are removed”h]”hŒ/The vm area from which the mappings are removed”…”�”}”(hj:‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j6‚h´Mkhj7‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j6‚h´Mkhjm�ubeh}”(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�hjZ‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MmhjQ�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)”…”�”}”(hjr‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MlhjQ�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:126: ./mm/rmap.c”h´MnhjQ�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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°‚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:126: ./mm/rmap.c”h´Mxubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿‚h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¬‚h²hh³j¾‚h´Mxubhÿ)�”}”(hŒfolio_remove_rmap_pmd”h]”j)�”}”(hŒfolio_remove_rmap_pmd”h]”hŒfolio_remove_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´Mxubj8)�”}”(hŒD(struct folio *folio, struct page *page, struct vm_area_struct *vma)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjí‚h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjé‚ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjú‚h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjé‚ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj ƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjƒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j ƒŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÓ‚sbŒc.folio_remove_rmap_pmd”†”asbuh1hhjé‚ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+ƒh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjé‚ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj9ƒh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjé‚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Œstruct page *page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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[ƒubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj}ƒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjzƒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jƒŒmodname”NŒ classname”Njìjï)�”}”jò]”j'ƒŒc.folio_remove_rmap_pmd”†”asbuh1hhj[ƒubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›ƒh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj[ƒubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj©ƒh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj[ƒ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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjσh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj˃ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj܃h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj˃ubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jmodname”NŒ classname”Njìjï)�”}”jò]”j'ƒŒc.folio_remove_rmap_pmd”†”asbuh1hhj˃ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj „h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj˃ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj˃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&]”jjuh1j7hj¬‚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Œ1remove a PMD mapping from a page range of a folio”h]”hŒ1remove a PMD mapping from a page range of a folio”…”�”}”(hjP„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MxhjM„h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¥‚h²hh³j¾‚h´Mxubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjh„jHjh„jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjr„h]”hŒ Parameters”…”�”}”(hjt„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjp„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M|hjl„ubj¤)�”}”(hhh]”(j©)�”}”(hŒ=``struct folio *folio`` The folio to remove the mapping from ”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:126: ./mm/rmap.c”h´Myhj‹„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³j¦„h´Myhj§„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‹„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¦„h´Myhjˆ„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:126: ./mm/rmap.c”h´MzhjÄ„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´Mzhjà„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÄ„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jß„h´Mzhjˆ„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:126: ./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£hjl„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:126: ./mm/rmap.c”h´M}hjl„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)”…”�”}”(hjT…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M|hjl„ubjM)�”}”(hŒ-The caller needs to hold the page table lock.”h]”hŒ-The caller needs to hold the page table lock.”…”�”}”(hjc…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M~hjl„ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(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:126: ./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_remove_rmap_pud”h]”j)�”}”(hŒfolio_remove_rmap_pud”h]”hŒfolio_remove_rmap_pud”…”�”}”(hj³…h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¯…ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjŽ…h²hh³j …h´MŒubj8)�”}”(hŒD(struct folio *folio, struct page *page, struct vm_area_struct *vma)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÏ…h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjË…ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜ…h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjË…ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjí…h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjê…ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jï…Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjµ…sbŒc.folio_remove_rmap_pud”†”asbuh1hhjË…ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj †h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjË…ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjË…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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjA†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=†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”jèŒ reftarget”ja†Œmodname”NŒ classname”Njìjï)�”}”jò]”j †Œc.folio_remove_rmap_pud”†”asbuh1hhj=†ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}†h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj=†ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj‹†h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj=†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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj±†h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj­†ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾†h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj­†ubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jцŒmodname”NŒ classname”Njìjï)�”}”jò]”j †Œc.folio_remove_rmap_pud”†”asbuh1hhj­†ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí†h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj­†ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjû†h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj­†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&]”jjuh1j7hjŽ…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Œ1remove a PUD mapping from a page range of a folio”h]”hŒ1remove a PUD mapping from a page range of a folio”…”�”}”(hj2‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./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&]”jFjAjGjJ‡jHjJ‡jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjT‡h]”hŒ Parameters”…”�”}”(hjV‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjR‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M�hjN‡ubj¤)�”}”(hhh]”(j©)�”}”(hŒ=``struct folio *folio`` The folio to remove the mapping from ”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³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M�hjm‡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³jˆ‡h´M�hj‰‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjm‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jˆ‡h´M�hjj‡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:126: ./mm/rmap.c”h´MŽhj¦‡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Èhj¦‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÁ‡h´MŽhjj‡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:126: ./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�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³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M‘hjN‡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)”…”�”}”(hj6ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M�hjN‡ubjM)�”}”(hŒ-The caller needs to hold the page table lock.”h]”hŒ-The caller needs to hold the page table lock.”…”�”}”(hjEˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M’hjN‡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒtry_to_unmap (C function)”Œc.try_to_unmap”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ=void try_to_unmap (struct folio *folio, enum ttu_flags flags)”h]”hù)�”}”(hŒ)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj±ˆh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj­ˆubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾ˆh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj­ˆubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjψh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj̈ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jшŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj—ˆsbŒc.try_to_unmap”†”asbuh1hhj­ˆubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïˆh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj­ˆubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjýˆh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj­ˆ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]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(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‰ubh)�”}”(hhh]”j)�”}”(hŒ ttu_flags”h]”hŒ ttu_flags”…”�”}”(hjA‰h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>‰ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jC‰Œmodname”NŒ classname”Njìjï)�”}”jò]”j눌c.try_to_unmap”†”asbuh1hhj‰ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_‰h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‰ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjm‰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&]”jjuh1j7hjpˆh²hh³j‚ˆh´Mw ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjlˆh²hh³j‚ˆh´Mw ubah}”(h]”jgˆah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j‚ˆh´Mw hjiˆ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.”…”�”}”(hj—‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´Mw hj”‰h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjiˆh²hh³j‚ˆh´Mw ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¯‰jHj¯‰jI‰jJ‰jK‰uh1híh²hhjKò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:126: ./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:126: ./mm/rmap.c”h´Mx 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´Mx hjî‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÒ‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jí‰h´Mx 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:126: ./mm/rmap.c”h´My 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´My hj'Šubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj Šubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j&Šh´My hjωubeh}”(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³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./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).”…”�”}”(hjbŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´Mz hj³‰ubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjsŠh]”hŒContext”…”�”}”(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:126: ./mm/rmap.c”h´M~ hj³‰ubjM)�”}”(hŒ Caller must hold the folio lock.”h]”hŒ Caller must hold the folio lock.”…”�”}”(hj‰Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M hj³‰ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒtry_to_migrate (C function)”Œc.try_to_migrate”hNt”auh1hÜhjKò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:126: ./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× ubj8)�”}”(hŒ+(struct folio *folio, enum ttu_flags flags)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjõŠh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjñŠubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjñŠubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‹ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j‹Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÛŠsbŒc.try_to_migrate”†”asbuh1hhjñŠubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3‹h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjñŠubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjA‹h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjñŠubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjN‹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]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(hjg‹h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjc‹ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjt‹h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjc‹ubh)�”}”(hhh]”j)�”}”(hŒ ttu_flags”h]”hŒ ttu_flags”…”�”}”(hj…‹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‚‹ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j‡‹Œmodname”NŒ classname”Njìjï)�”}”jò]”j/‹Œc.try_to_migrate”†”asbuh1hhjc‹ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£‹h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjc‹ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj±‹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&]”jjuh1j7hj´Š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:126: ./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²hhjKò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:126: ./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:126: ./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”…”�”}”(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Œ*``enum ttu_flags flags`` action and flags ”h]”(j¯)�”}”(hŒ``enum ttu_flags flags``”h]”jS)�”}”(hjUŒh]”hŒenum ttu_flags flags”…”�”}”(hjWŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjSŒubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MÙ hjOŒubjÉ)�”}”(hhh]”jM)�”}”(hŒaction and flags”h]”hŒaction and flags”…”�”}”(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Œ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:126: ./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.”…”�”}”(hj¦Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´MÚ hj÷‹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"make_device_exclusive (C function)”Œc.make_device_exclusive”hNt”auh1hÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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:126: ./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”jèŒ reftarget”jöŒŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒ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 ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj#�h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÑŒh²hh³jâŒh´M ubhÿ)�”}”(hŒmake_device_exclusive”h]”j)�”}”(hj�h]”hŒmake_device_exclusive”…”�”}”(hj4�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj0�ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÑŒh²hh³jâŒh´M ubj8)�”}”(hŒN(struct mm_struct *mm, unsigned long addr, void *owner, struct folio **foliop)”h]”(j>)�”}”(hŒstruct mm_struct *mm”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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�ubh)�”}”(hhh]”j)�”}”(hŒ mm_struct”h]”hŒ mm_struct”…”�”}”(hjm�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjj�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jo�Œmodname”NŒ classname”Njìjï)�”}”jò]”j�Œc.make_device_exclusive”†”asbuh1hhjK�ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹�h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjK�ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj™�h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjK�ubj)�”}”(hŒmm”h]”hŒmm”…”�”}”(hj¦�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjK�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjG�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=hjG�ubj>)�”}”(hŒ void *owner”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 Žubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj,Žh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj Žubj)�”}”(hŒowner”h]”hŒowner”…”�”}”(hj9Žh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Žubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjG�ubj>)�”}”(hŒstruct folio **foliop”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjRŽh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjNŽ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”…”�”}”(hjpŽh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjmŽubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jrŽŒmodname”NŒ classname”Njìjï)�”}”jò]”j�Œc.make_device_exclusive”†”asbuh1hhjNŽubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽŽh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjNŽubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjœŽh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjNŽubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj©Žh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjNŽubj)�”}”(hŒfoliop”h]”hŒfoliop”…”�”}”(hj¶Žh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjNŽubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjG�ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÑŒ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àŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./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²hhjKò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�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:126: ./mm/rmap.c”h´M hjüŽubj¤)�”}”(hhh]”(j©)�”}”(hŒ@``struct mm_struct *mm`` mm_struct of associated target process ”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³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M hj�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ&mm_struct of associated target process”h]”hŒ&mm_struct of associated target process”…”�”}”(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ŒO``unsigned long addr`` the virtual address to mark for exclusive device access ”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³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M hjT�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ7the virtual address to mark for exclusive device access”h]”hŒ7the virtual address to mark for exclusive device access”…”�”}”(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ŒQ``void *owner`` passed to MMU_NOTIFY_EXCLUSIVE range notifier to allow filtering ”h]”(j¯)�”}”(hŒ``void *owner``”h]”jS)�”}”(hj“�h]”hŒ void *owner”…”�”}”(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:126: ./mm/rmap.c”h´M hj��ubjÉ)�”}”(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¬�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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``struct folio **foliop`` folio pointer will be stored here on success. ”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³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M hjÆ�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ-folio pointer will be stored here on success.”h]”hŒ-folio pointer will be stored here on success.”…”�”}”(hjå�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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:126: ./mm/rmap.c”h´M hjüŽubjM)�”}”(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�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M hjüŽubjM)�”}”(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,�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M hjüŽubjM)�”}”(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;�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M hjüŽubjM)�”}”(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.”…”�”}”(hjJ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M hjüŽubjM)�”}”(hŒ **Notes**”h]”jŽ)�”}”(hj[�h]”hŒNotes”…”�”}”(hj]�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjY�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M hjüŽubji)�”}”(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ÓM)�”}”(hhh]”(jc)�”}”(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 ”…”�”}”(hj|�h²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(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:126: ./mm/rmap.c”h´M hjx�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhju�ubjc)�”}”(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.”…”�”}”(hj§�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M! hj£�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhju�ubjc)�”}”(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À�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M$ hj¼�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhju�ubeh}”(h]”h ]”h"]”h$]”h&]”j?Nj@NjANhjBNjCNuh1jÒMhjq�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jhh³jœ�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:126: ./mm/rmap.c”h´M( hjüŽubjM)�”}”(hŒ>pointer to mapped page on success, otherwise a negative error.”h]”hŒ>pointer to mapped page on success, otherwise a negative error.”…”�”}”(hjù�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M) hjüŽubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ__rmap_walk_file (C function)”Œc.__rmap_walk_file”hNt”auh1hÜhjKò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(‘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:126: ./mm/rmap.c”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ÿ)�”}”(hŒ__rmap_walk_file”h]”j)�”}”(hŒ__rmap_walk_file”h]”hŒ__rmap_walk_file”…”�”}”(hjI‘h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjE‘ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj$‘h²hh³j6‘h´Mî ubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hje‘h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hja‘ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjr‘h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhja‘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”jèŒ reftarget”j…‘Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjK‘sbŒc.__rmap_walk_file”†”asbuh1hhja‘ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£‘h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhja‘ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj±‘h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhja‘ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj¾‘h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhja‘ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj]‘ubj>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjבh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÓ‘ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjä‘h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÓ‘ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j÷‘Œmodname”NŒ classname”Njìjï)�”}”jò]”jŸ‘Œc.__rmap_walk_file”†”asbuh1hhjÓ‘ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÓ‘ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj!’h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÓ‘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 pgoff_start”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hjJ’h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjG’ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jL’Œmodname”NŒ classname”Njìjï)�”}”jò]”jŸ‘Œc.__rmap_walk_file”†”asbuh1hhjC’ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh’h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjC’ubj)�”}”(hŒ pgoff_start”h]”hŒ pgoff_start”…”�”}”(hjv’h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjC’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj]‘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=hj]‘ubj>)�”}”(hŒstruct rmap_walk_control *rwc”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjà’h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÜ’ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí’h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÜ’ubh)�”}”(hhh]”j)�”}”(hŒrmap_walk_control”h]”hŒrmap_walk_control”…”�”}”(hjþ’h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjû’ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j“Œmodname”NŒ classname”Njìjï)�”}”jò]”jŸ‘Œc.__rmap_walk_file”†”asbuh1hhjÜ’ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÜ’ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj*“h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÜ’ubj)�”}”(hŒrwc”h]”hŒrwc”…”�”}”(hj7“h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÜ’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj]‘ubj>)�”}”(hŒ bool locked”h]”(já)�”}”(hj½h]”hŒbool”…”�”}”(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Œlocked”h]”hŒlocked”…”�”}”(hjk“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&]”jjuh1j7hj$‘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ŒƒTraverse the reverse mapping for a file-backed mapping of a page mapped within a specified page cache object at a specified offset.”h]”hŒƒTraverse the reverse mapping for a file-backed mapping of a page mapped within a specified page cache object at a specified offset.”…”�”}”(hj•“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”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²hhjKòh³Nh´Nubj„)�”}”(hXŒ**Parameters** ``struct folio *folio`` Either the folio whose mappings to traverse, or if NULL, the callbacks specified in **rwc** will be configured such as to be able to look up mappings correctly. ``struct address_space *mapping`` The page cache object whose mapping VMAs we intend to traverse. If **folio** is non-NULL, this should be equal to folio_mapping(folio). ``pgoff_t pgoff_start`` The offset within **mapping** of the page which we are looking up. If **folio** is non-NULL, this should be equal to folio_pgoff(folio). ``unsigned long nr_pages`` The number of pages mapped by the mapping. If **folio** is non-NULL, this should be equal to folio_nr_pages(folio). ``struct rmap_walk_control *rwc`` The reverse mapping walk control object describing how the traversal should proceed. ``bool locked`` Is the **mapping** already locked? If not, we acquire the 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:126: ./mm/rmap.c”h´Mò hj±“ubj¤)�”}”(hhh]”(j©)�”}”(hŒ¹``struct folio *folio`` Either the folio whose mappings to traverse, or if NULL, the callbacks specified in **rwc** will be configured such as to be able to look up mappings correctly. ”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:126: ./mm/rmap.c”h´Mó hjГubjÉ)�”}”(hhh]”jM)�”}”(hŒ Either the folio whose mappings to traverse, or if NULL, the callbacks specified in **rwc** will be configured such as to be able to look up mappings correctly.”h]”(hŒTEither the folio whose mappings to traverse, or if NULL, the callbacks specified in ”…”�”}”(hjï“h²hh³Nh´NubjŽ)�”}”(hŒ**rwc**”h]”hŒrwc”…”�”}”(hj÷“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjï“ubhŒE will be configured such as to be able to look up mappings correctly.”…”�”}”(hjï“h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./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Í“ubj©)�”}”(hŒª``struct address_space *mapping`` The page cache object whose mapping VMAs we intend to traverse. If **folio** is non-NULL, this should be equal to folio_mapping(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³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´Mö hj”ubjÉ)�”}”(hhh]”jM)�”}”(hŒ‡The page cache object whose mapping VMAs we intend to traverse. If **folio** is non-NULL, this should be equal to folio_mapping(folio).”h]”(hŒCThe page cache object whose mapping VMAs we intend to traverse. If ”…”�”}”(hj;”h²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjC”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj;”ubhŒ; is non-NULL, this should be equal to folio_mapping(folio).”…”�”}”(hj;”h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”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Œ¡``pgoff_t pgoff_start`` The offset within **mapping** of the page which we are looking up. If **folio** is non-NULL, this should be equal to folio_pgoff(folio). ”h]”(j¯)�”}”(hŒ``pgoff_t pgoff_start``”h]”jS)�”}”(hjn”h]”hŒpgoff_t pgoff_start”…”�”}”(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:126: ./mm/rmap.c”h´Mù hjh”ubjÉ)�”}”(hhh]”jM)�”}”(hŒˆThe offset within **mapping** of the page which we are looking up. If **folio** is non-NULL, this should be equal to folio_pgoff(folio).”h]”(hŒThe offset within ”…”�”}”(hj‡”h²hh³Nh´NubjŽ)�”}”(hŒ **mapping**”h]”hŒmapping”…”�”}”(hj�”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‡”ubhŒ) of the page which we are looking up. If ”…”�”}”(hj‡”h²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj¡”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj‡”ubhŒ9 is non-NULL, this should be equal to folio_pgoff(folio).”…”�”}”(hj‡”h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´M÷ hj„”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjh”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jƒ”h´Mù hjÍ“ubj©)�”}”(hŒ�``unsigned long nr_pages`` The number of pages mapped by the mapping. If **folio** is non-NULL, this should be equal to folio_nr_pages(folio). ”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:126: ./mm/rmap.c”h´Mû hjÆ”ubjÉ)�”}”(hhh]”jM)�”}”(hŒsThe number of pages mapped by the mapping. If **folio** is non-NULL, this should be equal to folio_nr_pages(folio).”h]”(hŒ.The number of pages mapped by the mapping. 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 non-NULL, this should be equal to folio_nr_pages(folio).”…”�”}”(hjå”h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./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Í“ubj©)�”}”(hŒw``struct rmap_walk_control *rwc`` The reverse mapping walk control object describing how the traversal should proceed. ”h]”(j¯)�”}”(hŒ!``struct rmap_walk_control *rwc``”h]”jS)�”}”(hj•h]”hŒstruct rmap_walk_control *rwc”…”�”}”(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:126: ./mm/rmap.c”h´Mý hj•ubjÉ)�”}”(hhh]”jM)�”}”(hŒTThe reverse mapping walk control object describing how the traversal should proceed.”h]”hŒTThe reverse mapping walk control object describing how the traversal should proceed.”…”�”}”(hj1•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./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Í“ubj©)�”}”(hŒO``bool locked`` Is the **mapping** already locked? If not, we acquire the lock.”h]”(j¯)�”}”(hŒ``bool locked``”h]”jS)�”}”(hjR•h]”hŒ bool locked”…”�”}”(hjT•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjP•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:126: ./mm/rmap.c”h´Mþ hjL•ubjÉ)�”}”(hhh]”jM)�”}”(hŒ?Is the **mapping** already locked? If not, we acquire the lock.”h]”(hŒIs the ”…”�”}”(hjk•h²hh³Nh´NubjŽ)�”}”(hŒ **mapping**”h]”hŒmapping”…”�”}”(hjs•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjk•ubhŒ- already locked? If not, we acquire the lock.”…”�”}”(hjk•h²hh³Nh´Nubeh}”(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±“ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%isolate_movable_ops_page (C function)”Œc.isolate_movable_ops_page”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒFbool isolate_movable_ops_page (struct page *page, isolate_mode_t mode)”h]”hù)�”}”(hŒEbool isolate_movable_ops_page(struct page *page, isolate_mode_t mode)”•›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:127: ./mm/migrate.c”h´Keubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjË•h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¹•h²hh³jÊ•h´Keubhÿ)�”}”(hŒisolate_movable_ops_page”h]”j)�”}”(hŒisolate_movable_ops_page”h]”hŒisolate_movable_ops_page”…”�”}”(hjÝ•h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙ•ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¹•h²hh³jÊ•h´Keubj8)�”}”(hŒ((struct page *page, isolate_mode_t mode)”h]”(j>)�”}”(hŒstruct page *page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjù•h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjõ•ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjõ•ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj–ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j–Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjß•sbŒc.isolate_movable_ops_page”†”asbuh1hhjõ•ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7–h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjõ•ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjE–h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjõ•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ñ•ubj>)�”}”(hŒisolate_mode_t mode”h]”(h)�”}”(hhh]”j)�”}”(hŒisolate_mode_t”h]”hŒisolate_mode_t”…”�”}”(hjn–h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjk–ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jp–Œmodname”NŒ classname”Njìjï)�”}”jò]”j3–Œc.isolate_movable_ops_page”†”asbuh1hhjg–ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒ–h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjg–ubj)�”}”(hŒmode”h]”hŒmode”…”�”}”(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&]”jjuh1j7hj¹•h²hh³jÊ•h´Keubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjµ•h²hh³jÊ•h´Keubah}”(h]”j°•ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÊ•h´Kehj²•h²hubj4)�”}”(hhh]”jM)�”}”(hŒ(isolate a movable_ops page for migration”h]”hŒ(isolate a movable_ops page for migration”…”�”}”(hjÄ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´KehjÁ–h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj²•h²hh³jÊ•h´Keubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÜ–jHjÜ–jI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hX¾**Parameters** ``struct page *page`` The page. ``isolate_mode_t mode`` The isolation mode. **Description** Try to isolate a movable_ops page for migration. Will fail if the page is not a movable_ops page, if the page is already isolated for migration or if the page was just was released by its owner. Once isolated, the page cannot get freed until it is either putback or migrated. Returns true if isolation succeeded, 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:127: ./mm/migrate.c”h´Kihjà–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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´Kfhjÿ–ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The page.”h]”hŒ The page.”…”�”}”(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Œ,``isolate_mode_t mode`` The isolation mode. ”h]”(j¯)�”}”(hŒ``isolate_mode_t mode``”h]”jS)�”}”(hj>—h]”hŒisolate_mode_t mode”…”�”}”(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:127: ./mm/migrate.c”h´Kghj8—ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe isolation mode.”h]”hŒThe isolation mode.”…”�”}”(hjW—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jS—h´KghjT—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj8—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jS—h´Kghjü–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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´Kihjà–ubjM)�”}”(hŒÂTry to isolate a movable_ops page for migration. Will fail if the page is not a movable_ops page, if the page is already isolated for migration or if the page was just was released by its owner.”h]”hŒÂTry to isolate a movable_ops page for migration. Will fail if the page is not a movable_ops page, if the page is already isolated for migration or if the page was just was released by its owner.”…”�”}”(hj�—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´Khhjà–ubjM)�”}”(hŒPOnce isolated, the page cannot get freed until it is either putback or migrated.”h]”hŒPOnce isolated, the page cannot get freed until it is either putback or migrated.”…”�”}”(hjž—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´Klhjà–ubjM)�”}”(hŒ5Returns true if isolation succeeded, otherwise false.”h]”hŒ5Returns true if isolation succeeded, otherwise false.”…”�”}”(hj­—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´Kohjà–ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%putback_movable_ops_page (C function)”Œc.putback_movable_ops_page”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ1void putback_movable_ops_page (struct page *page)”h]”hù)�”}”(hŒ0void putback_movable_ops_page(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:127: ./mm/migrate.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Œputback_movable_ops_page”h]”j)�”}”(hŒputback_movable_ops_page”h]”hŒputback_movable_ops_page”…”�”}”(hjý—h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjù—ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjØ—h²hh³jê—h´K»ubj8)�”}”(hŒ(struct page *page)”h]”j>)�”}”(hŒstruct page *page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj˜ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&˜h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj˜ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj7˜h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4˜ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j9˜Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÿ—sbŒc.putback_movable_ops_page”†”asbuh1hhj˜ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW˜h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj˜ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hje˜h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj˜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&]”jjuh1j7hjØ—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Œ$putback an isolated movable_ops page”h]”hŒ$putback an isolated movable_ops page”…”�”}”(hjœ˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.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²hhjKòh³Nh´Nubj„)�”}”(hŒ­**Parameters** ``struct page *page`` The isolated page. **Description** Putback an isolated movable_ops page. After the page was putback, it might get freed instantly.”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:127: ./mm/migrate.c”h´K¿hj¸˜ubj¤)�”}”(hhh]”j©)�”}”(hŒ)``struct page *page`` The isolated 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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´K¼hjטubjÉ)�”}”(hhh]”jM)�”}”(hŒThe isolated page.”h]”hŒThe isolated 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Ô˜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:127: ./mm/migrate.c”h´K¾hj¸˜ubjM)�”}”(hŒ%Putback an isolated movable_ops page.”h]”hŒ%Putback an isolated movable_ops page.”…”�”}”(hj.™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´K½hj¸˜ubjM)�”}”(hŒ9After the page was putback, it might get freed instantly.”h]”hŒ9After the page was putback, it might get freed instantly.”…”�”}”(hj=™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´K¿hj¸˜ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%migrate_movable_ops_page (C function)”Œc.migrate_movable_ops_page”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒYint migrate_movable_ops_page (struct page *dst, struct page *src, enum migrate_mode mode)”h]”hù)�”}”(hŒXint migrate_movable_ops_page(struct page *dst, struct page *src, enum migrate_mode mode)”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjl™h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjh™h²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´KÔubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{™h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjh™h²hh³jz™h´KÔubhÿ)�”}”(hŒmigrate_movable_ops_page”h]”j)�”}”(hŒmigrate_movable_ops_page”h]”hŒmigrate_movable_ops_page”…”�”}”(hj�™h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‰™ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjh™h²hh³jz™h´KÔubj8)�”}”(hŒ<(struct page *dst, struct page *src, enum migrate_mode mode)”h]”(j>)�”}”(hŒstruct page *dst”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj©™h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¥™ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶™h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¥™ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÇ™h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÄ™ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÉ™Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj�™sbŒc.migrate_movable_ops_page”†”asbuh1hhj¥™ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç™h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¥™ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjõ™h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¥™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Œstruct page *src”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjšubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(šh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjšubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj9šh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj6šubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j;šŒmodname”NŒ classname”Njìjï)�”}”jò]”j㙌c.migrate_movable_ops_page”†”asbuh1hhjšubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWšh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjšubjr)�”}”(hjuh]”hŒ*”…”�”}”(hješh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjšubj)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hjršh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjšubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¡™ubj>)�”}”(hŒenum migrate_mode mode”h]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(hj‹šh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj‡šubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜šh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‡šubh)�”}”(hhh]”j)�”}”(hŒ migrate_mode”h]”hŒ migrate_mode”…”�”}”(hj©šh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦šubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j«šŒmodname”NŒ classname”Njìjï)�”}”jò]”j㙌c.migrate_movable_ops_page”†”asbuh1hhj‡šubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇšh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‡šubj)�”}”(hŒmode”h]”hŒmode”…”�”}”(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&]”jjuh1j7hjh™h²hh³jz™h´KÔubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjd™h²hh³jz™h´KÔubah}”(h]”j_™ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jz™h´KÔhja™h²hubj4)�”}”(hhh]”jM)�”}”(hŒ$migrate an isolated movable_ops page”h]”hŒ$migrate an isolated movable_ops page”…”�”}”(hjÿšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´KÔhjüšh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hja™h²hh³jz™h´KÔubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj›jHj›jI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hXö**Parameters** ``struct page *dst`` The destination page. ``struct page *src`` The source page. ``enum migrate_mode mode`` The migration mode. **Description** Migrate an isolated movable_ops page. If the src page was already released by its owner, the src page is un-isolated (putback) and migration succeeds; the migration core will be the owner of both pages. If the src page was not released by its owner and the migration was successful, the owner of the src page and the dst page are swapped and the src page is un-isolated. If migration fails, the ownership stays unmodified and the src page remains isolated: migration may be retried later or the page can be putback. TODO: migration core will treat both pages as folios and lock them before this call to unlock them after this call. Further, the folio refcounts on src and dst are also released by migration core. These pages will not be folios in the future, so that must be reworked. Returns 0 on success, otherwise 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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´KØhj›ubj¤)�”}”(hhh]”(j©)�”}”(hŒ+``struct page *dst`` The destination page. ”h]”(j¯)�”}”(hŒ``struct page *dst``”h]”jS)�”}”(hj@›h]”hŒstruct page *dst”…”�”}”(hjB›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:127: ./mm/migrate.c”h´KÕhj:›ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe destination page.”h]”hŒThe destination page.”…”�”}”(hjY›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jU›h´KÕhjV›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj:›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jU›h´KÕhj7›ubj©)�”}”(hŒ&``struct page *src`` The source page. ”h]”(j¯)�”}”(hŒ``struct page *src``”h]”jS)�”}”(hjy›h]”hŒstruct page *src”…”�”}”(hj{›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjw›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´KÖhjs›ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe source page.”h]”hŒThe source page.”…”�”}”(hj’›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jŽ›h´KÖhj�›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjs›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŽ›h´KÖhj7›ubj©)�”}”(hŒ/``enum migrate_mode mode`` The migration mode. ”h]”(j¯)�”}”(hŒ``enum migrate_mode mode``”h]”jS)�”}”(hj²›h]”hŒenum migrate_mode mode”…”�”}”(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:127: ./mm/migrate.c”h´K×hj¬›ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe migration mode.”h]”hŒThe migration mode.”…”�”}”(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×hj7›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:127: ./mm/migrate.c”h´KÙhj›ubjM)�”}”(hŒ%Migrate an isolated movable_ops page.”h]”hŒ%Migrate an isolated movable_ops page.”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´KØhj›ubjM)�”}”(hŒ¤If the src page was already released by its owner, the src page is un-isolated (putback) and migration succeeds; the migration core will be the owner of both pages.”h]”hŒ¤If the src page was already released by its owner, the src page is un-isolated (putback) and migration succeeds; the migration core will be the owner of both pages.”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´KÚhj›ubjM)�”}”(hŒ§If the src page was not released by its owner and the migration was successful, the owner of the src page and the dst page are swapped and the src page is un-isolated.”h]”hŒ§If the src page was not released by its owner and the migration was successful, the owner of the src page and the dst page are swapped and the src page is un-isolated.”…”�”}”(hj!œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´KÞhj›ubjM)�”}”(hŒ�If migration fails, the ownership stays unmodified and the src page remains isolated: migration may be retried later or the page can be putback.”h]”hŒ�If migration fails, the ownership stays unmodified and the src page remains isolated: migration may be retried later or the page can be putback.”…”�”}”(hj0œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´Kâhj›ubjM)�”}”(hX TODO: migration core will treat both pages as folios and lock them before this call to unlock them after this call. Further, the folio refcounts on src and dst are also released by migration core. These pages will not be folios in the future, so that must be reworked.”h]”hX TODO: migration core will treat both pages as folios and lock them before this call to unlock them after this call. Further, the folio refcounts on src and dst are also released by migration core. These pages will not be folios in the future, so that must be reworked.”…”�”}”(hj?œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´Kåhj›ubjM)�”}”(hŒ6Returns 0 on success, otherwise a negative error code.”h]”hŒ6Returns 0 on success, otherwise a negative error code.”…”�”}”(hjNœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´Kêhj›ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmigrate_folio (C function)”Œc.migrate_folio”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒoint migrate_folio (struct address_space *mapping, struct folio *dst, struct folio *src, enum migrate_mode mode)”h]”hù)�”}”(hŒnint migrate_folio(struct address_space *mapping, struct folio *dst, struct folio *src, enum migrate_mode mode)”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hj}œh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjyœh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒœh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjyœh²hh³j‹œh´Mubhÿ)�”}”(hŒ migrate_folio”h]”j)�”}”(hŒ migrate_folio”h]”hŒ migrate_folio”…”�”}”(hjžœh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjšœubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjyœh²hh³j‹œh´Mubj8)�”}”(hŒ](struct address_space *mapping, struct folio *dst, struct folio *src, enum migrate_mode mode)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjºœh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¶œubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇœh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¶œubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jÚœŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj œsbŒc.migrate_folio”†”asbuh1hhj¶œubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjøœh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¶œubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¶œ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 folio *dst”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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(�ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjJ�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjG�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jL�Œmodname”NŒ classname”Njìjï)�”}”jò]”jôœŒc.migrate_folio”†”asbuh1hhj(�ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh�h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj(�ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjv�h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj(�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Œstruct folio *src”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjœ�h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj˜�ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©�h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj˜�ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjº�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj·�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j¼�Œmodname”NŒ classname”Njìjï)�”}”jò]”jôœŒc.migrate_folio”†”asbuh1hhj˜�ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØ�h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj˜�ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjæ�h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj˜�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Œenum migrate_mode mode”h]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(hj žh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjžubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjžubh)�”}”(hhh]”j)�”}”(hŒ migrate_mode”h]”hŒ migrate_mode”…”�”}”(hj*žh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj'žubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j,žŒmodname”NŒ classname”Njìjï)�”}”jò]”jôœŒc.migrate_folio”†”asbuh1hhjžubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHžh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjžubj)�”}”(hŒmode”h]”hŒmode”…”�”}”(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&]”jjuh1j7hjyœh²hh³j‹œh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjuœh²hh³j‹œh´Mubah}”(h]”jpœah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j‹œh´Mhjrœh²hubj4)�”}”(hhh]”jM)�”}”(hŒSimple folio migration.”h]”hŒSimple folio migration.”…”�”}”(hj€žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´Mhj}žh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjrœh²hh³j‹œh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj˜žjHj˜žjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hX¯**Parameters** ``struct address_space *mapping`` The address_space containing the folio. ``struct folio *dst`` The folio to migrate the data to. ``struct folio *src`` The folio containing the current data. ``enum migrate_mode mode`` How to migrate the folio. **Description** Common logic to directly migrate a single LRU folio suitable for folios that do not have private data. Folios are locked upon entry and exit.”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:127: ./mm/migrate.c”h´Mƒhjœžubj¤)�”}”(hhh]”(j©)�”}”(hŒJ``struct address_space *mapping`` The address_space containing 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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´M€hj»žubjÉ)�”}”(hhh]”jM)�”}”(hŒ'The address_space containing the folio.”h]”hŒ'The address_space containing 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Œ8``struct folio *dst`` The folio to migrate the data to. ”h]”(j¯)�”}”(hŒ``struct folio *dst``”h]”jS)�”}”(hjúžh]”hŒstruct folio *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:127: ./mm/migrate.c”h´M�hjôžubjÉ)�”}”(hhh]”jM)�”}”(hŒ!The folio to migrate the data to.”h]”hŒ!The folio to migrate the data 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Œ=``struct folio *src`` The folio containing the current data. ”h]”(j¯)�”}”(hŒ``struct folio *src``”h]”jS)�”}”(hj3Ÿh]”hŒstruct folio *src”…”�”}”(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:127: ./mm/migrate.c”h´M‚hj-ŸubjÉ)�”}”(hhh]”jM)�”}”(hŒ&The folio containing the current data.”h]”hŒ&The folio containing the current data.”…”�”}”(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Œ5``enum migrate_mode mode`` How to migrate the folio. ”h]”(j¯)�”}”(hŒ``enum migrate_mode mode``”h]”jS)�”}”(hjlŸh]”hŒenum migrate_mode mode”…”�”}”(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:127: ./mm/migrate.c”h´MƒhjfŸubjÉ)�”}”(hhh]”jM)�”}”(hŒHow to migrate the folio.”h]”hŒHow to migrate the folio.”…”�”}”(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¸ž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:127: ./mm/migrate.c”h´M…hjœžubjM)�”}”(hŒfCommon logic to directly migrate a single LRU folio suitable for folios that do not have private data.”h]”hŒfCommon logic to directly migrate a single LRU folio suitable for folios that do not have private data.”…”�”}”(hj½Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´M„hjœžubjM)�”}”(hŒ&Folios are locked upon entry and exit.”h]”hŒ&Folios are locked upon entry and exit.”…”�”}”(hjÌŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´M‡hjœžubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!buffer_migrate_folio (C function)”Œc.buffer_migrate_folio”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒvint buffer_migrate_folio (struct address_space *mapping, struct folio *dst, struct folio *src, enum migrate_mode mode)”h]”hù)�”}”(hŒuint buffer_migrate_folio(struct address_space *mapping, struct folio *dst, struct folio *src, enum migrate_mode mode)”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:127: ./mm/migrate.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Œbuffer_migrate_folio”h]”j)�”}”(hŒbuffer_migrate_folio”h]”hŒbuffer_migrate_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üubj8)�”}”(hŒ](struct address_space *mapping, struct folio *dst, struct folio *src, enum migrate_mode mode)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj4 ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjE h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj4 ubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjS ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jX Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj sbŒc.buffer_migrate_folio”†”asbuh1hhj4 ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj4 ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj„ h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj4 ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj‘ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4 ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj0 ubj>)�”}”(hŒstruct folio *dst”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjª h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¦ ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj· h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¦ ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÈ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÅ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÊ Œmodname”NŒ classname”Njìjï)�”}”jò]”jr Œc.buffer_migrate_folio”†”asbuh1hhj¦ ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæ h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¦ ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjô h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¦ 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=hj0 ubj>)�”}”(hŒstruct folio *src”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¡ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'¡h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¡ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj8¡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj5¡ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j:¡Œmodname”NŒ classname”Njìjï)�”}”jò]”jr Œc.buffer_migrate_folio”†”asbuh1hhj¡ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjV¡h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¡ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjd¡h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¡ubj)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hjq¡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj0 ubj>)�”}”(hŒenum migrate_mode mode”h]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(hjŠ¡h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj†¡ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—¡h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj†¡ubh)�”}”(hhh]”j)�”}”(hŒ migrate_mode”h]”hŒ migrate_mode”…”�”}”(hj¨¡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¥¡ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jª¡Œmodname”NŒ classname”Njìjï)�”}”jò]”jr Œc.buffer_migrate_folio”†”asbuh1hhj†¡ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆ¡h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj†¡ubj)�”}”(hŒmode”h]”hŒmode”…”�”}”(hjÔ¡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj†¡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj0 ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj÷Ÿ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Œ+Migration function for folios with buffers.”h]”hŒ+Migration function for folios with buffers.”…”�”}”(hjþ¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.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²hhjKòh³Nh´Nubj„)�”}”(hXi**Parameters** ``struct address_space *mapping`` The address space containing **src**. ``struct folio *dst`` The folio to migrate to. ``struct folio *src`` The folio to migrate from. ``enum migrate_mode mode`` How to migrate the folio. **Description** This function can only be used if the underlying filesystem guarantees that no other references to **src** exist. For example attached buffer heads are accessed only under the folio lock. If your filesystem cannot provide this guarantee, buffer_migrate_folio_norefs() may be more appropriate. **Return** 0 on success or a negative 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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´Mhj¢ubj¤)�”}”(hhh]”(j©)�”}”(hŒH``struct address_space *mapping`` The address space containing **src**. ”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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´Mýhj9¢ubjÉ)�”}”(hhh]”jM)�”}”(hŒ%The address space containing **src**.”h]”(hŒThe address space containing ”…”�”}”(hjX¢h²hh³Nh´NubjŽ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hj`¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjX¢ubhŒ.”…”�”}”(hjX¢h²hh³Nh´Nubeh}”(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Œ/``struct folio *dst`` The folio to migrate to. ”h]”(j¯)�”}”(hŒ``struct folio *dst``”h]”jS)�”}”(hjŠ¢h]”hŒstruct folio *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:127: ./mm/migrate.c”h´Mþhj„¢ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to migrate to.”h]”hŒThe folio to migrate 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þhj6¢ubj©)�”}”(hŒ1``struct folio *src`` The folio to migrate from. ”h]”(j¯)�”}”(hŒ``struct folio *src``”h]”jS)�”}”(hjâh]”hŒstruct folio *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:127: ./mm/migrate.c”h´Mÿhj½¢ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to migrate from.”h]”hŒThe folio to migrate 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ÿhj6¢ubj©)�”}”(hŒ5``enum migrate_mode mode`` How to migrate the folio. ”h]”(j¯)�”}”(hŒ``enum migrate_mode mode``”h]”jS)�”}”(hjü¢h]”hŒenum migrate_mode mode”…”�”}”(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:127: ./mm/migrate.c”h´Mhjö¢ubjÉ)�”}”(hhh]”jM)�”}”(hŒHow to migrate the folio.”h]”hŒHow to migrate 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´Mhj6¢ubeh}”(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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´Mhj¢ubjM)�”}”(hX%This function can only be used if the underlying filesystem guarantees that no other references to **src** exist. For example attached buffer heads are accessed only under the folio lock. If your filesystem cannot provide this guarantee, buffer_migrate_folio_norefs() may be more appropriate.”h]”(hŒcThis function can only be used if the underlying filesystem guarantees that no other references to ”…”�”}”(hjM£h²hh³Nh´NubjŽ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hjU£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjM£ubhŒ» exist. For example attached buffer heads are accessed only under the folio lock. If your filesystem cannot provide this guarantee, buffer_migrate_folio_norefs() may be more appropriate.”…”�”}”(hjM£h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´Mhj¢ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjp£h]”hŒReturn”…”�”}”(hjr£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjn£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´Mhj¢ubjM)�”}”(hŒ,0 on success or a negative errno on failure.”h]”hŒ,0 on success or a negative errno on failure.”…”�”}”(hj†£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´Mhj¢ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ(buffer_migrate_folio_norefs (C function)”Œc.buffer_migrate_folio_norefs”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ}int buffer_migrate_folio_norefs (struct address_space *mapping, struct folio *dst, struct folio *src, enum migrate_mode mode)”h]”hù)�”}”(hŒ|int buffer_migrate_folio_norefs(struct address_space *mapping, struct folio *dst, struct folio *src, enum migrate_mode mode)”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:127: ./mm/migrate.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Œbuffer_migrate_folio_norefs”h]”j)�”}”(hŒbuffer_migrate_folio_norefs”h]”hŒbuffer_migrate_folio_norefs”…”�”}”(hjÖ£h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÒ£ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj±£h²hh³jãh´Mubj8)�”}”(hŒ](struct address_space *mapping, struct folio *dst, struct folio *src, enum migrate_mode mode)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjò£h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjî£ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ£h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjî£ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j¤Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjØ£sbŒc.buffer_migrate_folio_norefs”†”asbuh1hhjî£ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0¤h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjî£ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj>¤h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjî£ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjK¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjî£ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjê£ubj>)�”}”(hŒstruct folio *dst”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjd¤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`¤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”jèŒ reftarget”j„¤Œmodname”NŒ classname”Njìjï)�”}”jò]”j,¤Œc.buffer_migrate_folio_norefs”†”asbuh1hhj`¤ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ¤h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj`¤ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj®¤h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj`¤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Œstruct folio *src”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÔ¤h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjФubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjá¤h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjФubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjò¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjï¤ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jô¤Œmodname”NŒ classname”Njìjï)�”}”jò]”j,¤Œc.buffer_migrate_folio_norefs”†”asbuh1hhjФubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjФubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjФ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Œenum migrate_mode mode”h]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(hjD¥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@¥ubh)�”}”(hhh]”j)�”}”(hŒ migrate_mode”h]”hŒ migrate_mode”…”�”}”(hjb¥h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj_¥ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jd¥Œmodname”NŒ classname”Njìjï)�”}”jò]”j,¤Œc.buffer_migrate_folio_norefs”†”asbuh1hhj@¥ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€¥h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj@¥ubj)�”}”(hŒmode”h]”hŒmode”…”�”}”(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&]”jjuh1j7hj±£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Œ+Migration function for folios with buffers.”h]”hŒ+Migration function for folios with buffers.”…”�”}”(hj¸¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.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²hhjKòh³Nh´Nubj„)�”}”(hXH**Parameters** ``struct address_space *mapping`` The address space containing **src**. ``struct folio *dst`` The folio to migrate to. ``struct folio *src`` The folio to migrate from. ``enum migrate_mode mode`` How to migrate the folio. **Description** Like buffer_migrate_folio() except that this variant is more careful and checks that there are also no buffer head references. This function is the right one for mappings where buffer heads are directly looked up and referenced (such as block device mappings). **Return** 0 on success or a negative 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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´MhjÔ¥ubj¤)�”}”(hhh]”(j©)�”}”(hŒH``struct address_space *mapping`` The address space containing **src**. ”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:127: ./mm/migrate.c”h´Mhjó¥ubjÉ)�”}”(hhh]”jM)�”}”(hŒ%The address space containing **src**.”h]”(hŒThe address space containing ”…”�”}”(hj¦h²hh³Nh´NubjŽ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(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´Mhj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjó¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¦h´Mhjð¥ubj©)�”}”(hŒ/``struct folio *dst`` The folio to migrate to. ”h]”(j¯)�”}”(hŒ``struct folio *dst``”h]”jS)�”}”(hjD¦h]”hŒstruct folio *dst”…”�”}”(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:127: ./mm/migrate.c”h´Mhj>¦ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to migrate to.”h]”hŒThe folio to migrate to.”…”�”}”(hj]¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jY¦h´MhjZ¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj>¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jY¦h´Mhjð¥ubj©)�”}”(hŒ1``struct folio *src`` The folio to migrate from. ”h]”(j¯)�”}”(hŒ``struct folio *src``”h]”jS)�”}”(hj}¦h]”hŒstruct folio *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:127: ./mm/migrate.c”h´Mhjw¦ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to migrate from.”h]”hŒThe folio to migrate from.”…”�”}”(hj–¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j’¦h´Mhj“¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjw¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j’¦h´Mhjð¥ubj©)�”}”(hŒ5``enum migrate_mode mode`` How to migrate the folio. ”h]”(j¯)�”}”(hŒ``enum migrate_mode mode``”h]”jS)�”}”(hj¶¦h]”hŒenum migrate_mode mode”…”�”}”(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:127: ./mm/migrate.c”h´Mhj°¦ubjÉ)�”}”(hhh]”jM)�”}”(hŒHow to migrate the folio.”h]”hŒHow to migrate 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ð¥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:127: ./mm/migrate.c”h´MhjÔ¥ubjM)�”}”(hXLike buffer_migrate_folio() except that this variant is more careful and checks that there are also no buffer head references. This function is the right one for mappings where buffer heads are directly looked up and referenced (such as block device mappings).”h]”hXLike buffer_migrate_folio() except that this variant is more careful and checks that there are also no buffer head references. This function is the right one for mappings where buffer heads are directly looked up and referenced (such as block device mappings).”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´MhjÔ¥ubjM)�”}”(hŒ,0 on success or a negative errno on failure.”h]”hŒ,0 on success or a negative errno on failure.”…”�”}”(hj.§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:127: ./mm/migrate.c”h´MhjÔ¥ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒdo_mmap (C function)”Œ c.do_mmap”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒÔunsigned long do_mmap (struct file *file, unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, vma_flags_t vma_flags, unsigned long pgoff, unsigned long *populate, struct list_head *uf)”h]”hù)�”}”(hŒÓunsigned long do_mmap(struct file *file, unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, vma_flags_t vma_flags, unsigned long pgoff, unsigned long *populate, struct list_head *uf)”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj]§h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjY§h²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl§h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjY§h²hh³jk§h´Mubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjz§h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjY§h²hh³jk§h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ§h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjY§h²hh³jk§h´Mubhÿ)�”}”(hŒdo_mmap”h]”j)�”}”(hŒdo_mmap”h]”hŒdo_mmap”…”�”}”(hjš§h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj–§ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjY§h²hh³jk§h´Mubj8)�”}”(hŒ¾(struct file *file, unsigned long addr, unsigned long len, unsigned long prot, unsigned long flags, vma_flags_t vma_flags, unsigned long pgoff, unsigned long *populate, struct list_head *uf)”h]”(j>)�”}”(hŒstruct file *file”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¶§h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj²§ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj²§ubh)�”}”(hhh]”j)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjÔ§h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjѧubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÖ§Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjœ§sbŒ c.do_mmap”†”asbuh1hhj²§ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjô§h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj²§ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj²§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Œ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Œ ”…”�”}”(hj6¨h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj$¨ubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(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Œ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 len”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjy¨h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhju¨ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡¨h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhju¨ubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj•¨h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhju¨ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£¨h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhju¨ubj)�”}”(hŒlen”h]”hŒlen”…”�”}”(hj±¨h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhju¨ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj®§ubj>)�”}”(hŒunsigned long prot”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Œprot”h]”hŒprot”…”�”}”(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”…”�”}”(hj7©h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj©ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjE©h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj©ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjS©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj®§ubj>)�”}”(hŒvma_flags_t vma_flags”h]”(h)�”}”(hhh]”j)�”}”(hŒ vma_flags_t”h]”hŒ vma_flags_t”…”�”}”(hjo©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjl©ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jq©Œmodname”NŒ classname”Njìjï)�”}”jò]”j𧌠c.do_mmap”†”asbuh1hhjh©ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�©h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjh©ubj)�”}”(hŒ vma_flags”h]”hŒ vma_flags”…”�”}”(hj›©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjh©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj®§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=hj®§ubj>)�”}”(hŒunsigned long *populate”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ªubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj=ªh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjªubj)�”}”(hŒpopulate”h]”hŒpopulate”…”�”}”(hjJªh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj®§ubj>)�”}”(hŒstruct list_head *uf”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjcª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_ª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”jèŒ reftarget”jƒªŒmodname”NŒ classname”Njìjï)�”}”jò]”j𧌠c.do_mmap”†”asbuh1hhj_ªubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸªh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj_ªubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj­ªh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj_ªubj)�”}”(hŒuf”h]”hŒuf”…”�”}”(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&]”jjuh1j7hjY§h²hh³jk§h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjU§h²hh³jk§h´Mubah}”(h]”jP§ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jk§h´MhjR§h²hubj4)�”}”(hhh]”jM)�”}”(hXaPerform a userland memory mapping into the current process address space of length **len** with protection bits **prot**, mmap flags **flags** (from which VMA flags will be inferred), and any additional VMA flags to apply **vma_flags**. If this is a file-backed mapping then the file is specified in **file** and page offset into the file via **pgoff**.”h]”(hŒSPerform a userland memory mapping into the current process address space of length ”…”�”}”(hjäªh²hh³Nh´NubjŽ)�”}”(hŒ**len**”h]”hŒlen”…”�”}”(hjìªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjäªubhŒ with protection bits ”…”�”}”(hjäªh²hh³Nh´NubjŽ)�”}”(hŒ**prot**”h]”hŒprot”…”�”}”(hjþªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjäªubhŒ , mmap flags ”…”�”}”(hjäªh²hh³Nh´NubjŽ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjäªubhŒP (from which VMA flags will be inferred), and any additional VMA flags to apply ”…”�”}”(hjäªh²hh³Nh´NubjŽ)�”}”(hŒ **vma_flags**”h]”hŒ vma_flags”…”�”}”(hj"«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjäªubhŒA. If this is a file-backed mapping then the file is specified in ”…”�”}”(hjäªh²hh³Nh´NubjŽ)�”}”(hŒ**file**”h]”hŒfile”…”�”}”(hj4«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjäªubhŒ# and page offset into the file via ”…”�”}”(hjäªh²hh³Nh´NubjŽ)�”}”(hŒ **pgoff**”h]”hŒpgoff”…”�”}”(hjF«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:128: ./mm/mmap.c”h´Mhjáªh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjR§h²hh³jk§h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjh«jHjh«jI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hX5 **Parameters** ``struct file *file`` An optional struct file pointer describing the file which is to be mapped, if a file-backed mapping. ``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. ``unsigned long len`` The length of the mapping. Will be page-aligned and must be at least 1 page in size. ``unsigned long prot`` Protection bits describing access required to the mapping. See mmap (2) for details. ``unsigned long flags`` Flags specifying how the mapping should be performed, see mmap (2) for details. ``vma_flags_t vma_flags`` VMA flags which should be set by default, or EMPTY_VMA_FLAGS otherwise. ``unsigned long pgoff`` Page offset into the **file** if file-backed, should be 0 otherwise. ``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. ``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. **Description** 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**. 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. 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. Callers which require userland mmap() behaviour should invoke vm_mmap(), which is also exported for module use. Those which require this behaviour less security checks, userfaultfd and populate behaviour, and who handle the mmap write lock themselves, should call this function. 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. The caller must write-lock current->mm->mmap_lock. **Return** Either an error, or the address at which the requested mapping has been performed.”•h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjr«h]”hŒ Parameters”…”�”}”(hjt«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjp«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´Mhjl«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)�”}”(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³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./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:128: ./mm/mmap.c”h´M9hj§«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`` 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:128: ./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:128: ./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=hjˆ«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:128: ./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.”…”�”}”(hj0¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./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?hjˆ«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)�”}”(hjQ¬h]”hŒunsigned long prot”…”�”}”(hjS¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjO¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´MAhjK¬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.”…”�”}”(hjj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´M@hjg¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjK¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jf¬h´MAhjˆ«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&]”uh1jRhj‰¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´MChj…¬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.”…”�”}”(hj¤¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´MBhj¡¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj…¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j ¬h´MChjˆ«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:128: ./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:128: ./mm/mmap.c”h´MDhjÛ¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¿¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÚ¬h´MEhjˆ«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:128: ./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´MFhjˆ«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)�”}”(hjJ­h]”hŒunsigned long *populate”…”�”}”(hjL­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjH­ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´MJhjD­ubjÉ)�”}”(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.”…”�”}”(hjc­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´MGhj`­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjD­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j_­h´MJhjˆ«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)�”}”(hj„­h]”hŒstruct list_head *uf”…”�”}”(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:128: ./mm/mmap.c”h´MMhj~­ubjÉ)�”}”(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.”…”�”}”(hj�­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´MKhjš­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£hjl«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:128: ./mm/mmap.c”h´MOhjl«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Ö­h²hh³Nh´NubjŽ)�”}”(hŒ**uf**”h]”hŒuf”…”�”}”(hjÞ­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÖ­ubhŒX is non-NULL, the caller has provided a list head to track unmap events for userfaultfd ”…”�”}”(hjÖ­h²hh³Nh´NubjŽ)�”}”(hŒ**uf**”h]”hŒuf”…”�”}”(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:128: ./mm/mmap.c”h´Mhjl«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 ®h²hh³Nh´NubjŽ)�”}”(hŒ **populate**”h]”hŒpopulate”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ®ubhŒc, which must be non-NULL, expecting the caller to actually perform this task itself if appropriate.”…”�”}”(hj ®h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´Mhjl«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*®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´M"hjl«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.”…”�”}”(hj9®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´M&hjl«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.”…”�”}”(hjH®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´M)hjl«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 ”…”�”}”(hjW®h²hh³Nh´NubjŽ)�”}”(hŒ**len**”h]”hŒlen”…”�”}”(hj_®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjW®ubhŒ. bytes, rounded down to the nearest page size.”…”�”}”(hjW®h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´M-hjl«ubjM)�”}”(hŒ2The caller must write-lock current->mm->mmap_lock.”h]”hŒ2The caller must write-lock current->mm->mmap_lock.”…”�”}”(hjx®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´M2hjl«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:128: ./mm/mmap.c”h´M4hjl«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.”…”�”}”(hjŸ®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´MOhjl«ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"find_vma_intersection (C function)”Œc.find_vma_intersection”hNt”auh1hÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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:128: ./mm/mmap.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Œ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”jèŒ reftarget”jﮌmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒfind_vma_intersection”sbŒc.find_vma_intersection”†”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{ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÊ®h²hh³jÛ®h´M{ubhÿ)�”}”(hŒfind_vma_intersection”h]”j)�”}”(hj ¯h]”hŒfind_vma_intersection”…”�”}”(hj-¯h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj)¯ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÊ®h²hh³jÛ®h´M{ubj8)�”}”(hŒH(struct mm_struct *mm, unsigned long start_addr, unsigned long end_addr)”h]”(j>)�”}”(hŒstruct mm_struct *mm”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjH¯h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjD¯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”…”�”}”(hjf¯h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjc¯ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jh¯Œmodname”NŒ classname”Njìjï)�”}”jò]”j ¯Œc.find_vma_intersection”†”asbuh1hhjD¯ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„¯h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjD¯ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj’¯h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjD¯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@¯ubj>)�”}”(hŒunsigned long start_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Œ start_addr”h]”hŒ start_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_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Œ ”…”�”}”(hj3°h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj°ubj)�”}”(hŒend_addr”h]”hŒend_addr”…”�”}”(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&]”jjuh1j7hjÊ®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Œ3Look up the first VMA which intersects the interval”h]”hŒ3Look up the first VMA which intersects the interval”…”�”}”(hjk°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.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²hhjKòh³Nh´Nubj„)�”}”(hX/**Parameters** ``struct mm_struct *mm`` The process address space. ``unsigned long start_addr`` The inclusive start user address. ``unsigned long end_addr`` The exclusive end user address. **Return** The first VMA within the provided range, ``NULL`` otherwise. Assumes start_addr < end_addr.”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:128: ./mm/mmap.c”h´Mhj‡°ubj¤)�”}”(hhh]”(j©)�”}”(hŒ4``struct mm_struct *mm`` The process address space. ”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³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´M|hj¦°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Èhj¦°ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÁ°h´M|hj£°ubj©)�”}”(hŒ?``unsigned long start_addr`` The inclusive start user address. ”h]”(j¯)�”}”(hŒ``unsigned long start_addr``”h]”jS)�”}”(hjå°h]”hŒunsigned long start_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:128: ./mm/mmap.c”h´M}hjß°ubjÉ)�”}”(hhh]”jM)�”}”(hŒ!The inclusive start user address.”h]”hŒ!The inclusive start 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}hj£°ubj©)�”}”(hŒ;``unsigned long end_addr`` The exclusive end user address. ”h]”(j¯)�”}”(hŒ``unsigned long end_addr``”h]”jS)�”}”(hj±h]”hŒunsigned long end_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:128: ./mm/mmap.c”h´M~hj±ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe exclusive end user address.”h]”hŒThe exclusive end user address.”…”�”}”(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Œ **Return**”h]”jŽ)�”}”(hjY±h]”hŒReturn”…”�”}”(hj[±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjW±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´M€hj‡°ubjM)�”}”(hŒ\The first VMA within the provided range, ``NULL`` otherwise. Assumes start_addr < end_addr.”h]”(hŒ)The first VMA within the provided range, ”…”�”}”(hjo±h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjw±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjo±ubhŒ+ otherwise. Assumes start_addr < end_addr.”…”�”}”(hjo±h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´M€hj‡°ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfind_vma (C function)”Œ c.find_vma”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒKstruct vm_area_struct * find_vma (struct mm_struct *mm, unsigned long addr)”h]”hù)�”}”(hŒIstruct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr)”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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:128: ./mm/mmap.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Œ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”jèŒ reftarget”jѱŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒfind_vma”sbŒ c.find_vma”†”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�ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjþ±h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¬±h²hh³j½±h´M�ubhÿ)�”}”(hŒfind_vma”h]”j)�”}”(hjí±h]”hŒfind_vma”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ²ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¬±h²hh³j½±h´M�ubj8)�”}”(hŒ*(struct mm_struct *mm, unsigned long addr)”h]”(j>)�”}”(hŒstruct mm_struct *mm”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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&²ubh)�”}”(hhh]”j)�”}”(hŒ mm_struct”h]”hŒ mm_struct”…”�”}”(hjH²h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjE²ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jJ²Œmodname”NŒ classname”Njìjï)�”}”jò]”j뱌 c.find_vma”†”asbuh1hhj&²ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjf²h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj&²ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjt²h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj&²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Œ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Œ ”…”�”}”(hjIJh²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"²ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj¬±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Œ2Find the VMA for a given address, or the next VMA.”h]”hŒ2Find the VMA for a given address, or the next VMA.”…”�”}”(hjü²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.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²hhjKòh³Nh´Nubj„)�”}”(hŒß**Parameters** ``struct mm_struct *mm`` The mm_struct to check ``unsigned long addr`` The address **Return** The VMA associated with addr, or the next VMA. May return ``NULL`` in the case of no VMA at addr or above.”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:128: ./mm/mmap.c”h´M“hj³ubj¤)�”}”(hhh]”(j©)�”}”(hŒ0``struct mm_struct *mm`` The mm_struct to check ”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³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´M�hj7³ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe mm_struct to check”h]”hŒThe mm_struct to check”…”�”}”(hjV³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jR³h´M�hjS³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj7³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jR³h´M�hj4³ubj©)�”}”(hŒ#``unsigned long addr`` The address ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hjv³h]”hŒunsigned long addr”…”�”}”(hjx³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjt³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´M‘hjp³ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The address”h]”hŒ The address”…”�”}”(hj�³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‹³h´M‘hjŒ³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjp³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‹³h´M‘hj4³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³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´M“hj³ubjM)�”}”(hŒjThe VMA associated with addr, or the next VMA. May return ``NULL`` in the case of no VMA at addr or above.”h]”(hŒ:The VMA associated with addr, or the next VMA. May return ”…”�”}”(hjdzh²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjϳh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjdzubhŒ( in the case of no VMA at addr or above.”…”�”}”(hjdzh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´M“hj³ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfind_vma_prev (C function)”Œc.find_vma_prev”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒostruct vm_area_struct * find_vma_prev (struct mm_struct *mm, unsigned long addr, struct vm_area_struct **pprev)”h]”hù)�”}”(hŒmstruct vm_area_struct *find_vma_prev(struct mm_struct *mm, unsigned long addr, struct vm_area_struct **pprev)”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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:128: ./mm/mmap.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Œ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”jèŒ reftarget”j)´Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒ find_vma_prev”sbŒc.find_vma_prev”†”asbuh1hhj´h²hh³j´h´M ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjH´h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj´h²hh³j´h´M ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjV´h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj´h²hh³j´h´M ubhÿ)�”}”(hŒ find_vma_prev”h]”j)�”}”(hjE´h]”hŒ find_vma_prev”…”�”}”(hjg´h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjc´ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj´h²hh³j´h´M ubj8)�”}”(hŒI(struct mm_struct *mm, unsigned long addr, struct vm_area_struct **pprev)”h]”(j>)�”}”(hŒstruct mm_struct *mm”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj‚´h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj~´ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�´h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj~´ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j¢´Œmodname”NŒ classname”Njìjï)�”}”jò]”jC´Œc.find_vma_prev”†”asbuh1hhj~´ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾´h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj~´ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÌ´h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj~´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=hjz´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=hjz´ubj>)�”}”(hŒstruct vm_area_struct **pprev”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjCµ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?µubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjaµh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj^µubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jcµŒmodname”NŒ classname”Njìjï)�”}”jò]”jC´Œc.find_vma_prev”†”asbuh1hhj?µubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj?µubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj�µh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj?µubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjšµh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj?µubj)�”}”(hŒpprev”h]”hŒpprev”…”�”}”(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&]”jjuh1j7hj´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 VMA for a given address, or the next vma and set ``pprev`` to the previous VMA, if any.”h]”(hŒ:Find the VMA for a given address, or the next vma and set ”…”�”}”(hjѵh²hh³Nh´NubjS)�”}”(hŒ ``pprev``”h]”hŒpprev”…”�”}”(hjÙµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjѵubhŒ to the previous VMA, if any.”…”�”}”(hjѵh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.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²hhjKòh³Nh´Nubj„)�”}”(hX”**Parameters** ``struct mm_struct *mm`` The mm_struct to check ``unsigned long addr`` The address ``struct vm_area_struct **pprev`` The pointer to set to the previous VMA **Description** Note that RCU lock is missing here since the external mmap_lock() is used instead. **Return** The VMA associated with **addr**, or the next vma. May return ``NULL`` in the case of no vma at addr or above.”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:128: ./mm/mmap.c”h´M¤hjÿµubj¤)�”}”(hhh]”(j©)�”}”(hŒ0``struct mm_struct *mm`` The mm_struct to check ”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³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´M¢hj¶ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe mm_struct to check”h]”hŒThe mm_struct to check”…”�”}”(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Œ#``unsigned long addr`` The 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³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´M£hjW¶ubjÉ)�”}”(hhh]”jM)�”}”(hŒ The address”h]”hŒ The address”…”�”}”(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£hj¶ubj©)�”}”(hŒI``struct vm_area_struct **pprev`` The pointer to set to the previous VMA ”h]”(j¯)�”}”(hŒ!``struct vm_area_struct **pprev``”h]”jS)�”}”(hj–¶h]”hŒstruct vm_area_struct **pprev”…”�”}”(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:128: ./mm/mmap.c”h´M¤hj�¶ubjÉ)�”}”(hhh]”jM)�”}”(hŒ&The pointer to set to the previous VMA”h]”hŒ&The pointer to set to the previous 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¶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:128: ./mm/mmap.c”h´M¦hjÿµubjM)�”}”(hŒRNote that RCU lock is missing here since the external mmap_lock() is used instead.”h]”hŒRNote that RCU lock is missing here since the external mmap_lock() is used instead.”…”�”}”(hjç¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.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:128: ./mm/mmap.c”h´M¨hjÿµubjM)�”}”(hŒnThe VMA associated with **addr**, or the next vma. May return ``NULL`` in the case of no vma at addr or above.”h]”(hŒThe VMA associated with ”…”�”}”(hj·h²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj·ubhŒ, or the next vma. May return ”…”�”}”(hj·h²hh³Nh´NubjS)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj(·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj·ubhŒ( in the case of no vma at addr or above.”…”�”}”(hj·h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒJ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:128: ./mm/mmap.c”h´M©hjÿµubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmemleak_alloc (C function)”Œc.kmemleak_alloc”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒRvoid __ref kmemleak_alloc (const void *ptr, size_t size, int min_count, gfp_t gfp)”h]”hù)�”}”(hŒQvoid __ref kmemleak_alloc(const void *ptr, size_t size, int min_count, gfp_t gfp)”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hja·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:129: ./mm/kmemleak.c”h´MKubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjp·h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj]·h²hh³jo·h´MKubhŒ__ref”…”�”}”(hj]·h²hh³Nh´Nubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚·h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj]·h²hh³jo·h´MKubhÿ)�”}”(hŒkmemleak_alloc”h]”j)�”}”(hŒkmemleak_alloc”h]”hŒkmemleak_alloc”…”�”}”(hj”·h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�·ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj]·h²hh³jo·h´MKubj8)�”}”(hŒ8(const void *ptr, size_t size, int min_count, gfp_t gfp)”h]”(j>)�”}”(hŒconst void *ptr”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œ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¬·ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjç·h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¬·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¨·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”jèŒ reftarget”j¸Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj–·sbŒc.kmemleak_alloc”†”asbuh1hhj ¸ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0¸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Œ int min_count”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjW¸h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjS¸ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hje¸h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjS¸ubj)�”}”(hŒ min_count”h]”hŒ min_count”…”�”}”(hjs¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjS¸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”jèŒ reftarget”j‘¸Œmodname”NŒ classname”Njìjï)�”}”jò]”j,¸Œc.kmemleak_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¨·ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj]·h²hh³jo·h´MKubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjY·h²hh³jo·h´MKubah}”(h]”jT·ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jo·h´MKhjV·h²hubj4)�”}”(hhh]”jM)�”}”(hŒ!register a newly allocated object”h]”hŒ!register a newly allocated object”…”�”}”(hjå¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´MKhjâ¸h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjV·h²hh³jo·h´MKubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjý¸jHjý¸jI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hX®**Parameters** ``const void *ptr`` pointer to beginning of the object ``size_t size`` size of the object ``int min_count`` minimum 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) ``gfp_t gfp`` kmalloc() flags used for kmemleak internal memory allocations **Description** This function is called from the kernel allocators when a new object (memory block) is allocated (kmem_cache_alloc, kmalloc etc.).”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:129: ./mm/kmemleak.c”h´MOhj¹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:129: ./mm/kmemleak.c”h´MLhj ¹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´MLhj<¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j;¹h´MLhj¹ubj©)�”}”(hŒ#``size_t size`` size of the object ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hj_¹h]”hŒ size_t size”…”�”}”(hja¹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:129: ./mm/kmemleak.c”h´MMhjY¹ubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of the object”h]”hŒsize of the object”…”�”}”(hjx¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jt¹h´MMhju¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjY¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jt¹h´MMhj¹ubj©)�”}”(hXQ``int min_count`` minimum 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]”(j¯)�”}”(hŒ``int min_count``”h]”jS)�”}”(hj˜¹h]”hŒ int min_count”…”�”}”(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:129: ./mm/kmemleak.c”h´MRhj’¹ubjÉ)�”}”(hhh]”jM)�”}”(hX>minimum 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±¹h²hh³Nh´NubjŽ)�”}”(hŒ **min_count**”h]”hŒ min_count”…”�”}”(hj¹¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj±¹ubhŒ7 is found, the object is reported as a memory leak. If ”…”�”}”(hj±¹h²hh³Nh´NubjŽ)�”}”(hŒ **min_count**”h]”hŒ min_count”…”�”}”(hj˹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj±¹ubhŒ2 is 0, the object is never reported as a leak. If ”…”�”}”(hj±¹h²hh³Nh´NubjŽ)�”}”(hŒ **min_count**”h]”hŒ min_count”…”�”}”(hjݹh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj±¹ubhŒF is -1, the object is ignored (not scanned and not reported as a leak)”…”�”}”(hj±¹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´MNhj®¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj’¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j­¹h´MRhj¹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:129: ./mm/kmemleak.c”h´MShjº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´MShjºubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjºubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jºh´MShj¹ubeh}”(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³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´MUhj¹ubjM)�”}”(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.).”…”�”}”(hjYºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´MThj¹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"kmemleak_alloc_percpu (C function)”Œc.kmemleak_alloc_percpu”hNt”auh1hÜhjKò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”…”�”}”(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:129: ./mm/kmemleak.c”h´Mcubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—ºh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj„ºh²hh³j–ºh´McubhŒ__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´Mcubhÿ)�”}”(hŒkmemleak_alloc_percpu”h]”j)�”}”(hŒkmemleak_alloc_percpu”h]”hŒkmemleak_alloc_percpu”…”�”}”(hj»ºh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj·ºubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj„ºh²hh³j–ºh´Mcubj8)�”}”(hŒ2(const void __percpu *ptr, size_t size, gfp_t gfp)”h]”(j>)�”}”(hŒconst void __percpu *ptr”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œ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Œ__percpu”…”�”}”(hjÓºh²hh³Nh´Nubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÓºubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj »h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÓº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Ϻubj>)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjI»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjF»ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jK»Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj½ºsbŒc.kmemleak_alloc_percpu”†”asbuh1hhjB»ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hji»h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjB»ubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjw»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjB»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”jèŒ reftarget”j•»Œmodname”NŒ classname”Njìjï)�”}”jò]”je»Œc.kmemleak_alloc_percpu”†”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&]”jjuh1j7hj„º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Œ*register a newly allocated __percpu object”h]”hŒ*register a newly allocated __percpu object”…”�”}”(hjé»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.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²hhjKò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 ¼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:129: ./mm/kmemleak.c”h´Mghj¼ubj¤)�”}”(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*¼h]”hŒconst void __percpu *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:129: ./mm/kmemleak.c”h´Mdhj$¼ubjÉ)�”}”(hhh]”jM)�”}”(hŒ+__percpu pointer to beginning of the object”h]”hŒ+__percpu pointer to beginning of the object”…”�”}”(hjC¼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Œ#``size_t size`` size of the object ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hjc¼h]”hŒ size_t size”…”�”}”(hje¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhja¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´Mehj]¼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³jx¼h´Mehjy¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj]¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jx¼h´Mehj!¼ubj©)�”}”(hŒB``gfp_t gfp`` 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:129: ./mm/kmemleak.c”h´Mfhj–¼ubjÉ)�”}”(hhh]”jM)�”}”(hŒ3flags used for kmemleak internal memory allocations”h]”hŒ3flags used for kmemleak internal memory allocations”…”�”}”(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!¼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:129: ./mm/kmemleak.c”h´Mhhj¼ubjM)�”}”(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í¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´Mghj¼ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmemleak_vmalloc (C function)”Œc.kmemleak_vmalloc”hNt”auh1hÜhjKò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½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:129: ./mm/kmemleak.c”h´Mvubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+½h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj½h²hh³j*½h´MvubhŒ__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´Mvubhÿ)�”}”(hŒkmemleak_vmalloc”h]”j)�”}”(hŒkmemleak_vmalloc”h]”hŒkmemleak_vmalloc”…”�”}”(hjO½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjK½ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj½h²hh³j*½h´Mvubj8)�”}”(hŒ6(const struct vm_struct *area, size_t size, gfp_t gfp)”h]”(j>)�”}”(hŒconst struct vm_struct *area”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjk½h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjg½ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjx½h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjg½ubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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½ubh)�”}”(hhh]”j)�”}”(hŒ vm_struct”h]”hŒ vm_struct”…”�”}”(hj¤½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¡½ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j¦½Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjQ½sbŒc.kmemleak_vmalloc”†”asbuh1hhjg½ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjĽh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjg½ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÒ½h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjg½ubj)�”}”(hŒarea”h]”hŒarea”…”�”}”(hjß½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjg½ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjc½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”jèŒ reftarget”jý½Œmodname”NŒ classname”Njìjï)�”}”jò]”jÀ½Œc.kmemleak_vmalloc”†”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=hjc½ubj>)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjC¾h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj@¾ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jE¾Œmodname”NŒ classname”Njìjï)�”}”jò]”jÀ½Œc.kmemleak_vmalloc”†”asbuh1hhj<¾ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hja¾h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj<¾ubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjo¾h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj<¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjc½ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj½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Œ"register a newly vmalloc'ed object”h]”hŒ$register a newly vmalloc’ed object”…”�”}”(hj™¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´Mvhj–¾h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj½h²hh³j*½h´Mvubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj±¾jHj±¾jI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hX;**Parameters** ``const struct vm_struct *area`` pointer to vm_struct ``size_t size`` size of the object ``gfp_t gfp`` __vmalloc() flags used for kmemleak internal memory allocations **Description** This function is called from the vmalloc() kernel allocator when a new object (memory block) is allocated.”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:129: ./mm/kmemleak.c”h´Mzhjµ¾ubj¤)�”}”(hhh]”(j©)�”}”(hŒ6``const struct vm_struct *area`` pointer to vm_struct ”h]”(j¯)�”}”(hŒ ``const struct vm_struct *area``”h]”jS)�”}”(hjÚ¾h]”hŒconst struct vm_struct *area”…”�”}”(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:129: ./mm/kmemleak.c”h´MwhjÔ¾ubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to vm_struct”h]”hŒpointer to vm_struct”…”�”}”(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´MwhjѾ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:129: ./mm/kmemleak.c”h´Mxhj ¿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´Mxhj)¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j(¿h´MxhjѾubj©)�”}”(hŒN``gfp_t gfp`` __vmalloc() flags used for kmemleak internal memory allocations ”h]”(j¯)�”}”(hŒ ``gfp_t gfp``”h]”jS)�”}”(hjL¿h]”hŒ gfp_t gfp”…”�”}”(hjN¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjJ¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´MyhjF¿ubjÉ)�”}”(hhh]”jM)�”}”(hŒ?__vmalloc() flags used for kmemleak internal memory allocations”h]”hŒ?__vmalloc() flags used for kmemleak internal memory allocations”…”�”}”(hje¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ja¿h´Myhjb¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjF¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³ja¿h´MyhjѾ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:129: ./mm/kmemleak.c”h´M{hjµ¾ubjM)�”}”(hŒjThis function is called from the vmalloc() kernel allocator when a new object (memory block) is allocated.”h]”hŒjThis function is called from the vmalloc() kernel allocator when a new object (memory block) is allocated.”…”�”}”(hj�¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´Mzhjµ¾ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmemleak_free (C function)”Œc.kmemleak_free”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ*void __ref kmemleak_free (const void *ptr)”h]”hù)�”}”(hŒ)void __ref kmemleak_free(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:129: ./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_free”h]”j)�”}”(hŒ kmemleak_free”h]”hŒ kmemleak_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�ubj8)�”}”(hŒ(const void *ptr)”h]”j>)�”}”(hŒconst void *ptr”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œvoid”h]”hŒvoid”…”�”}”(hj6Àh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÀubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDÀh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÀubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjRÀh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÀ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&]”jjuh1j7hjÈ¿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Œ)unregister a previously registered object”h]”hŒ)unregister a previously registered object”…”�”}”(hj‰Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./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&]”jFjAjGj¡ÀjHj¡ÀjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(h•ŒÚ**Parameters** ``const void *ptr`` pointer to beginning of the object **Description** This function is called from the kernel allocators when an object (memory block) is freed (kmem_cache_free, kfree, vfree etc.).”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:129: ./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:129: ./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:129: ./mm/kmemleak.c”h´M’hj¥ÀubjM)�”}”(hŒThis function is called from the kernel allocators when an object (memory block) is freed (kmem_cache_free, kfree, vfree etc.).”h]”hŒThis function is called from the kernel allocators when an object (memory block) is freed (kmem_cache_free, kfree, vfree etc.).”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´M‘hj¥Àubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmemleak_free_part (C function)”Œc.kmemleak_free_part”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ)�”}”(hŒconst void *ptr”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œ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•Áubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÐÁh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj•Á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‘Á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”jèŒ reftarget”jûÁŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÁsbŒc.kmemleak_free_part”†”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&]”jjuh1j7hjFÁ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Œ3partially unregister a previously registered object”h]”hŒ3partially unregister a previously registered object”…”�”}”(hjQÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´MŸhjNÂh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj?Áh²hh³jXÁh´MŸubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjiÂjHjiÂjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hX5**Parameters** ``const void *ptr`` pointer to the beginning or inside the object. This also represents the start of the range to be freed ``size_t size`` size to be unregistered **Description** This function is called when only a part of a memory block is freed (usually from the bootmem allocator).”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³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´M£hjmÂubj¤)�”}”(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)�”}”(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:129: ./mm/kmemleak.c”h´M¡hjŒÂubjÉ)�”}”(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«Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./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 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:129: ./mm/kmemleak.c”h´M¢hjÆÂ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³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³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´M¤hjmÂubjM)�”}”(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Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´M£hjmÂubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!kmemleak_free_percpu (C function)”Œc.kmemleak_free_percpu”hNt”auh1hÜhjKò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”…”�”}”(hjLÃh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjHÃh²hh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´M±ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[Ãh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjHÃh²hh³jZÃh´M±ubhŒ__ref”…”�”}”(hjHÃh²hh³Nh´Nubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmÃh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjHÃh²hh³jZÃh´M±ubhÿ)�”}”(hŒkmemleak_free_percpu”h]”j)�”}”(hŒkmemleak_free_percpu”h]”hŒkmemleak_free_percpu”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj{Ãubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjHÃh²hh³jZÃh´M±ubj8)�”}”(hŒ(const void __percpu *ptr)”h]”j>)�”}”(hŒconst void __percpu *ptr”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œ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Œ__percpu”…”�”}”(hj—Ãh²hh³Nh´Nubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖÃh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj—Ãubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjäÃh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj—Ã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&]”jjuh1j7hjHÃh²hh³jZÃh´M±ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjDÃh²hh³jZÃh´M±ubah}”(h]”j?Ãah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jZÃh´M±hjAÃh²hubj4)�”}”(hhh]”jM)�”}”(hŒ2unregister a previously registered __percpu object”h]”hŒ2unregister a previously registered __percpu object”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´M±hjÄh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjAÃh²hh³jZÃh´M±ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj3ÄjHj3ÄjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(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:129: ./mm/kmemleak.c”h´Mµhj7Äubj¤)�”}”(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\Äh]”hŒconst void __percpu *ptr”…”�”}”(hj^Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjZÄubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´M²hjVÄubjÉ)�”}”(hhh]”jM)�”}”(hŒ+__percpu pointer to beginning of the object”h]”hŒ+__percpu pointer to beginning of the 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²hjSÄubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj7Ä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:129: ./mm/kmemleak.c”h´M´hj7ÄubjM)�”}”(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­Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´M³hj7Äubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"kmemleak_update_trace (C function)”Œc.kmemleak_update_trace”hNt”auh1hÜhjKò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ÜÄ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:129: ./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_update_trace”h]”j)�”}”(hŒkmemleak_update_trace”h]”hŒkmemleak_update_trace”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Åubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjØÄh²hh³jêÄh´MÁubj8)�”}”(hŒ(const void *ptr)”h]”j>)�”}”(hŒconst void *ptr”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œvoid”h]”hŒvoid”…”�”}”(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'Åubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjbÅh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj'Åubj)�”}”(hŒptr”h]”hŒptr”…”�”}”(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&]”jjuh1j7hjØÄ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 object allocation stack trace”h]”hŒ$update object allocation stack trace”…”�”}”(hj™Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./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&]”jFjAjGj±ÅjHj±ÅjI‰jJ‰jK‰uh1híh²hhjKò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»Å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:129: ./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:129: ./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:129: ./mm/kmemleak.c”h´MÄhjµÅubjM)�”}”(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+Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´MÃhjµÅubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmemleak_not_leak (C function)”Œc.kmemleak_not_leak”hNt”auh1hÜhjKò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”…”�”}”(hjZÆh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjVÆh²hh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´Måubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjiÆh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjVÆh²hh³jhÆh´MåubhŒ__ref”…”�”}”(hjVÆh²hh³Nh´Nubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{Æh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjVÆh²hh³jhÆh´Måubhÿ)�”}”(hŒkmemleak_not_leak”h]”j)�”}”(hŒkmemleak_not_leak”h]”hŒkmemleak_not_leak”…”�”}”(hj�Æh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‰Æubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjVÆh²hh³jhÆh´Måubj8)�”}”(hŒ(const void *ptr)”h]”j>)�”}”(hŒconst void *ptr”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œ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¥Æubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjàÆh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¥Æ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&]”jjuh1j7hjVÆh²hh³jhÆh´Måubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjRÆh²hh³jhÆh´Måubah}”(h]”jMÆah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jhÆh´MåhjOÆh²hubj4)�”}”(hhh]”jM)�”}”(hŒ*mark an allocated object as false positive”h]”hŒ*mark an allocated object as false positive”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´MåhjÇh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjOÆh²hh³jhÆh´Måubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj/ÇjHj/ÇjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hj9Çh]”hŒ Parameters”…”�”}”(hj;Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj7Çubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´Méhj3Çubj¤)�”}”(hhh]”j©)�”}”(hŒ7``const void *ptr`` pointer to beginning of the object ”h]”(j¯)�”}”(hŒ``const void *ptr``”h]”jS)�”}”(hjXÇh]”hŒconst void *ptr”…”�”}”(hjZÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjVÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´MæhjRÇubjÉ)�”}”(hhh]”jM)�”}”(hŒ"pointer to beginning of the object”h]”hŒ"pointer to beginning of the object”…”�”}”(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æhjOÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj3Ç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:129: ./mm/kmemleak.c”h´Mèhj3Ç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.”…”�”}”(hj©Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´Mçhj3Çubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$kmemleak_transient_leak (C function)”Œc.kmemleak_transient_leak”hNt”auh1hÜhjKò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:129: ./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õubj8)�”}”(hŒ(const void *ptr)”h]”j>)�”}”(hŒconst void *ptr”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œ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#Èubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj^Èh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj#Èubj)�”}”(hŒptr”h]”hŒptr”…”�”}”(hjkÈ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&]”jjuh1j7hjÔÇ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”…”�”}”(hj•Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./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&]”jFjAjGj­ÈjHj­ÈjI‰jJ‰jK‰uh1híh²hhjKò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:129: ./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:129: ./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:129: ./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:129: ./mm/kmemleak.c”h´M÷hj±Èubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ#kmemleak_ignore_percpu (C function)”Œc.kmemleak_ignore_percpu”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ)�”}”(hŒconst void __percpu *ptr”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œ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Œ__percpu”…”�”}”(hj¡Éh²hh³Nh´Nubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàÉh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¡Éubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjîÉh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¡É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&]”jjuh1j7hjRÉh²hh³jdÉh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjNÉh²hh³jdÉh´Mubah}”(h]”jIÉah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jdÉh´MhjKÉh²hubj4)�”}”(hhh]”jM)�”}”(hŒ?similar to kmemleak_ignore but taking a percpu address argument”h]”hŒ?similar to kmemleak_ignore but taking a percpu address argument”…”�”}”(hj%Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´Mhj"Êh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjKÉh²hh³jdÉh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj=ÊjHj=ÊjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hŒK**Parameters** ``const void __percpu *ptr`` percpu address of the object”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³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´M hjAÊubj¤)�”}”(hhh]”j©)�”}”(hŒ9``const void __percpu *ptr`` percpu address of the object”h]”(j¯)�”}”(hŒ``const void __percpu *ptr``”h]”jS)�”}”(hjfÊh]”hŒconst void __percpu *ptr”…”�”}”(hjhÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjdÊubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´M hj`ÊubjÉ)�”}”(hhh]”jM)�”}”(hŒpercpu address of the object”h]”hŒpercpu 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:129: ./mm/kmemleak.c”h´Mhj|Ê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ƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmemleak_ignore (C function)”Œc.kmemleak_ignore”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ,void __ref kmemleak_ignore (const void *ptr)”h]”hù)�”}”(hŒ+void __ref kmemleak_ignore(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:129: ./mm/kmemleak.c”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏÊh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¼Êh²hh³jÎÊh´MubhŒ__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´Mubhÿ)�”}”(hŒkmemleak_ignore”h]”j)�”}”(hŒkmemleak_ignore”h]”hŒkmemleak_ignore”…”�”}”(hjóÊh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjïÊubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¼Êh²hh³jÎÊh´Mubj8)�”}”(hŒ(const void *ptr)”h]”j>)�”}”(hŒconst void *ptr”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œvoid”h]”hŒvoid”…”�”}”(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 Ëubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjFËh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj Ëubj)�”}”(hŒptr”h]”hŒptr”…”�”}”(hjSË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&]”jjuh1j7hj¼Ê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Œignore an allocated object”h]”hŒignore 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:129: ./mm/kmemleak.c”h´MhjzË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²hhjKòh³Nh´Nubj„)�”}”(hXh**Parameters** ``const void *ptr`` pointer to beginning of the object **Description** Calling this function on an object will cause the memory block to be ignored (not scanned and not reported as a leak). This is usually done when it is known that the corresponding block is not a leak and does not contain any references to other allocated memory blocks.”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:129: ./mm/kmemleak.c”h´Mhj™Ë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:129: ./mm/kmemleak.c”h´Mhj¸Ë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´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³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´Mhj™ËubjM)�”}”(hX Calling this function on an object will cause the memory block to be ignored (not scanned and not reported as a leak). This is usually done when it is known that the corresponding block is not a leak and does not contain any references to other allocated memory blocks.”h]”hX Calling this function on an object will cause the memory block to be ignored (not scanned and not reported as a leak). This is usually done when it is known that the corresponding block is not a leak and does not contain any references to other allocated memory blocks.”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´Mhj™Ëubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmemleak_scan_area (C function)”Œc.kmemleak_scan_area”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒGvoid __ref kmemleak_scan_area (const void *ptr, size_t size, gfp_t gfp)”h]”hù)�”}”(hŒFvoid __ref kmemleak_scan_area(const void *ptr, 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:129: ./mm/kmemleak.c”h´M&ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMÌh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj:Ìh²hh³jLÌ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³jLÌh´M&ubhÿ)�”}”(hŒkmemleak_scan_area”h]”j)�”}”(hŒkmemleak_scan_area”h]”hŒkmemleak_scan_area”…”�”}”(hjqÌh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjmÌubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj:Ìh²hh³jLÌh´M&ubj8)�”}”(hŒ)(const void *ptr, size_t size, gfp_t gfp)”h]”(j>)�”}”(hŒconst void *ptr”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œ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‰Ìubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÄÌh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj‰Ì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…Ì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”jèŒ reftarget”jïÌŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjsÌ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=hj…Ìubj>)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj7Íh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4Íubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j9ÍŒmodname”NŒ classname”Njìjï)�”}”jò]”j ÍŒc.kmemleak_scan_area”†”asbuh1hhj0Íubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUÍh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj0Íubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjcÍh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj0Íubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj…Ìubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj:Ìh²hh³jLÌh´M&ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj6Ìh²hh³jLÌh´M&ubah}”(h]”j1Ìah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jLÌh´M&hj3Ì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:129: ./mm/kmemleak.c”h´M&hjŠÍh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj3Ìh²hh³jLÌh´M&ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¥ÍjHj¥ÍjI‰jJ‰jK‰uh1híh²hhjKò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:129: ./mm/kmemleak.c”h´M*hj©Í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:129: ./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:129: ./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:129: ./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)�”}”(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³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./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”…”�”}”(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ÅÍ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³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´M,hj©Í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.”…”�”}”(hj’Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´M+hj©Íubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒkmemleak_no_scan (C function)”Œc.kmemleak_no_scan”hNt”auh1hÜhjKò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:129: ./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:ubj8)�”}”(hŒ(const void *ptr)”h]”j>)�”}”(hŒconst void *ptr”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œvoid”h]”hŒvoid”…”�”}”(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 Ïubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjGÏh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj Ïubj)�”}”(hŒptr”h]”hŒptr”…”�”}”(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&]”jjuh1j7hj½Î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”…”�”}”(hj~Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./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&]”jFjAjGj–ÏjHj–ÏjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(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:129: ./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:129: ./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:129: ./mm/kmemleak.c”h´M=hjšÏ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:129: ./mm/kmemleak.c”h´M<hjšÏubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ kmemleak_alloc_phys (C function)”Œc.kmemleak_alloc_phys”hNt”auh1hÜhjKò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:129: ./mm/kmemleak.c”h´MLubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNÐh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj;Ðh²hh³jMÐh´MLubhŒ__ref”…”�”}”(hj;Ðh²hh³Nh´Nubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`Ðh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj;Ðh²hh³jMÐh´MLubhÿ)�”}”(hŒkmemleak_alloc_phys”h]”j)�”}”(hŒkmemleak_alloc_phys”h]”hŒkmemleak_alloc_phys”…”�”}”(hjrÐh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjnÐubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj;Ðh²hh³jMÐh´MLubj8)�”}”(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”…”�”}”(hj‘Ðh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŽÐubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j“ÐŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjtÐ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=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”jèŒ reftarget”jÝÐŒmodname”NŒ classname”Njìjï)�”}”jò]”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=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”jèŒ reftarget”j%ÑŒmodname”NŒ classname”Njìjï)�”}”jò]”j­ÐŒc.kmemleak_alloc_phys”†”asbuh1hhjÑubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAÑh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÑubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(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&]”jjuh1j7hj;Ðh²hh³jMÐh´MLubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj7Ðh²hh³jMÐh´MLubah}”(h]”j2Ðah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jMÐh´MLhj4Ð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”…”�”}”(hjyÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´MLhjvÑh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj4Ðh²hh³jMÐh´MLubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj‘ÑjHj‘ÑjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(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:129: ./mm/kmemleak.c”h´MPhj•Ñ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:129: ./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:129: ./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:129: ./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”…”�”}”(hjEÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´MPhjBÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj&Òubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jAÒh´MQhj±Ñubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj•Ñubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(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:129: ./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_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þhj‚Òh²hh³j”Òh´M`ubj8)�”}”(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”jèŒ reftarget”jÚÒŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj»Ò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”jèŒ reftarget”j$ÓŒmodname”NŒ classname”Njìjï)�”}”jò]”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”…”�”}”(hjNÓ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&]”jjuh1j7hj‚Òh²hh³j”Òh´M`ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj~Òh²hh³j”Òh´M`ubah}”(h]”jyÒah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j”Òh´M`hj{Ò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”…”�”}”(hjxÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.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²hhjKò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Ž)�”}”(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:129: ./mm/kmemleak.c”h´Mdhj”Ó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:129: ./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:129: ./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:129: ./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:129: ./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£hj”Óubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!kmemleak_ignore_phys (C function)”Œc.kmemleak_ignore_phys”hNt”auh1hÜhjKò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”…”�”}”(hjMÔh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjIÔh²hh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´Mpubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\Ôh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjIÔh²hh³j[Ôh´MpubhŒ__ref”…”�”}”(hjIÔh²hh³Nh´Nubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnÔh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjIÔh²hh³j[Ôh´Mpubhÿ)�”}”(hŒkmemleak_ignore_phys”h]”j)�”}”(hŒkmemleak_ignore_phys”h]”hŒkmemleak_ignore_phys”…”�”}”(hj€Ôh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj|Ôubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjIÔh²hh³j[Ôh´Mpubj8)�”}”(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”…”�”}”(hjŸÔh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjœÔubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j¡ÔŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj‚ÔsbŒc.kmemleak_ignore_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”Ôubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjIÔh²hh³j[Ôh´Mpubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjEÔh²hh³j[Ôh´Mpubah}”(h]”j@Ôah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j[Ôh´MphjBÔ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:129: ./mm/kmemleak.c”h´MphjôÔh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjBÔh²hh³j[Ôh´Mpubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÕjHjÕjI‰jJ‰jK‰uh1híh²hhjKò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:129: ./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)�”}”(hj8Õh]”hŒphys_addr_t phys”…”�”}”(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:129: ./mm/kmemleak.c”h´Mvhj2ÕubjÉ)�”}”(hhh]”jM)�”}”(hŒphysical address of the object”h]”hŒphysical address of the object”…”�”}”(hjQÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:129: ./mm/kmemleak.c”h´MrhjNÕubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj2Õubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jMÕh´Mvhj/Õubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÕubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhŒcomment”“”)�”}”(hŒ'#kernel-doc:: mm/hmm.c (build warnings)”h]”hŒ'#kernel-doc:: mm/hmm.c (build warnings)”…”�”}”hj{Õsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jyÕhjKòh²hh³hÊh´K‚ubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ devm_memremap_pages (C function)”Œc.devm_memremap_pages”hNt”auh1hÜhjKò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”…”�”}”(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:131: ./mm/memremap.c”h´Mcubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±Õh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjžÕh²hh³j°Õh´Mcubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¿Õh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjžÕ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þhjžÕh²hh³j°Õh´Mcubj8)�”}”(hŒ/(struct device *dev, struct dev_pagemap *pgmap)”h]”(j>)�”}”(hŒstruct device *dev”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjìÕh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjèÕubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùÕh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjèÕubh)�”}”(hhh]”j)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj Öh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÖubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j ÖŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÒÕsbŒc.devm_memremap_pages”†”asbuh1hhjèÕubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*Öh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjèÕubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj8Öh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjèÕubj)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjEÖ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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj^Öh²hh³Nh´Nubah}”(h•]”h ]”j¨ah"]”h$]”h&]”uh1j›hjZÖubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkÖh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjZÖubh)�”}”(hhh]”j)�”}”(hŒ dev_pagemap”h]”hŒ dev_pagemap”…”�”}”(hj|Öh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjyÖubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j~ÖŒmodname”NŒ classname”Njìjï)�”}”jò]”j&ÖŒc.devm_memremap_pages”†”asbuh1hhjZÖubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšÖh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjZÖubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¨Öh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjZÖubj)�”}”(hŒpgmap”h]”hŒpgmap”…”�”}”(hjµÖ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&]”jjuh1j7hjžÕ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Œ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:131: ./mm/memremap.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²hhjKò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:131: ./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:131: ./mm/memremap.c”h´Mdhj×ubjÉ)�”}”(hhh]”jM)�”}”(hŒhosting device for **res**”h]”(hŒhosting device for ”…”�”}”(hj9×h²hh³Nh´NubjŽ)�”}”(hŒ**res**”h]”hŒres”…”�”}”(hjA×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj9×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j5×h´Mdhj6×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j5×h´Mdhj×ubj©)�”}”(hŒ>``struct dev_pagemap *pgmap`` pointer to a struct dev_pagemap ”h]”(j¯)�”}”(hŒ``struct dev_pagemap *pgmap``”h]”jS)�”}”(hjg×h]”hŒstruct dev_pagemap *pgmap”…”�”}”(hji×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhje×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/memremap.c”h´Mehja×ubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to a struct dev_pagemap”h]”hŒpointer to a struct dev_pagemap”…”�”}”(hj€×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j|×h´Mehj}×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhja×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j|×h´Mehj×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjûÖubjM)�”}”(hŒ **Notes**”h]”jŽ)�”}”(hj¢×h]”hŒNotes”…”�”}”(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:131: ./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:131: ./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:131: ./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”…”�”}”(hj1Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./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.”…”�”}”(hjCØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./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”…”�”}”(hjbØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./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.”…”�”}”(hjtØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jpØh´MrhjqØubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj^Øubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jpØh´Mrhj¸×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjûÖubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒget_dev_pagemap (C function)”Œc.get_dev_pagemap”hNt”auh1hÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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:131: ./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”jèŒ reftarget”jÕØŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒ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Žubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj°Ø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Žubj8)�”}”(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”…”�”}”(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Œpfn”h]”hŒpfn”…”�”}”(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&]”jjuh1j7hj°Ø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Œ8take a new live reference on the dev_pagemap for **pfn**”h]”(hŒ1take a new live reference on the dev_pagemap for ”…”�”}”(hj�Ùh²hh³Nh´NubjŽ)�”}”(hŒ**pfn**”h]”hŒpfn”…”�”}”(hj˜Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�Ùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒN/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:131: ./mm/memremap.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²hhjKò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:131: ./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:131: ./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:131: ./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ƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ hugetlb_alloc_folio (C function)”Œc.hugetlb_alloc_folio”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ€struct folio * hugetlb_alloc_folio (struct hstate *h, struct mempolicy_interpreted *mpoli, struct mm_struct *mm, u8 alloc_flags)”h]”hù)�”}”(hŒ~struct folio *hugetlb_alloc_folio(struct hstate *h, struct mempolicy_interpreted *mpoli, struct mm_struct *mm, u8 alloc_flags)”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj9Úh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj5Úh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/hugetlb.c”h´M4 ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGÚh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj5Úh²hh³jFÚh´M4 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”jèŒ reftarget”jZÚŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒhugetlb_alloc_folio”sbŒc.hugetlb_alloc_folio”†”asbuh1hhj5Úh²hh³jFÚh´M4 ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyÚh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj5Úh²hh³jFÚh´M4 ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj‡Úh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj5Úh²hh³jFÚh´M4 ubhÿ)�”}”(hŒhugetlb_alloc_folio”h]”j)�”}”(hjvÚh]”hŒhugetlb_alloc_folio”…”�”}”(hj˜Úh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj”Úubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj5Úh²hh³jFÚh´M4 ubj8)�”}”(hŒ](struct hstate *h, struct mempolicy_interpreted *mpoli, struct mm_struct *mm, u8 alloc_flags)”h]”(j>)�”}”(hŒstruct hstate *h”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj³Úh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¯Úubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀÚh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¯Úubh)�”}”(hhh]”j)�”}”(hŒhstate”h]”hŒhstate”…”�”}”(hjÑÚh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÎÚubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÓÚŒmodname”NŒ classname”Njìjï)�”}”jò]”jtÚŒc.hugetlb_alloc_folio”†”asbuh1hhj¯Úubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïÚh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¯Úubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjýÚh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¯Ú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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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Ûubh)�”}”(hhh]”j)�”}”(hŒmempolicy_interpreted”h]”hŒmempolicy_interpreted”…”�”}”(hjAÛh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>Ûubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jCÛŒmodname”NŒ classname”Njìjï)�”}”jò]”jtÚŒc.hugetlb_alloc_folio”†”asbuh1hhjÛubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_Ûh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÛubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjmÛh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÛubj)�”}”(hŒmpoli”h]”hŒmpoli”…”�”}”(hjzÛ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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj“Ûh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj�Ûubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Ûh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�Ûubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j³ÛŒmodname”NŒ classname”Njìjï)�”}”jò]”jtÚŒc.hugetlb_alloc_folio”†”asbuh1hhj�Ûubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏÛh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�Ûubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÝÛh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj�Û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Œu8 alloc_flags”h]”(h)�”}”(hhh]”j)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÜubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÜŒmodname”NŒ classname”Njìjï)�”}”jò]”jtÚŒ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”…”�”}”(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&]”jjuh1j7hj5Úh²hh³jFÚh´M4 ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj1Úh²hh³jFÚh´M4 ubah}”(h]”j,Úah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jFÚh´M4 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:132: ./mm/hugetlb.c”h´M4 hjYÜh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj.Úh²hh³jFÚh´M4 ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjtÜjHjtÜjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hX**Parameters** ``struct hstate *h`` Hugetlb state control block. ``struct mempolicy_interpreted *mpoli`` Interpreted memory policy to use for allocation. ``struct mm_struct *mm`` Memory descriptor of the allocation target. ``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.”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:132: ./mm/hugetlb.c”h´M8 hjxÜ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:132: ./mm/hugetlb.c”h´M5 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´M5 hj³Üubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj—Üubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j²Üh´M5 hj”Üubj©)�”}”(hŒY``struct mempolicy_interpreted *mpoli`` Interpreted memory policy to use for allocation. ”h]”(j¯)�”}”(hŒ'``struct mempolicy_interpreted *mpoli``”h]”jS)�”}”(hjÖÜh]”hŒ#struct mempolicy_interpreted *mpoli”…”�”}”(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:132: ./mm/hugetlb.c”h´M6 hjÐÜubjÉ)�”}”(hhh]”jM)�”}”(hŒ0Interpreted memory policy to use for allocation.”h]”hŒ0Interpreted memory policy to use for allocation.”…”�”}”(hjïÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jëÜh´M6 hjìÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÐÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jëÜh´M6 hj”Üubj©)�”}”(hŒE``struct mm_struct *mm`` Memory descriptor of the allocation target. ”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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/hugetlb.c”h´M7 hj ÝubjÉ)�”}”(hhh]”jM)�”}”(hŒ+Memory descriptor of the allocation target.”h]”hŒ+Memory descriptor of the allocation target.”…”�”}”(hj(Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j$Ýh´M7 hj%Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj Ýubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j$Ýh´M7 hj”Üubj©)�”}”(hŒ>``u8 alloc_flags`` Flags controlling the allocation behavior. ”h]”(j¯)�”}”(hŒ``u8 alloc_flags``”h]”jS)�”}”(hjHÝh]”hŒu8 alloc_flags”…”�”}”(hjJÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjFÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/hugetlb.c”h´M8 hjBÝubjÉ)�”}”(hhh]”jM)�”}”(hŒ*Flags controlling the allocation behavior.”h]”hŒ*Flags controlling the allocation behavior.”…”�”}”(hjaÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j]Ýh´M8 hj^Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjBÝubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j]Ýh´M8 hj”Ü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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/hugetlb.c”h´M: hjxÜ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:132: ./mm/hugetlb.c”h´M9 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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/hugetlb.c”h´M< hjxÜubjM)�”}”(hŒvA pointer to the allocated folio, or an ERR_PTR on failure. -ENOSPC if cgroup charging fails or no folio is available.”h]”hŒvA pointer to the allocated folio, or an ERR_PTR on failure. -ENOSPC if cgroup charging fails or no folio is available.”…”�”}”(hjÀÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/hugetlb.c”h´M= hjxÜubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒhuge_pmd_unshare (C function)”Œc.huge_pmd_unshare”hNt”auh1hÜhjKò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:132: ./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”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Þubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjëÝh²hh³jýÝh´Mîubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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(Þubh)�”}”(hhh]”j)�”}”(hŒ mmu_gather”h]”hŒ mmu_gather”…”�”}”(hjJÞh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjGÞubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jLÞŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÞsbŒc.huge_pmd_unshare”†”asbuh1hhj(Þubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjÞh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj(Þubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjxÞh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj(Þubj)�”}”(hŒtlb”h]”hŒtlb”…”�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjžÞh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjšÞubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«Þh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjšÞubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”j¾ÞŒmodname”NŒ classname”Njìjï)�”}”jò]”jfÞŒc.huge_pmd_unshare”†”asbuh1hhjšÞubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚÞh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjšÞubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjèÞh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjšÞ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Œ ”…”�”}”(hj8ßh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj ßubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjFßh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ßubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj$Þubj>)�”}”(hŒ pte_t *ptep”h]”(h)�”}”(hhh]”j)�”}”(hŒpte_t”h]”hŒpte_t”…”�”}”(hjbßh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj_ßubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jdߌmodname”NŒ classname”Njìjï)�”}”jò]”jfÞŒc.huge_pmd_unshare”†”asbuh1hhj[ßubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€ßh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj[ßubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjŽßh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj[ß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=hj$Þubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjëÝ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:132: ./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²hhjKò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:132: ./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”…”�”}”(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:132: ./mm/hugetlb.c”h´MïhjàubjÉ)�”}”(hhh]”jM)�”}”(hŒthe current mmu_gather.”h]”hŒthe current mmu_gather.”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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`` the vma covering the pmd table. ”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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/hugetlb.c”h´Mðhj9àubjÉ)�”}”(hhh]”jM)�”}”(hŒthe vma covering the pmd table.”h]”hŒthe vma covering the pmd table.”…”�”}”(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ðhjýßubj©)�”}”(hŒ=``unsigned long addr`` the address we are trying to unshare. ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hjxàh]”hŒunsigned long addr”…”�”}”(hjzàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjvàubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/hugetlb.c”h´Mñhjrà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Èhjrà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:132: ./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:132: ./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:132: ./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�hjáubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./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.”…”�”}”(hj)áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./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�hj8áubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./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.”…”�”}”(hjPáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/hugetlb.c”h´Múhjáßubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"folio_isolate_hugetlb (C function)”Œc.folio_isolate_hugetlb”hNt”auh1hÜhjKò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:132: ./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Œ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´M¨ubj8)�”}”(hŒ-(struct folio *folio, struct list_head *list)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj»áh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj·áubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈáh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj·áubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÙáh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÖáubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÛáŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj¡ásbŒc.folio_isolate_hugetlb”†”asbuh1hhj·áubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùáh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj·áubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj·á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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj-âh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj)âubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:âh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj)âubh)�”}”(hhh]”j)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hjKâh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjHâubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jMâŒmodname”NŒ classname”Njìjï)�”}”jò]”jõáŒc.folio_isolate_hugetlb”†”asbuh1hhj)âubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjiâh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj)âubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjwâh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj)â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&]”jjuh1j7hj{áh²hh³jŒáh´M¨ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjwáh²hh³jŒáh´M¨ubah}”(h]”jráah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jŒáh´M¨hjtá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:132: ./mm/hugetlb.c”h´M¨hj«âh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjtáh²hh³jŒáh´M¨ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÆâjHjÆâjI‰jJ‰jK‰uh1híh²hhjKò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:132: ./mm/hugetlb.c”h´M¬hjÊâ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:132: ./mm/hugetlb.c”h´M©hjéâubjÉ)�”}”(hhh]”jM)�”}”(hŒthe folio to isolate”h]”hŒthe folio to isolate”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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ŒC``struct list_head *list`` the list to add the folio to on success ”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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/hugetlb.c”h´Mªhj"ãubjÉ)�”}”(hhh]”jM)�”}”(hŒ'the list to add the folio to on success”h]”hŒ'the list to add the folio to on success”…”�”}”(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æâubeh}”(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:132: ./mm/hugetlb.c”h´M¬hjÊâ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.”…”�”}”(hjyãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./mm/hugetlb.c”h´M«hjÊâ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:132: ./mm/hugetlb.c”h´M¯hjÊâ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:132: ./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:132: ./mm/hugetlb.c”h´MµhjÊâ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:132: ./mm/hugetlb.c”h´M¶hjÊâubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"folio_putback_hugetlb (C function)”Œc.folio_putback_hugetlb”hNt”auh1hÜhjKò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:132: ./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Œfolio_putback_hugetlb”h]”j)�”}”(hŒfolio_putback_hugetlb”h]”hŒfolio_putback_hugetlb”…”�”}”(hj äh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjäubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjûãh²hh³j äh´MÞubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj<äh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj8äubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIäh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj8ä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”jèŒ reftarget”j\äŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj"äsbŒc.folio_putback_hugetlb”†”asbuh1hhj8äubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzäh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj8äubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjˆäh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj8äubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(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&]”jjuh1j7hjûã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Œ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:132: ./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²hhjKò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:132: ./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:132: ./mm/hugetlb.c”h´MßhjúäubjÉ)�”}”(hhh]”jM)�”}”(hŒthe isolated hugetlb folio”h]”hŒthe isolated hugetlb 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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./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.”…”�”}”(hjQåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:132: ./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:132: ./mm/hugetlb.c”h´MähjÛäubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ folio_mark_accessed (C function)”Œc.folio_mark_accessed”hNt”auh1hÜhjKò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:133: ./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žubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÌåh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÈåubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙåh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÈåubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjêåh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjçåubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jìåŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj²åsbŒc.folio_mark_accessed”†”asbuh1hhjÈåubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj æh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÈåubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÈå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&]”jjuh1j7hj‹å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.”…”�”}”(hjOæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/folio.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²hhjKò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Ž)�”}”(hjqæh]”hŒ Parameters”…”�”}”(hjsæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjoæubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/folio.c”h´M¢hjkæ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:133: ./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£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³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/folio.c”h´M¡hjkæ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:133: ./mm/folio.c”h´M¢hjóæubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjðæubjc)�”}”(hŒ6inactive,referenced -> active,unreferenced”h]”jM)�”}”(hj çh]”hŒ6inactive,referenced -> active,unreferenced”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/folio.c”h´M£hj çubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjðæubjc)�”}”(hŒ5active,unreferenced -> active,referenced ”h]”jM)�”}”(hŒ4active,unreferenced -> active,referenced”h]”hŒ4active,unreferenced -> active,referenced”…”�”}”(hj'çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/folio.c”h´M¤hj#çubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjðæubeh}”(h]”h ]”h"]”h$]”h&]”j‚juuh1j]h³jçh´M¢hjkæ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().”…”�”}”(hjBçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/folio.c”h´M¦hjkæubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_add_lru (C function)”Œc.folio_add_lru”hNt”auh1hÜhjKò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”…”�”}”(hjqçh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjmçh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/folio.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Œ 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þhjmçh²hh³jçh´MÏubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj®çh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjªçubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»çh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjªçubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÌçh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÉçubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÎçŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj”çsbŒc.folio_add_lru”†”asbuh1hhjªçubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìçh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjªçubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjúçh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjªç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&]”jjuh1j7hjmç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ŒAdd a folio to an LRU list.”h]”hŒAdd a folio to an LRU list.”…”�”}”(hj1èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/folio.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&]”jFjAjGjIèjHjIèjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(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:133: ./mm/folio.c”h´MÓhjMèubj¤)�”}”(hhh]”j©)�”}”(hŒ:``struct folio *folio`` The folio to be added to the LRU. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjrèh]”hŒstruct folio *folio”…”�”}”(hjtèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjpèubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/folio.c”h´MÐhjlè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Èhjlèubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‡èh´MÐhjièubah}”(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³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/folio.c”h´MÒhjMè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:133: ./mm/folio.c”h´MÑhjMèubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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:133: ./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&]”uh1jhjéubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjîèh²hh³jéh´Mñubj8)�”}”(hŒ1(struct folio *folio, struct vm_area_struct *vma)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj/éh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj+éubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<éh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj+éubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjMéh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjJéubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jOéŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjésbŒc.folio_add_lru_vma”†”asbuh1hhj+éubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjméh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj+éubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj{éh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj+é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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¡éh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj�éubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®éh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�éubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jÁéŒmodname”NŒ classname”Njìjï)�”}”jò]”jiéŒc.folio_add_lru_vma”†”asbuh1hhj�éubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝéh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�éubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjëéh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj�é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&]”jjuh1j7hjîè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.”…”�”}”(hj"êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./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²hhjKò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Ž)�”}”(hjDêh]”hŒ Parameters”…”�”}”(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:133: ./mm/folio.c”h´Mõhj>êubj¤)�”}”(hhh]”(j©)�”}”(hŒ:``struct folio *folio`` The folio to be added to the LRU. ”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³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./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³jxêh´Mòhjyêubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj]êubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jxêh´MòhjZê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:133: ./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óhjZê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:133: ./mm/folio.c”h´Mõhj>ê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:133: ./mm/folio.c”h´Môhj>êubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"deactivate_file_folio (C function)”Œc.deactivate_file_folio”hNt”auh1hÜhjKò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”…”�”}”(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:133: ./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Œdeactivate_file_folio”h]”j)�”}”(hŒdeactivate_file_folio”h]”hŒdeactivate_file_folio”…”�”}”(hjOëh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjKëubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj*ëh²hh³j<ëh´M•ubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjkëh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjgëubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxëh²hh³Nh´Nubah•0}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjgë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”jèŒ reftarget”j‹ëŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjQësbŒc.deactivate_file_folio”†”asbuh1hhjgëubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©ëh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjgëubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj·ëh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjgëubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÄëh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjgëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjcëubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj*ë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Œ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:133: ./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²hhjKò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Ž)�”}”(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:133: ./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”…”�”}”(hj1ì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:133: ./mm/folio.c”h´M–hj)ìubjÉ)�”}”(hhh]”jM)�”}”(hŒFolio to deactivate.”h]”hŒFolio to deactivate.”…”�”}”(hjHìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jDìh´M–hjEìubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj)ìubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jDìh´M–hj&ìubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj ìubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjjìh]”hŒ Description”…”�”}”(hjlìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjhìubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/folio.c”h´M˜hj ì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:133: ./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:133: ./mm/folio.c”h´M›hj ì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:133: ./mm/folio.c”h´Mœhj ìubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ folio_mark_lazyfree (C function)”Œc.folio_mark_lazyfree”hNt”auh1hÜhjKò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:133: ./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”…”�”}”(hj íh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjíubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjäìh²hh³jöìh´M¾ubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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!í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”jèŒ reftarget”jEíŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj ísbŒc.folio_mark_lazyfree”†”asbuh1hhj!íubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcíh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj!íubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjqíh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj!í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&]”jjuh1j7hjäì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:133: ./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²hhjKò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:133: ./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:133: ./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Ž)�”}”(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:133: ./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 ”…”�”}”(hj:îh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjBîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj:îubhŒF to the inactive file list. This is done to accelerate the reclaim of ”…”�”}”(hj:îh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjTî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:133: ./mm/folio.c”h´MÀhjÄíubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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:133: ./mm/folio.c”h´Myubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœîh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‰îh²hh³j›îh´Myubhÿ)�”}”(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´Myubj8)�”}”(hŒU(const struct folio *folio, unsigned int extra_refs, enum lru_cache_drained *drained)”h]”(j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjåîh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÆîubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòîh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÆîubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjïubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jïŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj°îsbŒc.lru_cache_drain_for_folio”†”asbuh1hhjÆîubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#ïh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÆîubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj1ïh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÆî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 extra_refs”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjWïh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjSïubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeïh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjSïubjá)�”}”(hŒint”h]”hŒint”…”�”}”(hjsïh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjSïubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�ïh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjSïubj)�”}”(hŒ extra_refs”h]”hŒ extra_refs”…”�”}”(hj�ïh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjSïubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÂîubj>)�”}”(hŒenum lru_cache_drained *drained”h]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(hj¨ïh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¤ïubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµïh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¤ïubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jÈïŒmodname”NŒ classname”Njìjï)�”}”jò]”jïŒc.lru_cache_drain_for_folio”†”asbuh1hhj¤ïubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäïh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¤ïubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjòïh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¤ï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&]”jjuh1j7hj‰îh²hh³j›îh´Myubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj…îh²hh³j›îh´Myubah}”(h]”j€îah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j›îh´Myhj‚î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”…”�”}”(hj)ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/folio.c”h´Myhj&ðh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj‚îh²hh³j›îh´Myubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjAðjHjAðjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjKðh]”hŒ Parameters”…”�”}”(hjMðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjIðubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/folio.c”h´M}hjEðubj¤)�”}”(hhh]”(j©)�”}”(hŒ)``const struct folio *folio`` The folio. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjjðh]”hŒconst struct folio *folio”…”�”}”(hjlðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjhðubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/folio.c”h´M{hjdð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Èhjdðubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jðh´M{hjað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:133: ./mm/folio.c”h´M|hj�ð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´M|hj¹ðubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�ðubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¸ðh´M|hjað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:133: ./mm/folio.c”h´M}hjÖð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´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Ž)�”}”(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:133: ./mm/folio.c”h´MhjEð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.”…”�”}”(hj-ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/folio.c”h´M~hjEð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.”…”�”}”(hj<ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/folio.c”h´M‚hjEð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 ”…”�”}”(hjKñh²hh³Nh´NubjŽ)�”}”(hŒ **drained**”h]”hŒdrained”…”�”}”(hjSñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjKñubhŒ‚ is not NULL, the function will avoid re-draining LRU caches when processing multiple folios in a row. In that case, the variable ”…”�”}”(hjKñh²hh³Nh´NubjŽ)�”}”(hŒ **drained**”h]”hŒdrained”…”�”}”(hjeñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjKñubhŒb points at must be initialized to LRU_CACHE_NOT_DRAINED before the first invocation by the caller.”…”�”}”(hjKñh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/folio.c”h´MˆhjEðubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolios_put_refs (C function)”Œc.folios_put_refs”hNt”auh1hÜhjKò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:133: ./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Êubj8)�”}”(hŒ0(struct folio_batch *folios, unsigned int *refs)”h]”(j>)�”}”(hŒstruct folio_batch *folios”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÛñh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj×ñubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèñh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj×ñubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jûñŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÁñsbŒc.folios_put_refs”†”asbuh1hhj×ñubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj×ñubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj'òh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj×ñubj)�”}”(hŒfolios”h]”hŒfolios”…”�”}”(hj4ò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”…”�”}”(hjMòh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjIòubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[òh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjIòubjá)�”}”(hŒint”h]”hŒint”…”�”}”(hjiòh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjIòubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwòh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjIòubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj…òh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjIòubj)�”}”(hŒrefs”h]”hŒrefs”…”�”}”(hj’òh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjIòubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÓñubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjšñ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:133: ./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²hhjKò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:133: ./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:133: ./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)�”}”(hj6óh]”hŒunsigned int *refs”…”�”}”(hj8óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj4óubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/folio.c”h´MÌhj0óubjÉ)�”}”(hhh]”jM)�”}”(hŒ/The number of refs to subtract from each folio.”h]”hŒ/The number of refs to subtract from each folio.”…”�”}”(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ôò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³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./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:133: ./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:133: ./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:133: ./mm/folio.c”h´MÕhjØòubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒrelease_pages (C function)”Œc.release_pages”hNt”auh1hÜhjKò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:133: ./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”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ôubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjëóh²hh³jýóh´Mubj8)�”}”(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”…”�”}”(hj/ôh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj,ôubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j1ôŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjôsbŒc.release_pages”†”asbuh1hhj(ôubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOôh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj(ôubj)�”}”(hŒarg”h]”hŒarg”…”�”}”(hj]ôh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj(ôubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj$ôubj>)�”}”(hŒint nr”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjvôh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjrôubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„ôh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjrôubj)�”}”(hŒnr”h]”hŒnr”…”�”}”(hj’ôh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjrôubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj$ôubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjëó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:133: ./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²hhjKò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:133: ./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:133: ./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)�”}”(hj6õh]”hŒint nr”…”�”}”(hj8õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj4õubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/folio.c”h´Mhj0õubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages”h]”hŒnumber of pages”…”�”}”(hjOõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jKõh´MhjLõubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj0õubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jKõh´Mhjôô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³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./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:133: ./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:133: ./mm/folio.c”h´MhjØôubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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:133: ./mm/folio.c”h´MPubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæõh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÓõh²hh³jåõh´MPubhÿ)�”}”(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´MPubj8)�”}”(hŒ(struct folio_batch *fbatch)”h]”j>)�”}”(hŒstruct folio_batch *fbatch”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjöubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!öh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjöubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j4öŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjúõsbŒ!c.folio_batch_remove_exceptionals”†”asbuh1hhjöubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRöh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjöubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj`öh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjöubj)�”}”(hŒfbatch”h]”hŒfbatch”…”�”}”(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&]”jjuh1j7hjÓõ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Œ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:133: ./mm/folio.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²hhjKò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:133: ./mm/folio.c”h´MThj³ö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:133: ./mm/folio.c”h´MQhjÒö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´MQhjîöubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÒöubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jíöh´MQhjÏö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:133: ./mm/folio.c”h´MShj³ö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 ”…”�”}”(hj)÷h²hh³Nh´NubjŽ)�”}”(hŒ **fbatch**”h]”hŒfbatch”…”�”}”(hj1÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj)÷ubhŒS without leaving holes, so that it can be passed on to folio-only batch operations.”…”�”}”(hj)÷h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:133: ./mm/folio.c”h´MRhj³öubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒVstruct cgroup_subsys_state * get_mem_cgroup_css_from_folio (const struct folio *folio)”h]”hù)�”}”(hŒTstruct cgroup_subsys_state *get_mem_cgroup_css_from_folio(const struct folio *folio)”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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:134: ./mm/memcontrol.c”h´MUubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjx÷h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjf÷h²hh³jw÷h´MUubh)�”}”(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”jèŒ reftarget”j‹÷Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒget_mem_cgroup_css_from_folio”sbŒc.get_mem_cgroup_css_from_folio”†”asbuh1hhjf÷h²hh³jw÷h´MUubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª÷h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjf÷h²hh³jw÷h´MUubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¸÷h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjf÷h²hh³jw÷h´MUubhÿ)�”}”(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þhjf÷h²hh³jw÷h´MUubj8)�”}”(hŒ(const struct folio *folio)”h]”j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÿ÷h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjà÷ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj øh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjà÷ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjøubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jøŒmodname”NŒ classname”Njìjï)�”}”jò]”j¥÷Œc.get_mem_cgroup_css_from_folio”†”asbuh1hhjà÷ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;øh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjà÷ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjIøh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjà÷ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(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&]”jjuh1j7hjf÷h²hh³jw÷h´MUubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjb÷h²hh³jw÷h´MUubah}”(h]”j]÷ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jw÷h´MUhj_÷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:134: ./mm/memcontrol.c”h´MUhj}øh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj_÷h²hh³jw÷h´MUubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj˜øjHj˜øjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hXX**Parameters** ``const 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:134: ./mm/memcontrol.c”h´MYhjœøubj¤)�”}”(hhh]”j©)�”}”(hŒ0``const struct folio *folio`` folio of interest ”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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MVhj»ø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´MVhj×ø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œø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:134: ./mm/memcontrol.c”h´MXhjœø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”…”�”}”(hj,ù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:134: ./mm/memcontrol.c”h´MWhjœø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.”…”�”}”(hjEùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M[hjœøubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpage_cgroup_ino (C function)”Œc.page_cgroup_ino”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ/ino_t page_cgroup_ino (const struct page *page)”h]”hù)�”}”(hŒ.ino_t page_cgroup_ino(const struct page *page)”h]”(h)�”}”(hhh]”j)�”}”(hŒino_t”h]”hŒino_t”…”�”}”(hjwùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjtùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jyùŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒpage_cgroup_ino”sbŒc.page_cgroup_ino”†”asbuh1hhjpùh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mlubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™ùh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjpùh²hh³j˜ùh´Mlubhÿ)�”}”(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þhjpùh²hh³j˜ùh´Mlubj8)�”}”(hŒ(const struct page *page)”h]”j>)�”}”(hŒconst struct page *page”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjáùh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÂùubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîùh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÂùubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÿùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjüùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”júŒmodname”NŒ classname”Njìjï)�”}”jò]”j“ùŒc.page_cgroup_ino”†”asbuh1hhjÂùubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÂùubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj+úh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÂùubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj8ú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&]”jjuh1j7hjpùh²hh³j˜ùh´Mlubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjlùh²hh³j˜ùh´Mlubah}”(h]”jgùah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j˜ùh´Mlhjiù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”…”�”}”(hjbúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mlhj_úh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjiùh²hh³j˜ùh´Mlubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjzújHjzújI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hX;**Parameters** ``const 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Ž)�”}”(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:134: ./mm/memcontrol.c”h´Mphj~úubj¤)�”}”(hhh]”j©)�”}”(hŒ%``const struct page *page`` the page ”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:134: ./mm/memcontrol.c”h´Mmhj�úubjÉ)�”}”(hhh]”jM)�”}”(hŒthe page”h]”hŒthe page”…”�”}”(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šú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:134: ./mm/memcontrol.c”h´Mohj~ú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:134: ./mm/memcontrol.c”h´Mnhj~ú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).”…”�”}”(hj9ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mrhj~úubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ`unsigned long lruvec_page_state_monotonic (const struct lruvec *lruvec, enum node_stat_item idx)”h]”hù)�”}”(hŒ_unsigned long lruvec_page_state_monotonic(const struct lruvec *lruvec, enum node_stat_item idx)”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjhûh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjdûh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwûh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjdûh²hh³jvûh´Mubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj…ûh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjdûh²hh³jvûh´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“ûh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjdûh²hh³jvû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þhjdûh²hh³jvûh´Mubj8)�”}”(hŒ6(const struct lruvec *lruvec, enum node_stat_item idx)”h]”(j>)�”}”(hŒconst struct lruvec *lruvec”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÜûh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj½ûubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéûh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj½ûubh)�”}”(hhh]”j)�”}”(hŒlruvec”h]”hŒlruvec”…”�”}”(hjúûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj÷ûubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jüûŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj§ûsbŒc.lruvec_page_state_monotonic”†”asbuh1hhj½ûubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj½ûubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj(üh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj½ûubj)�”}”(hŒlruvec”h]”hŒlruvec”…”�”}”(hj5ü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]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(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üubh)�”}”(hhh]”j)�”}”(hŒnode_stat_item”h]”hŒnode_stat_item”…”�”}”(hjlüh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjiüubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jnüŒmodname”NŒ classname”Njìjï)�”}”jò]”jüŒc.lruvec_page_state_monotonic”†”asbuh1hhjJüubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠüh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjJüubj)�”}”(hŒidx”h]”hŒidx”…”�”}”(hj˜üh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjJüubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¹ûubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjdûh²hh³jvûh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj`ûh²hh³jvûh´Mubah}”(h]”j[ûah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jvûh´Mhj]û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:134: ./mm/memcontrol.c”h´Mhj¿üh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj]ûh²hh³jvûh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÚüjHjÚüjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hX5**Parameters** ``const 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:134: ./mm/memcontrol.c”h´MhjÞüubj¤)�”}”(hhh]”(j©)�”}”(hŒ<``const struct lruvec *lruvec`` the LRU vector to read from ”h]”(j¯)�”}”(hŒ``const struct lruvec *lruvec``”h]”jS)�”}”(hjýh]”hŒconst 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:134: ./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:134: ./mm/memcontrol.c”h´Mhj6ýubjÉ)�”}”(hhh]”jM)�”}”(hŒthe node_stat_item to read”h]”hŒthe node_stat_item to read”…”�”}”(hjUýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jQýh´MhjRýubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj6ýubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jQýh´Mhjúüubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÞü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:134: ./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.”…”�”}”(hj�ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./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.”…”�”}”(hjœýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MhjÞü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:134: ./mm/memcontrol.c”h´M!hjÞüubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmod_memcg_state (C function)”Œc.mod_memcg_state”hNt”auh1hÜhjKò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:134: ./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³ubj8)�”}”(hŒ=(struct mem_cgroup *memcg, enum memcg_stat_item idx, int val)”h]”(j>)�”}”(hŒstruct mem_cgroup *memcg”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjþubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$þh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjþubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hj5þh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2þubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j7þŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjýýsbŒc.mod_memcg_state”†”asbuh1hhjþubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUþh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjþubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjcþh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjþubj)�”}”(hŒmemcg”h]”hŒmemcg”…”�”}”(hjpþ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]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(hj‰þh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj…þubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–þh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj…þubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”j©þŒmodname”NŒ classname”Njìjï)�”}”jò]”jQþŒ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&]”jjuh1j7hjÖý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”…”�”}”(hj2ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./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&]”jFjAjGjJÿjHjJÿjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjTÿh]”hŒ Parameters”…”�”}”(hjVÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjRÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M·hjNÿubj¤)�”}”(hhh]”(j©)�”}”(hŒ/``struct mem_cgroup *memcg`` the memory cgroup ”h]”(j¯)�”}”(hŒ``struct mem_cgroup *memcg``”h]”jS)�”}”(hjsÿh]”hŒstruct mem_cgroup *memcg”…”�”}”(hjuÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjqÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M´hjmÿubjÉ)�”}”(hhh]”jM)�”}”(hŒthe memory cgroup”h]”hŒthe memory cgroup”…”�”}”(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ÿ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:134: ./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”…”�”•z}”(hjÅÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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Œ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:134: ./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:134: ./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·hjjÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjNÿubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmod_lruvec_state (C function)”Œc.mod_lruvec_state”hNt”auh1hÜhjKò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:134: ./mm/memcontrol.c”h´M ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj;h²hh³jMh´M ubhÿ)�”}”(hŒmod_lruvec_state”h]”j)�”}”(hŒmod_lruvec_state”h]”hŒmod_lruvec_state”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj\ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj;h²hh³jMh´M ubj8)�”}”(hŒ9(struct lruvec *lruvec, enum node_stat_item idx, int val)”h]”(j>)�”}”(hŒstruct lruvec *lruvec”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjxubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjxubh)�”}”(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”jèŒ reftarget”jœŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjbsbŒc.mod_lruvec_state”†”asbuh1hhjxubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjxubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjxubj)�”}”(hŒlruvec”h]”hŒlruvec”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjxubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjtubj>)�”}”(hŒenum node_stat_item idx”h]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjêubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjêubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jŒmodname”NŒ classname”Njìjï)�”}”jò]”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”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjêubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjtubj>)�”}”(hŒint val”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjMubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjMubj)�”}”(hŒval”h]”hŒval”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjMubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjtubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj;h²hh³jMh´M ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj7h²hh³jMh´M ubah}”(h]”j2ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jMh´M hj4h²hubj4)�”}”(hhh]”jM)�”}”(hŒupdate lruvec memory statistics”h]”hŒupdate lruvec memory statistics”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M hj”h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj4h²hh³jMh´M ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¯jHj¯jI‰jJ‰jK‰uh1híh²hhjKò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:134: ./mm/memcontrol.c”h´Mhj³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:134: ./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)�”}”(hjh]”hŒenum node_stat_item idx”…”�”}”(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:134: ./mm/memcontrol.c”h´Mhj 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´Mhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j&h´MhjÏubj©)�”}”(hŒ9``int val`` delta to add to the counter, can be negative ”h]”(j¯)�”}”(hŒ ``int val``”h]”jS)�”}”(hjJh]”hŒint val”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjHubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MhjDubjÉ)�”}”(hhh]”jM)�”}”(hŒ,delta to add to the counter, can be negative”h]”hŒ,delta to add to the counter, can be negative”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j_h´Mhj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjDubeh}”(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:134: ./mm/memcontrol.c”h´Mhj³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.”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mhj³ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒcount_memcg_events (C function)”Œc.count_memcg_events”hNt”auh1hÜhjKò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:134: ./mm/memcontrol.c”h´MOubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÆh²hh³jØh´MOubhÿ)�”}”(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´MOubj8)�”}”(hŒG(struct mem_cgroup *memcg, enum vm_event_item idx, unsigned long count)”h]”(j>)�”}”(hŒstruct mem_cgroup *memcg”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjubh)�”}”(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”jèŒ reftarget”j'Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjísbŒc.count_memcg_events”†”asbuh1hhjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjubj)�”}”(hŒmemcg”h]”hŒmemcg”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÿubj>)�”}”(hŒenum vm_event_item idx”h]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjuubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjuubh)�”}”(hhh]”j)�”}”(hŒ vm_event_item”h]”hŒ vm_event_item”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj”ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j™Œmodname”NŒ classname”Njìjï)�”}”jò]”jAŒc.count_memcg_events”†”asbuh1hhjuubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjuubj)�”}”(hŒidx”h]”hŒidx”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjuubeh}”(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Œ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjØubj)�”}”(hŒcount”h]”hŒcount”…”�”}”(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&]”jjuh1j7hjÆh²hh³jØh´MOubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÂh²hh³jØh´MOubah}”(h]”j½ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jØh´MOhj¿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:134: ./mm/memcontrol.c”h´MOhj;h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¿h²hh³jØh´MOubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjVjHjVjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hj`h]”hŒ Parameters”…”�”}”(hjbh²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:134: ./mm/memcontrol.c”h´MShjZubj¤)�”}”(hhh]”(j©)�”}”(hŒ/``struct mem_cgroup *memcg`` the memory cgroup ”h]”(j¯)�”}”(hŒ``struct mem_cgroup *memcg``”h]”jS)�”}”(hjh]”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:134: ./mm/memcontrol.c”h´MPhjyubjÉ)�”}”(hhh]”jM)�”}”(hŒthe memory cgroup”h]”hŒthe memory cgroup”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j”h´MPhj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjyubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j”h´MPhjvubj©)�”}”(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:134: ./mm/memcontrol.c”h´MQhj²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´MQhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÍh´MQhjvubj©)�”}”(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:134: ./mm/memcontrol.c”h´MShjë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:134: ./mm/memcontrol.c”h´MRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jh´MShjvubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjZubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjGh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mžubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjGh²hh³jXh´Mžubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjgubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jlŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒget_mem_cgroup_from_mm”sbŒc.get_mem_cgroup_from_mm”†”asbuh1hhjGh²hh³jXh´Mžubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjGh²hh³jXh´Mžubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjGh²hh³jXh´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þhjGh²hh³jXh´Mžubj8)�”}”(hŒ(struct mm_struct *mm)”h]”j>)�”}”(hŒstruct mm_struct *mm”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÁubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÁubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jåŒmodname”NŒ classname”Njìjï)�”}”jò]”j†Œc.get_mem_cgroup_from_mm”†”asbuh1hhjÁubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÁubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÁubj)�”}”(hŒmm”h]”hŒmm”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÁubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj½ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjGh²hh³jXh´Mžubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjCh²hh³jXh´Mžubah}”(h]”j>ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jXh´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.”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MžhjCh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj@h²hh³jXh´Mžubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj^jHj^jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjhh]”hŒ Parameters”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjfubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M¢hjbubj¤)�”}”(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:134: ./mm/memcontrol.c”h´MŸhj�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.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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£hjbubjM)�”}”(hŒ**Description**”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:134: ./mm/memcontrol.c”h´M¡hjbubjM)�”}”(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:134: ./mm/memcontrol.c”h´M hjbubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MÐubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjh²hh³jh´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”jèŒ reftarget”j(Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒget_mem_cgroup_from_current”sbŒc.get_mem_cgroup_from_current”†”asbuh1hhjh²hh³jh´MÐubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjh²hh³jh´MÐubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjh²hh³jh´MÐubhÿ)�”}”(hŒget_mem_cgroup_from_current”h]”j)�”}”(hjDh]”hŒget_mem_cgroup_from_current”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjbubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjh²hh³jh´MÐubj8)�”}”(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=hjyubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjh²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Œ+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:134: ./mm/memcontrol.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²hhjKò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:134: ./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:134: ./mm/memcontrol.c”h´MÖhjæubjÉ)�”}”(hhh]”jM)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Khjubah}”(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Çubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒIstruct mem_cgroup * get_mem_cgroup_from_folio (const struct folio *folio)”h]”hù)�”}”(hŒGstruct mem_cgroup *get_mem_cgroup_from_folio(const struct folio *folio)”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjBh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Måubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjBh²hh³jSh´Måubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjbubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jgŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒget_mem_cgroup_from_folio”sbŒc.get_mem_cgroup_from_folio”†”asbuh1hhjBh²hh³jSh´Måubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjBh²hh³jSh´Måubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjBh²hh³jSh´Måubhÿ)�”}”(hŒget_mem_cgroup_from_folio”h]”j)�”}”(hjƒh]”hŒget_mem_cgroup_from_folio”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¡ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjBh²hh³jSh´Måubj8)�”}”(hŒ(const struct folio *folio)”h]”j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¼ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¼ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjöubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jûŒmodname”NŒ classname”Njìjï)�”}”jò]”j�Œc.get_mem_cgroup_from_folio”†”asbuh1hhj¼ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¼ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj% h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¼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&]”jjuh1j7hjBh²hh³jSh´Måubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj>h²hh³jSh´Måubah}”(h]”j9ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jSh´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:134: ./mm/memcontrol.c”h´MåhjY h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj;h²hh³jSh´Måubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjt jHjt jI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hŒ¥**Parameters** ``const 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�hj| ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Méhjx ubj¤)�”}”(hhh]”j©)�”}”(hŒJ``const struct folio *folio`` folio from which memcg should be extracted. ”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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mæhj— ubjÉ)�”}”(hhh]”jM)�”}”(hŒ+folio from which memcg should be extracted.”h]”hŒ+folio from which memcg should be extracted.”…”�”}”(hj¶ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mèhjx 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:134: ./mm/memcontrol.c”h´Mçhjx ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmem_cgroup_iter (C function)”Œc.mem_cgroup_iter”hNt”auh1hÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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:134: ./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”jèŒ reftarget”j> Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒ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ýubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjk h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj h²hh³j* h´Mýubhÿ)�”}”(hŒmem_cgroup_iter”h]”j)�”}”(hjZ h]”hŒmem_cgroup_iter”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjx ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj h²hh³j* h´Mýubj8)�”}”(hŒ](struct mem_cgroup *root, struct mem_cgroup *prev, struct mem_cgroup_reclaim_cookie *reclaim)”h]”(j>)�”}”(hŒstruct mem_cgroup *root”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj— h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj“ ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤ h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj“ ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j· Œmodname”NŒ classname”Njìjï)�”}”jò]”jX Œc.mem_cgroup_iter”†”asbuh1hhj“ ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓ h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj“ ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjá h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj“ 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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j' Œmodname”NŒ classname”Njìjï)�”}”jò]”jX Œc.mem_cgroup_iter”†”asbuh1hhj ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjC h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj 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=hj� ubj>)�”}”(hŒ)struct mem_cgroup_reclaim_cookie *reclaim”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjw h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjs ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„ h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjs ubh)�”}”(hhh]”j)�”}”(hŒmem_cgroup_reclaim_cookie”h]”hŒmem_cgroup_reclaim_cookie”…”�”}”(hj• h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj’ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j— Œmodname”NŒ classname”Njìjï)�”}”jò]”jX Œc.mem_cgroup_iter”†”asbuh1hhjs ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³ h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjs ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÁ h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjs ubj)�”}”(hŒreclaim”h]”hŒreclaim”…”�”}”(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&]”jjuh1j7hj 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:134: ./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²hhjKò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:134: ./mm/memcontrol.c”h´Mhj ubj¤)�”}”(hhh]”(j©)�”}”(hŒ+``struct mem_cgroup *root`` hierarchy root ”h]”(j¯)�”}”(hŒ``struct mem_cgroup *root``”h]”jS)�”}”(hj9 h]”hŒstruct mem_cgroup *root”…”�”}”(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:134: ./mm/memcontrol.c”h´Mþhj3 ubjÉ)�”}”(hhh]”jM)�”}”(hŒhierarchy root”h]”hŒhierarchy root”…”�”}”(hjR h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jN h´MþhjO ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj3 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jN h´Mþhj0 ubj©)�”}”(hŒP``struct mem_cgroup *prev`` previously returned memcg, NULL on first invocation ”h]”(j¯)�”}”(hŒ``struct mem_cgroup *prev``”h]”jS)�”}”(hjr h]”hŒstruct mem_cgroup *prev”…”�”}”(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:134: ./mm/memcontrol.c”h´Mÿhjl ubjÉ)�”}”(hhh]”jM)�”}”(hŒ3previously returned memcg, NULL on first invocation”h]”hŒ3previously returned memcg, NULL on first invocation”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‡ h´Mÿhjˆ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjl ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‡ h´Mÿhj0 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)�”}”(hj« h]”hŒ)struct mem_cgroup_reclaim_cookie *reclaim”…”�”}”(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:134: ./mm/memcontrol.c”h´Mhj¥ 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´MhjÁ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¥ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÀ h´Mhj0 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:134: ./mm/memcontrol.c”h´Mhj 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:134: ./mm/memcontrol.c”h´Mhj 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 ”…”�”}”(hjA h²hh³Nh´NubjŽ)�”}”(hŒ**prev**”h]”hŒprev”…”�”}”(hjI h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjA ubhŒ� on subsequent invocations for reference counting, or use mem_cgroup_iter_break() to cancel a hierarchy walk before the round-trip is complete.”…”�”}”(hjA h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mhj 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 ”…”�”}”(hjb h²hh³Nh´NubjŽ)�”}”(hŒ **reclaim**”h]”hŒreclaim”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjb ubhŒe to divide up the memcgs in the hierarchy among all concurrent reclaimers operating on the same node.”…”�”}”(hjb h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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:134: ./mm/memcontrol.c”h´Meubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj² h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjŸ h²hh³j± h´Meubhÿ)�”}”(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³j± h´Meubj8)�”}”(hŒ2(struct mem_cgroup *root, struct mem_cgroup *prev)”h]”(j>)�”}”(hŒstruct mem_cgroup *root”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÜ ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÜ ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÆ sbŒc.mem_cgroup_iter_break”†”asbuh1hhjÜ ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÜ ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÜ ubj)�”}”(hŒroot”h]”hŒroot”…”�”}”(hj9h²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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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òhjNubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjmubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jrŒmodname”NŒ classname”Njìjï)�”}”jò]”jŒc.mem_cgroup_iter_break”†”asbuh1hhjNubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjNubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjNubj)�”}”(hŒprev”h]”hŒprev”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjNubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjØ ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjŸ h²hh³j± h´Meubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj› h²hh³j± h´Meubah}”(h]”j– ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j± h´Mehj˜ 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:134: ./mm/memcontrol.c”h´MehjÐh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj˜ h²hh³j± h´Meubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjëjHjëjI‰jJ‰jK‰uh1híh²hhjKò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:134: ./mm/memcontrol.c”h´Mihjïubj¤)�”}”(hhh]”(j©)�”}”(hŒ+``struct mem_cgroup *root`` hierarchy root ”h]”(j¯)�”}”(hŒ``struct mem_cgroup *root``”h]”jS)�”}”(hjh]”hŒstruct mem_cgroup *root”…”�”}”(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:134: ./mm/memcontrol.c”h´MfhjubjÉ)�”}”(hhh]”jM)�”}”(hŒhierarchy root”h]”hŒhierarchy root”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j)h´Mfhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j)h´Mfhj 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)�”}”(hjMh]”hŒstruct mem_cgroup *prev”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjKubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MhhjGubjÉ)�”}”(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()”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mghjcubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjGubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jbh´Mhhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjïubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(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:134: ./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_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³jµh´M–ubj8)�”}”(hŒL(struct mem_cgroup *memcg, int (*fn)(struct task_struct*, void*), void *arg)”h]”(j>)�”}”(hŒstruct mem_cgroup *memcg”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjàubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjàubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÿubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÊsbŒc.mem_cgroup_scan_tasks”†”asbuh1hhjàubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjàubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjà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”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjRubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjRubjr)�”}”(hj�?h]”hŒ(”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjRubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjRubj)�”}”(hŒfn”h]”hŒfn”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjRubjr)�”}”(hjÆ?h]”hŒ)”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjRubjr)�”}”(hj�?h]”hŒ(”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjRubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjRubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjRubh)�”}”(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”jèŒ reftarget”jÔŒmodname”NŒ classname”Njìjï)�”}”jò]”jŒc.mem_cgroup_scan_tasks”†”asbuh1hhjRubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjRubjr)�”}”(hŒ,”h]”hŒ,”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjRubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjRubjá)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjRubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjRubjr)�”}”(hjÆ?h]”hŒ)”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÜubj>)�”}”(hŒ void *arg”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjHubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjHubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjHubj)�”}”(hŒarg”h]”hŒarg”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjHubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÜubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj£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 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:134: ./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²hhjKò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:134: ./mm/memcontrol.c”h´Mšhj»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:134: ./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ŒK``int (*fn)(struct task_struct *, void *)`` function to call for each task ”h]”(j¯)�”}”(hŒ+``int (*fn)(struct task_struct *, void *)``”h]”jS)�”}”(hjh]”hŒ'int (*fn)(struct task_struct *, void *)”…”�”}”(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:134: ./mm/memcontrol.c”h´M˜hjubjÉ)�”}”(hhh]”jM)�”}”(hŒfunction to call for each task”h]”hŒfunction to call for each task”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j.h´M˜hj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j.h´M˜hj×ubj©)�”}”(hŒ(``void *arg`` argument passed to **fn** ”h]”(j¯)�”}”(hŒ ``void *arg``”h]”jS)�”}”(hjRh]”hŒ void *arg”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M™hjLubjÉ)�”}”(hhh]”jM)�”}”(hŒargument passed to **fn**”h]”(hŒargument passed to ”…”�”}”(hjkh²hh³Nh´NubjŽ)�”}”(hŒ**fn**”h]”hŒfn”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjkubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jgh´M™hjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jgh´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:134: ./mm/memcontrol.c”h´M›hj»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 ”…”�”}”(hj±h²hh³Nh´NubjŽ)�”}”(hŒ **memcg**”h]”hŒmemcg”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj±ubhŒ( or to any of its descendants and calls ”…”�”}”(hj±h²hh³Nh´NubjŽ)�”}”(hŒ**fn**”h]”hŒfn”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj±ubhŒ for each task. If ”…”�”}”(hj±h²hh³Nh´NubjŽ)�”}”(hŒ**fn**”h]”hŒfn”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj±ubhŒz returns a non-zero value, the function breaks the iteration loop. Otherwise, it will iterate over all tasks and return 0.”…”�”}”(hj±h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mšhj»ubjM)�”}”(hŒ)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj›ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj›ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÚŒmodname”NŒ classname”Njìjï)�”}”jò]”j`Œc.folio_lruvec_lock”†”asbuh1hhj›ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj›ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj›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—ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj!h²hh³j2h´M½ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjh²hh³j2h´M½ubah}”(h]”jah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j2h´M½hjh²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:134: ./mm/memcontrol.c”h´M½hj8h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjh²hh³j2h´M½ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjSjHjSjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hX7**Parameters** ``const 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 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:134: ./mm/memcontrol.c”h´MÁhjWubj¤)�”}”(hhh]”j©)�”}”(hŒ4``const struct folio *folio`` Pointer to 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&]”uh1jRhjzubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M¾hjvubjÉ)�”}”(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Èhjvubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‘h´M¾hjsubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjWubjM)�”}”(hŒ**Description**”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:134: ./mm/memcontrol.c”h´MÀhjWubjM)�”}”(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:134: ./mm/memcontrol.c”h´M¿hjWubjM)�”}”(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:134: ./mm/memcontrol.c”h´MÄhjWubjM)�”}”(hŒFThe lruvec this folio is on with its lock held and rcu read lock held.”h]”hŒFThe lruvec this folio is on with its lock held 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:134: ./mm/memcontrol.c”h´MÅhjWubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"folio_lruvec_lock_irq (C function)”Œc.folio_lruvec_lock_irq”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒAstruct lruvec * folio_lruvec_lock_irq (const struct folio *folio)”h]”hù)�”}”(hŒ?struct lruvec *folio_lruvec_lock_irq(const struct folio *folio)”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MØubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjh²hh³j0h´MØubh)�”}”(hhh]”j)�”}”(hŒlruvec”h]”hŒlruvec”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj?ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jDŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒfolio_lruvec_lock_irq”sbŒc.folio_lruvec_lock_irq”†”asbuh1hhjh²hh³j0h´MØubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjh²hh³j0h´MØubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjh²hh³j0h´MØubhÿ)�”}”(hŒfolio_lruvec_lock_irq”h]”j)�”}”(hj`h]”hŒfolio_lruvec_lock_irq”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj~ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjh²hh³j0h´MØubj8)�”}”(hŒ(const struct folio *folio)”h]”j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj™ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj™ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÓubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jØŒmodname”NŒ classname”Njìjï)�”}”jò]”j^Œc.folio_lruvec_lock_irq”†”asbuh1hhj™ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj™ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj™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•ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjh²hh³j0h´MØubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjh²hh³j0h´MØubah}”(h]”jah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j0h´MØhjh²hubj4)�”}”(hhh]”jM)�”}”(hŒLock the lruvec for a folio.”h]”hŒLock the lruvec for a folio.”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MØhj6h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjh²hh³j0h´MØubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjQjHjQjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hXO**Parameters** ``const 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�hjYubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MÜhjUubj¤)�”}”(hhh]”j©)�”}”(hŒ4``const struct folio *folio`` Pointer to the folio. ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjzh]”hŒconst struct folio *folio”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjxubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MÙhjtubjÉ)�”}”(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Èhjtubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�h´MÙhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjUubjM)�”}”(hŒ**Description**”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:134: ./mm/memcontrol.c”h´MÛhjUubjM)�”}”(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:134: ./mm/memcontrol.c”h´MÚhjUubjM)�”}”(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:134: ./mm/memcontrol.c”h´MßhjUubjM)�”}”(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:134: ./mm/memcontrol.c”h´MàhjUubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ[struct lruvec * folio_lruvec_lock_irqsave (const struct folio *folio, unsigned long *flags)”h]”hù)�”}”(hŒYstruct lruvec *folio_lruvec_lock_irqsave(const struct folio *folio, unsigned long *flags)”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.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)�”}”(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”jèŒ reftarget”jBŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒfolio_lruvec_lock_irqsave”sbŒc.folio_lruvec_lock_irqsave”†”asbuh1hhjh²hh³j.h´Môubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjh²hh³j.h´Môubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjh²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þhjh²hh³j.h´Môubj8)�”}”(hŒ1(const struct folio *folio, unsigned long *flags)”h]”(j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj—ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj—ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÑubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÖŒmodname”NŒ classname”Njìjï)�”}”jò]”j\Œc.folio_lruvec_lock_irqsave”†”asbuh1hhj—ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj—ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj—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 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Œ ”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj"ubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(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"ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj"ubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj"ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj“ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjh²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Œ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:134: ./mm/memcontrol.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²hhjKòh³Nh´Nubj„)�”}”(hX…**Parameters** ``const 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:134: ./mm/memcontrol.c”h´Møhj±ubj¤)�”}”(hhh]”(j©)�”}”(hŒ4``const struct folio *folio`` Pointer to 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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./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Íubj©)�”}”(hŒ3``unsigned long *flags`` Pointer to irqsave flags. ”h]”(j¯)�”}”(hŒ``unsigned long *flags``”h]”jS)�”}”(hjh]”hŒunsigned long *flags”…”�”}”(hjh²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:134: ./mm/memcontrol.c”h´Möhj 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È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Ž)�”}”(hjJh]”hŒ Description”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjHubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./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:134: ./mm/memcontrol.c”h´M÷hj±ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjqh]”hŒReturn”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjoubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./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:134: ./mm/memcontrol.c”h´Mýhj±ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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:134: ./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_update_lru_size”h]”j)�”}”(hŒmem_cgroup_update_lru_size”h]”hŒmem_cgroup_update_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´Mubj8)�”}”(hŒB(struct lruvec *lruvec, enum lru_list lru, int zid, long nr_pages)”h]”(j>)�”}”(hŒstruct lruvec *lruvec”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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ïubh)�”}”(hhh]”j)�”}”(hŒlruvec”h]”hŒlruvec”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÙsbŒc.mem_cgroup_update_lru_size”†”asbuh1hhjïubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjïubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjïubj)�”}”(hŒlruvec”h]”hŒlruvec”…”�”}”(hjLh²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]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjaubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjaubh)�”}”(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”jèŒ reftarget”j…Œmodname”NŒ classname”Njìjï)�”}”jò]”j-Œc.mem_cgroup_update_lru_size”†”asbuh1hhjaubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjaubj)�”}”(hŒlru”h]”hŒlru”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjaubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjëubj>)�”}”(hŒint zid”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Œzid”h]”hŒzid”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÄubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjëubj>)�”}”(hŒ long nr_pages”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Œnr_pages”h]”hŒnr_pages”…”�”}”(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&]”jjuh1j7hj²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Œ*account for adding or removing an lru page”h]”hŒ*account for adding or removing an lru page”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./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²hhjKò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Ž)�”}”(hjeh]”hŒ Parameters”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjcubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mhj_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:134: ./mm/memcontrol.c”h´Mhj~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´Mhjšubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j™h´Mhj{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:134: ./mm/memcontrol.c”h´Mhj·ubjÉ)�”}”(hhh]”jM)�”}”(hŒ(index of lru list the page is sitting on”h]”hŒ(index of lru list the page is sitting on”…”�”}”(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 zid`` zone id of the accounted pages ”h]”(j¯)�”}”(hŒ ``int zid``”h]”jS)�”}”(hjöh]”hŒint zid”…”�”}”(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:134: ./mm/memcontrol.c”h´MhjðubjÉ)�”}”(hhh]”jM)�”}”(hŒzone id of the accounted pages”h]”hŒzone id of the accounted pages”…”�”}”(hjh²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Œ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”…”�”}”(hj1h²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:134: ./mm/memcontrol.c”h´Mhj)ubjÉ)�”}”(hhh]”jM)�”}”(hŒ.positive when adding or negative when removing”h]”hŒ.positive when adding or negative when removing”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jDh´MhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jDh´Mhj{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj_ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjjh]”hŒ Description”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjhubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mhj_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:134: ./mm/memcontrol.c”h´Mhj_ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmem_cgroup_margin (C function)”Œc.mem_cgroup_margin”hNt”auh1hÜhjKò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:134: ./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(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Œmem_cgroup_margin”h]”j)�”}”(hŒmem_cgroup_margin”h]”hŒmem_cgroup_margin”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjèubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj«h²hh³j½h´M(ubj8)�”}”(hŒ(struct mem_cgroup *memcg)”h]”j>)�”}”(hŒstruct mem_cgroup *memcg”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjubh)�”}”(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”jèŒ reftarget”j(Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjîsbŒc.mem_cgroup_margin”†”asbuh1hhjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjubj)�”}”(hŒmemcg”h]”hŒmemcg”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj«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Œ-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:134: ./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²hhjKò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:134: ./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)�”}”(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:134: ./mm/memcontrol.c”h´M)hjÆubjÉ)�”}”(hhh]”jM)�”}”(hŒthe memory cgroup”h]”hŒthe memory cgroup”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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”…”�”}”(hj h²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:134: ./mm/memcontrol.c”h´M+hj§ubjM)�”}”(hŒKReturns the maximum amount of memory **mem** can be charged with, in pages.”h]”(hŒ%Returns the maximum amount of memory ”…”�”}”(hjh²hh³Nh´NubjŽ)�”}”(hŒ**mem**”h]”hŒmem”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubhŒ can be charged with, in pages.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M*hj§ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒYvoid mem_cgroup_print_oom_context (const struct mem_cgroup *memcg, struct task_struct *p)”h]”hù)�”}”(hŒXvoid mem_cgroup_print_oom_context(const 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àhjZh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M"ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjZh²hh³jlh´M"ubhÿ)�”}”(hŒmem_cgroup_print_oom_context”h]”j)�”}”(hŒmem_cgroup_print_oom_context”h]”hŒmem_cgroup_print_oom_context”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj{ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjZh²hh³jlh´M"ubj8)�”}”(hŒ7(const struct mem_cgroup *memcg, struct task_struct *p)”h]”(j>)�”}”(hŒconst struct mem_cgroup *memcg”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj—ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj—ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jÖŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj�sbŒc.mem_cgroup_print_oom_context”†”asbuh1hhj—ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj—ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj—ubj)�”}”(hŒmemcg”h]”hŒmemcg”…”�”}”(hjh²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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj$ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj$ubh)�”}”(hhh]”j)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjCubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jHŒmodname”NŒ classname”Njìjï)�”}”jò]”jðŒc.mem_cgroup_print_oom_context”†”asbuh1hhj$ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj$ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj$ubj)�”}”(hj~h]”hŒp”…”�”}”(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&]”jjuh1j7hjZh²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Œ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:134: ./mm/memcontrol.c”h´M"hj¥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²hhjKòh³Nh´Nubj„)�”}”(hŒï**Parameters** ``const 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:134: ./mm/memcontrol.c”h´M&hjÄubj¤)�”}”(hhh]”(j©)�”}”(hŒJ``const struct mem_cgroup *memcg`` The memory cgroup that went over limit ”h]”(j¯)�”}”(hŒ"``const struct mem_cgroup *memcg``”h]”jS)�”}”(hjéh]”hŒconst 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:134: ./mm/memcontrol.c”h´M$hjãubjÉ)�”}”(hhh]”jM)�”}”(hŒ&The memory cgroup that went over limit”h]”hŒ&The memory cgroup that went over limit”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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 task_struct *p`` Task that is going to be killed ”h]”(j¯)�”}”(hŒ``struct task_struct *p``”h]”jS)�”}”(hj" h]”hŒstruct task_struct *p”…”�”}”(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:134: ./mm/memcontrol.c”h´M%hj 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³j7 h´M%hj8 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j7 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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M'hjÄubjM)�”}”(hŒK**memcg** and **p**'s mem_cgroup can be different when hierarchy is enabled”h]”(jŽ)�”}”(hŒ **memcg**”h]”hŒmemcg”…”�”}”(hjw h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjs ubhŒ and ”…”�”}”(hjs h²hh³Nh´NubjŽ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj‰ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjs ubhŒ:’s mem_cgroup can be different when hierarchy is enabled”…”�”}”(hjs h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M'hjÄubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ)�”}”(hŒstruct mem_cgroup *memcg”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÿ h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjû ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj !h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjû ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j!Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjå sbŒc.mem_cgroup_print_oom_meminfo”†”asbuh1hhjû ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=!h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjû ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjK!h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjû ubj)�”}”(hŒmemcg”h]”hŒmemcg”…”�”}”(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&]”jjuh1j7hj¾ 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 OOM memory information relevant to memory controller.”h]”hŒ;Print OOM memory 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:134: ./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²hhjKòh³Nh´Nubj„)�”}”(hŒU**Parameters** ``struct mem_cgroup *memcg`` The memory cgroup that went over limit”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:134: ./mm/memcontrol.c”h´M@hjž!ubj¤)�”}”(hhh]”j©)�”}”(hŒC``struct mem_cgroup *memcg`` The memory cgroup that went over limit”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:134: ./mm/memcontrol.c”h´MBhj½!ubjÉ)�”}”(hhh]”jM)�”}”(hŒ&The memory cgroup that went over limit”h]”hŒ&The memory cgroup that went over limit”…”�”}”(hjÜ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M>hjÙ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj½!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jØ!h´MBhjº!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjž!ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%mem_cgroup_get_oom_group (C function)”Œc.mem_cgroup_get_oom_group”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒhstruct mem_cgroup * mem_cgroup_get_oom_group (struct task_struct *victim, struct mem_cgroup *oom_domain)”h]”hù)�”}”(hŒfstruct mem_cgroup *mem_cgroup_get_oom_group(struct task_struct *victim, struct mem_cgroup *oom_domain)”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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:134: ./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”jèŒ reftarget”j>"Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒmem_cgroup_get_oom_group”sbŒc.mem_cgroup_get_oom_group”†”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Óubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjk"h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj"h²hh³j*"h´MÓubhÿ)�”}”(hŒmem_cgroup_get_oom_group”h]”j)�”}”(hjZ"h]”hŒmem_cgroup_get_oom_group”…”�”}”(hj|"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjx"ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj"h²hh³j*"h´MÓubj8)�”}”(hŒ;(struct task_struct *victim, struct mem_cgroup *oom_domain)”h]”(j>)�”}”(hŒstruct task_struct *victim”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj—"h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj“"ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤"h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj“"ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j·"Œmodname”NŒ classname”Njìjï)�”}”jò]”jX"Œc.mem_cgroup_get_oom_group”†”asbuh1hhj“"ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓ"h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj“"ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjá"h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj“"ubj)�”}”(hŒvictim”h]”hŒvictim”…”�”}”(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 *oom_domain”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj#ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj#ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j'#Œmodname”NŒ classname”Njìjï)�”}”jò]”jX"Œc.mem_cgroup_get_oom_group”†”asbuh1hhj#ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjC#h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj#ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjQ#h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj#ubj)�”}”(hŒ oom_domain”h]”hŒ oom_domain”…”�”}”(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&]”jjuh1j7hj"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 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:134: ./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²hhjKò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:134: ./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:134: ./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”…”�”}”(hjâ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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)�”}”(hj$h]”hŒstruct mem_cgroup *oom_domain”…”�”}”(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:134: ./mm/memcontrol.c”h´MÕhjü#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”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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:134: ./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.”…”�”}”(hjS$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./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.”…”�”}”(hjb$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MÙhj¤#ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒconsume_stock (C function)”Œc.consume_stock”hNt”auh1hÜhjKò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:134: ./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Œ 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´M_ubj8)�”}”(hŒ1(struct mem_cgroup *memcg, unsigned int nr_pages)”h]”(j>)�”}”(hŒstruct mem_cgroup *memcg”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÍ$h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÉ$ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚ$h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÉ$ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jí$Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj³$sbŒc.consume_stock”†”asbuh1hhjÉ$ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj %h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÉ$ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÉ$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Œ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Œ ”…”�”}”(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Œnr_pages”h]”hŒnr_pages”…”�”}”(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&]”jjuh1j7hj�$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 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:134: ./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²hhjKò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:134: ./mm/memcontrol.c”h´Mchj½%ubj¤)�”}”(hhh]”(j©)�”}”(hŒ4``struct mem_cgroup *memcg`` memcg to consume from. ”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:134: ./mm/memcontrol.c”h´M`hjÜ%ubjÉ)�”}”(hhh]”jM)�”}”(hŒmemcg to consume from.”h]”hŒmemcg to consume 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Œ4``unsigned int nr_pages`` how many 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:134: ./mm/memcontrol.c”h´Mahj&ubjÉ)�”}”(hhh]”jM)�”}”(hŒhow many pages to charge.”h]”hŒhow many pages to charge.”…”�”}”(hj4&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j0&h´Mahj1&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j0&h´MahjÙ%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:134: ./mm/memcontrol.c”h´Mchj½%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.”…”�”}”(hjl&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mbhj½%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:134: ./mm/memcontrol.c”h´Mfhj½%ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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:134: ./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Œ__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´M´ ubj8)�”}”(hŒ)(struct page *page, gfp_t gfp, int order)”h]”(j>)�”}”(hŒstruct page *page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjç&h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjã&ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjô&h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjã&ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j'Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÍ&sbŒc.__memcg_kmem_charge_page”†”asbuh1hhjã&ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%'h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjã&ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj3'h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjã&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Œ gfp_t gfp”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj\'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjY'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j^'Œmodname”NŒ classname”Njìjï)�”}”jò]”j!'Œc.__memcg_kmem_charge_page”†”asbuh1hhjU'ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjz'h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjU'ubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjˆ'h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjU'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&]”jjuh1j7hj¦&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 kmem page to the current memory cgroup”h]”hŒ/charge a kmem page to the current memory cgroup”…”�”}”(hjç'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./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²hhjKò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Ž)�”}”(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:134: ./mm/memcontrol.c”h´M¸ hj(ubj¤)�”}”(hhh]”(j©)�”}”(hŒ%``struct page *page`` page to charge ”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:134: ./mm/memcontrol.c”h´Mµ hj"(ubjÉ)�”}”(hhh]”jM)�”}”(hŒpage to charge”h]”hŒpage to charge”…”�”}”(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Œ``gfp_t gfp`` reclaim mode ”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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M¶ hj[(ubjÉ)�”}”(hhh]”jM)�”}”(hŒ reclaim mode”h]”hŒ reclaim mode”…”�”}”(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Œ``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:134: ./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³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:134: ./mm/memcontrol.c”h´M¹ hj(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:134: ./mm/memcontrol.c”h´M¸ hj(ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(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:134: ./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Œ__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&]”uh1jhj7)ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj)h²hh³j()h´MÍ ubj8)�”}”(hŒ(struct page *page, int order)”h]”(j>)�”}”(hŒstruct page *page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjW)h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjS)ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjd)h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjS)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”jèŒ reftarget”jw)Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj=)sbŒc.__memcg_kmem_uncharge_page”†”asbuh1hhjS)ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•)h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjS)ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj£)h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjS)ubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj°)h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjS)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjO)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=hjO)ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj)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 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:134: ./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²hhjKòh³Nh´Nubj„)�”}”(hŒZ**Parameters** ``struct page *page`` page to uncharge ``int order`` allocation order”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj1*h]”hŒ Parameters”…”�”}”(hj3*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj/*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MÑ hj+*ubj¤)�”}”(hhh]”(j©)�”}”(hŒ'``struct page *page`` page to uncharge ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hjP*h]”hŒstruct page *page”…”�”}”(hjR*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjN*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MÎ hjJ*ubjÉ)�”}”(hhh]”jM)�”}”(hŒpage to uncharge”h]”hŒpage to uncharge”…”�”}”(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Î hjG*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:134: ./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:134: ./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Ð hjG*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj+*ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(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:134: ./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_wb_stats”h]”j)�”}”(hŒmem_cgroup_wb_stats”h]”hŒmem_cgroup_wb_stats”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj+ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjß*h²hh³jñ*h´Mubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj +h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj+ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-+h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj+ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j@+Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj+sbŒc.mem_cgroup_wb_stats”†”asbuh1hhj+ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^+h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj+ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjl+h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj+ubj)�”}”(hŒwb”h]”hŒwb”…”�”}”(hjy+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj+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Ž+ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÊ+h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjŽ+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=hj+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Œ ”…”�”}”(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ì+ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj(,h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjì+ubj)�”}”(hŒ pheadroom”h]”hŒ pheadroom”…”�”}”(hj5,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjì+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj+ubj>)�”}”(hŒunsigned long *pdirty”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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,ubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjj,h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjJ,ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjx,h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjJ,ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj†,h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjJ,ubj)�”}”(hŒpdirty”h]”hŒpdirty”…”�”}”(hj“,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjJ,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj+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¨,ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjä,h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¨,ubj)�”}”(hŒ pwriteback”h]”hŒ pwriteback”…”�”}”(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&]”jjuh1j7hjß*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Œ/retrieve writeback related stats from its memcg”h]”hŒ/retrieve writeback related stats from its memcg”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./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&]”jFjAjGj3-jHj3-jI‰jJ‰jK‰uh1híh²hhjKò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:134: ./mm/memcontrol.c”h´Mhj7-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&]”uh1jRhjZ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MhjV-ubjÉ)�”}”(hhh]”jM)�”}”(hŒbdi_writeback in question”h]”hŒbdi_writeback in question”…”�”}”(hju-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jq-h´Mhjr-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjV-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jq-h´MhjS-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:134: ./mm/memcontrol.c”h´Mhj�-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´Mhj«-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jª-h´MhjS-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:134: ./mm/memcontrol.c”h´MhjÈ-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”…”�”}”(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´MhjS-ubj©)�”}”(hŒB``unsigned long *pdirty`` out parameter for number of dirty pages ”h]”(j¯)�”}”(hŒ``unsigned long *pdirty``”h]”jS)�”}”(hj.h]”hŒunsigned long *pdirty”…”�”}”(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:134: ./mm/memcontrol.c”h´Mhj.ubjÉ)�”}”(hhh]”jM)�”}”(hŒ'out parameter for number of dirty pages”h]”hŒ'out parameter for number of dirty pages”…”�”}”(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´MhjS-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”…”�”}”(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:134: ./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”…”�”}”(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 hjS-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj7-ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj{.h]”hŒ Description”…”�”}”(hj}.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjy.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M"hj7-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:134: ./mm/memcontrol.c”h´M!hj7-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:134: ./mm/memcontrol.c”h´M%hj7-ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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:134: ./mm/memcontrol.c”h´M2ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjï.h²hh³j/h´M2ubh)�”}”(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”jèŒ reftarget”j/Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒmem_cgroup_from_private_id”sbŒc.mem_cgroup_from_private_id”†”asbuh1hhjï.h²hh³j/h´M2ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3/h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjï.h²hh³j/h´M2ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjA/h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjï.h²hh³j/h´M2ubhÿ)�”}”(hŒmem_cgroup_from_private_id”h]”j)�”}”(hj0/h]”hŒmem_cgroup_from_private_id”…”�”}”(hjR/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjN/ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjï.h²hh³j/h´M2ubj8)�”}”(hŒ(unsigned short id)”h]”j>)�”}”(hŒunsigned short id”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjm/h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhji/ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{/h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhji/ubjá)�”}”(hŒshort”h]”hŒshort”…”�”}”(hj‰/h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhji/ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—/h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhji/ubj)�”}”(hŒid”h]”hŒid”…”�”}”(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&]”jjuh1j7hjï.h²hh³j/h´M2ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjë.h²hh³j/h´M2ubah}”(h]”jæ.ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j/h´M2hjè.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:134: ./mm/memcontrol.c”h´M2hjÌ/h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjè.h²hh³j/h´M2ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjç/jHjç/jI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hŒ½**Parameters** ``unsigned short id`` the memcg id to look up **Description** Caller must hold rcu_read_lock(). **Return** the memcg, or NULL if the memcg referred to is already dead.”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:134: ./mm/memcontrol.c”h´M6hjë/ubj¤)�”}”(hhh]”j©)�”}”(hŒ.``unsigned short id`` the memcg id to look up ”h]”(j¯)�”}”(hŒ``unsigned short id``”h]”jS)�”}”(hj0h]”hŒunsigned short id”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M3hj 0ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe memcg id to look up”h]”hŒthe memcg id to look up”…”�”}”(hj)0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j%0h´M3hj&0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj 0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j%0h´M3hj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjë/ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjK0h]”hŒ Description”…”�”}”(hjM0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjI0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M5hjë/ubjM)�”}”(hŒ!Caller must hold rcu_read_lock().”h]”hŒ!Caller must hold rcu_read_lock().”…”�”}”(hja0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M4hjë/ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjr0h]”hŒReturn”…”�”}”(hjt0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjp0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M6hjë/ubjM)�”}”(hŒ)�”}”(hŒstruct cgroup_subsys_state *css”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjô0h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjð0ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjð0ubh)�”}”(hhh]”j)�”}”(hŒcgroup_subsys_state”h]”hŒcgroup_subsys_state”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj1ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j1Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÚ0sbŒc.mem_cgroup_css_reset”†”asbuh1hhjð0ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj21h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjð0ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj@1h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjð0ubj)�”}”(hŒcss”h]”hŒcss”…”�”}”(hjM1h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjð0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjì0ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj³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§hj¬0h²hubj4)�”}”(hhh]”jM)�”}”(hŒ reset the states of a mem_cgroup”h]”hŒ reset the states of a mem_cgroup”…”�”}”(hjw1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M§hjt1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¬0h²hh³jÅ0h´M§ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj�1jHj�1jI‰jJ‰jK‰uh1híh²hhjKò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™1h]”hŒ Parameters”…”�”}”(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:134: ./mm/memcontrol.c”h´M«hj“1ubj¤)�”}”(hhh]”j©)�”}”(hŒ3``struct cgroup_subsys_state *css`` the target css ”h]”(j¯)�”}”(hŒ#``struct cgroup_subsys_state *css``”h]”jS)�”}”(hj¸1h]”hŒstruct cgroup_subsys_state *css”…”�”}”(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:134: ./mm/memcontrol.c”h´M¨hj²1ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe target css”h]”hŒthe target css”…”�”}”(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¯1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj“1ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjó1h]”hŒ Description”…”�”}”(hjõ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjñ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mªhj“1ubjM)�”}”(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 ”…”�”}”(hj 2h²hh³Nh´NubjŽ)�”}”(hŒ**css**”h]”hŒcss”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj 2ubhŒí. 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.”…”�”}”(hj 2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M©hj“1ubjM)�”}”(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.”…”�”}”(hj*2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M¯hj“1ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hjY2h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjU2h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M±ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh2h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjU2h²hh³jg2h´M±ubhÿ)�”}”(hŒmem_cgroup_calculate_protection”h]”j)�”}”(hŒmem_cgroup_calculate_protection”h]”hŒmem_cgroup_calculate_protection”…”�”}”(hjz2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjv2ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjU2h²hh³jg2h´M±ubj8)�”}”(hŒ3(struct mem_cgroup *root, struct mem_cgroup *memcg)”h]”(j>)�”}”(hŒstruct mem_cgroup *root”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj–2h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj’2ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£2h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj’2ubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hj´2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj±2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j¶2Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj|2sbŒ!c.mem_cgroup_calculate_protection”†”asbuh1hhj’2ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ2h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj’2ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjâ2h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj’2ubj)�”}”(hŒroot”h]”hŒroot”…”�”}”(hjï2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj’2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjŽ2ubj>)�”}”(hŒstruct mem_cgroup *memcg”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj3ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj3ubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hj&3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj#3ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j(3Œmodname”NŒ classname”Njìjï)�”}”jò]”jÐ2Œ!c.mem_cgroup_calculate_protection”†”asbuh1hhj3ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD3h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj3ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjR3h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj3ubj)�”}”(hŒmemcg”h]”hŒmemcg”…”�”}”(hj_3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjŽ2ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjU2h²hh³jg2h´M±ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjQ2h²hh³jg2h´M±ubah}”(h]”jL2ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jg2h´M±hjN2h²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‰3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M±hj†3h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjN2h²hh³jg2h´M±ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¡3jHj¡3jI‰jJ‰jK‰uh1híh²hhjKò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«3h]”hŒ Parameters”…”�”}”(hj­3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj©3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mµhj¥3ubj¤)�”}”(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Ê3h]”hŒstruct mem_cgroup *root”…”�”}”(hjÌ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÈ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M²hjÄ3ubjÉ)�”}”(hhh]”jM)�”}”(hŒ.the top ancestor of the sub-tree being checked”h]”hŒ.the top ancestor of the sub-tree being checked”…”�”}”(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Á3ubj©)�”}”(hŒ8``struct mem_cgroup *memcg`` the memory cgroup to check ”h]”(j¯)�”}”(hŒ``struct mem_cgroup *memcg``”h]”jS)�”}”(hj4h]”hŒstruct mem_cgroup *memcg”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M³hjý3ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe memory cgroup to check”h]”hŒthe memory cgroup to check”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j4h´M³hj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjý3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j4h´M³hjÁ3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¥3ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj>4h]”hŒ Description”…”�”}”(hj@4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj<4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mµhj¥3ubj¤)�”}”(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[4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M´hjW4ubjÉ)�”}”(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.”…”�”}”(hjm4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mµhjj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjW4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³ji4h´M´hjT4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¥3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ1mem_cgroup_calculate_protection_path (C function)”Œ&c.mem_cgroup_calculate_protection_path”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ]void mem_cgroup_calculate_protection_path (struct mem_cgroup *root, struct mem_cgroup *memcg)”h]”hù)�”}”(hŒ\void mem_cgroup_calculate_protection_path(struct mem_cgroup *root, struct mem_cgroup *memcg)”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj®4h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjª4h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MÉubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½4h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjª4h²hh³j¼4h´MÉubhÿ)�”}”(hŒ$mem_cgroup_calculate_protection_path”h]”j)�”}”(hŒ$mem_cgroup_calculate_protection_path”h]”hŒ$mem_cgroup_calculate_protection_path”…”�”}”(hjÏ4h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjË4ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjª4h²hh³j¼4h´MÉubj8)�”}”(hŒ3(struct mem_cgroup *root, struct mem_cgroup *memcg)”h]”(j>)�”}”(hŒstruct mem_cgroup *root”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjë4h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjç4ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjø4h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjç4ubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hj 5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j 5Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÑ4sbŒ&c.mem_cgroup_calculate_protection_path”†”asbuh1hhjç4ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)5h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjç4ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj75h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjç4ubj)�”}”(hŒroot”h]”hŒroot”…”�”}”(hjD5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjç4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjã4ubj>)�”}”(hŒstruct mem_cgroup *memcg”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj]5h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjY5ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj5h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjY5ubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hj{5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjx5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j}5Œmodname”NŒ classname”Njìjï)�”}”jò]”j%5Œ&c.mem_cgroup_calculate_protection_path”†”asbuh1hhjY5ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™5h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjY5ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj§5h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjY5ubj)�”}”(hŒmemcg”h]”hŒmemcg”…”�”}”(hj´5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjY5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjã4ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjª4h²hh³j¼4h´MÉubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¦4h²hh³j¼4h´MÉubah}”(h]”j¡4ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j¼4h´MÉhj£4h²hubj4)�”}”(hhh]”jM)�”}”(hŒcompute protection along a path”h]”hŒcompute protection along a path”…”�”}”(hjÞ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MÉhjÛ5h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj£4h²hh³j¼4h´MÉubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjö5jHjö5jI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hX‰**Parameters** ``struct mem_cgroup *root`` the top ancestor of the sub-tree being checked (NULL for root_mem_cgroup) ``struct mem_cgroup *memcg`` the target memory cgroup **Description** Walk the ancestor path from **root** down to **memcg** and compute the effective protection at each level. This is safe for isolated queries because it ensures parents are computed before children.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hj6h]”hŒ Parameters”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjþ5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MÍhjú5ubj¤)�”}”(hhh]”(j©)�”}”(hŒf``struct mem_cgroup *root`` the top ancestor of the sub-tree being checked (NULL for root_mem_cgroup) ”h]”(j¯)�”}”(hŒ``struct mem_cgroup *root``”h]”jS)�”}”(hj6h]”hŒstruct mem_cgroup *root”…”�”}”(hj!6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MÊhj6ubjÉ)�”}”(hhh]”jM)�”}”(hŒIthe top ancestor of the sub-tree being checked (NULL for root_mem_cgroup)”h]”hŒIthe top ancestor of the sub-tree being checked (NULL for root_mem_cgroup)”…”�”}”(hj86h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j46h´MÊhj56ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j46h´MÊhj6ubj©)�”}”(hŒ6``struct mem_cgroup *memcg`` the target memory cgroup ”h]”(j¯)�”}”(hŒ``struct mem_cgroup *memcg``”h]”jS)�”}”(hjX6h]”hŒstruct mem_cgroup *memcg”…”�”}”(hjZ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjV6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MËhjR6ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe target memory cgroup”h]”hŒthe target memory cgroup”…”�”}”(hjq6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jm6h´MËhjn6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjR6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jm6h´MËhj6ubeh}”(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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MÍhjú5ubjM)�”}”(hŒÆWalk the ancestor path from **root** down to **memcg** and compute the effective protection at each level. This is safe for isolated queries because it ensures parents are computed before children.”h]”(hŒWalk the ancestor path from ”…”�”}”(hj©6h²hh³Nh´NubjŽ)�”}”(hŒ**root**”h]”hŒroot”…”�”}”(hj±6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj©6ubhŒ down to ”…”�”}”(hj©6h²hh³Nh´NubjŽ)�”}”(hŒ **memcg**”h]”hŒmemcg”…”�”}”(hjÃ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj©6ubhŒ� and compute the effective protection at each level. This is safe for isolated queries because it ensures parents are computed before children.”…”�”}”(hj©6h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MÌhjú5ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒTint mem_cgroup_charge_hugetlb (struct folio *folio, struct mm_struct *mm, gfp_t gfp)”h]”hù)�”}”(hŒSint mem_cgroup_charge_hugetlb(struct folio *folio, struct mm_struct *mm, gfp_t gfp)”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjü6h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjø6h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 7h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjø6h²hh³j 7h´Mubhÿ)�”}”(hŒmem_cgroup_charge_hugetlb”h]”j)�”}”(hŒmem_cgroup_charge_hugetlb”h]”hŒmem_cgroup_charge_hugetlb”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjø6h²hh³j 7h´Mubj8)�”}”(hŒ6(struct folio *folio, struct mm_struct *mm, gfp_t gfp)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj97h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj57ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjF7h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj57ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjW7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjT7ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jY7Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj7sbŒc.mem_cgroup_charge_hugetlb”†”asbuh1hhj57ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjw7h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj57ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj…7h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj57ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj’7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj57ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj17ubj>)�”}”(hŒstruct mm_struct *mm”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj«7h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj§7ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸7h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj§7ubh)�”}”(hhh]”j)�”}”(hŒ mm_struct”h]”hŒ mm_struct”…”�”}”(hjÉ7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÆ7ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jË7Œmodname”NŒ classname”Njìjï)�”}”jò]”js7Œc.mem_cgroup_charge_hugetlb”†”asbuh1hhj§7ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç7h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj§7ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjõ7h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj§7ubj)�”}”(hŒmm”h]”hŒmm”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj§7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj17ubj>)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj8ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j 8Œmodname”NŒ classname”Njìjï)�”}”jò]”js7Œc.mem_cgroup_charge_hugetlb”†”asbuh1hhj8ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<8h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj8ubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjJ8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj8ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj17ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjø6h²hh³j 7h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjô6h²hh³j 7h´Mubah}”(h]”jï6ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j 7h´Mhjñ6h²hubj4)�”}”(hhh]”jM)�”}”(hŒ$charge the memcg for a hugetlb folio”h]”hŒ$charge the memcg for a hugetlb folio”…”�”}”(hjt8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mhjq8h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjñ6h²hh³j 7h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjŒ8jHjŒ8jI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hX×**Parameters** ``struct folio *folio`` folio being charged ``struct mm_struct *mm`` mm context of the allocation target ``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–8h]”hŒ Parameters”…”�”}”(hj˜8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj”8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mhj�8ubj¤)�”}”(hhh]”(j©)�”}”(hŒ,``struct folio *folio`` folio being charged ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjµ8h]”hŒstruct folio *folio”…”�”}”(hj·8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj³8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mhj¯8ubjÉ)�”}”(hhh]”jM)�”}”(hŒfolio being charged”h]”hŒfolio being charged”…”�”}”(hjÎ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÊ8h´MhjË8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¯8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÊ8h´Mhj¬8ubj©)�”}”(hŒ=``struct mm_struct *mm`` mm context of the allocation target ”h]”(j¯)�”}”(hŒ``struct mm_struct *mm``”h]”jS)�”}”(hjî8h]”hŒstruct mm_struct *mm”…”�”}”(hjð8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjì8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mhjè8ubjÉ)�”}”(hhh]”jM)�”}”(hŒ#mm context of the allocation target”h]”hŒ#mm context of the allocation target”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j9h´Mhj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjè8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j9h´Mhj¬8ubj©)�”}”(hŒ``gfp_t gfp`` reclaim mode ”h]”(j¯)�”}”(hŒ ``gfp_t gfp``”h]”jS)�”}”(hj'9h]”hŒ gfp_t gfp”…”�”}”(hj)9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj%9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mhj!9ubjÉ)�”}”(hhh]”jM)�”}”(hŒ reclaim mode”h]”hŒ reclaim mode”…”�”}”(hj@9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j<9h´Mhj=9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj!9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j<9h´Mhj¬8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj�8ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjb9h]”hŒ Description”…”�”}”(hjd9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj`9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mhj�8ubjM)�”}”(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).”…”�”}”(hjx9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mhj�8ubjM)�”}”(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‡9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mhj�8ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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¶9h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj²9h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M9ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅ9h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj²9h²hh³jÄ9h´M9ubhÿ)�”}”(hŒmem_cgroup_swapin_charge_folio”h]”j)�”}”(hŒmem_cgroup_swapin_charge_folio”h]”hŒmem_cgroup_swapin_charge_folio”…”�”}”(hj×9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÓ9ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj²9h²hh³jÄ9h´M9ubj8)�”}”(hŒI(struct folio *folio, unsigned short id, struct mm_struct *mm, gfp_t gfp)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjó9h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjï9ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjï9ubh)�”}”(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”jèŒ reftarget”j:Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÙ9sbŒ c.mem_cgroup_swapin_charge_folio”†”asbuh1hhjï9ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1:h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjï9ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj?:h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjï9ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjL:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjï9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjë9ubj>)�”}”(hŒunsigned short id”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Œshort”h]”hŒshort”…”�”}”(hj�:h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhja:ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�:h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhja:ubj)�”}”(hŒid”h]”hŒid”…”�”}”(hj�:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhja:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjë9ubj>)�”}”(hŒstruct mm_struct *mm”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¶:h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj²:ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃ:h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj²:ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jÖ:Œmodname”NŒ classname”Njìjï)�”}”jò]”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²:ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj²: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ë9ubj>)�”}”(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”jèŒ reftarget”j+;Œmodname”NŒ classname”Njìjï)�”}”jò]”j-:Œ c.mem_cgroup_swapin_charge_folio”†”asbuh1hhj";ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjG;h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj";ubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjU;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&]”jjuh1j7hj²9h²hh³jÄ9h´M9ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj®9h²hh³jÄ9h´M9ubah}”(h]”j©9ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÄ9h´M9hj«9h²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:134: ./mm/memcontrol.c”h´M9hj|;h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj«9h²hh³jÄ9h´M9ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj—;jHj—;jI‰jJ‰jK‰uh1híh²hhjKò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:134: ./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:134: ./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:134: ./mm/memcontrol.c”h´M;hjó;ubjÉ)�”}”(hhh]”jM)�”}”(hŒmemory cgroup id”h]”hŒmemory cgroup id”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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 mm_struct *mm`` mm context of the victim ”h]”(j¯)�”}”(hŒ``struct mm_struct *mm``”h]”jS)�”}”(hj2<h]”hŒstruct mm_struct *mm”…”�”}”(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:134: ./mm/memcontrol.c”h´M<hj,<ubjÉ)�”}”(hhh]”jM)�”}”(hŒmm context of the victim”h]”hŒmm context of the victim”…”�”}”(hjK<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jG<h´M<hjH<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj,<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jG<h´M<hj·;ubj©)�”}”(hŒ``gfp_t gfp`` reclaim mode ”h]”(j¯)�”}”(hŒ ``gfp_t gfp``”h]”jS)�”}”(hjk<h]”hŒ gfp_t gfp”…”�”}”(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:134: ./mm/memcontrol.c”h´M=hje<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È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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./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:134: ./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:134: ./mm/memcontrol.c”h´MAhj›;ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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:134: ./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_replace_folio”h]”j)�”}”(hŒmem_cgroup_replace_folio”h]”hŒmem_cgroup_replace_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êubj8)�”}”(hŒ&(struct folio *old, struct folio *new)”h]”(j>)�”}”(hŒstruct folio *old”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj7=h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj3=ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD=h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj3=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”jèŒ reftarget”jW=Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj=sbŒc.mem_cgroup_replace_folio”†”asbuh1hhj3=ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju=h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj3=ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjƒ=h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj3=ubj)�”}”(hŒold”h]”hŒold”…”�”}”(hj�=h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj/=ubj>)�”}”(hŒstruct folio *new”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj©=h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¥=ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶=h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¥=ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÇ=h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÄ=ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÉ=Œmodname”NŒ classname”Njìjï)�”}”jò]”jq=Œc.mem_cgroup_replace_folio”†”asbuh1hhj¥=ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjå=h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¥=ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjó=h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¥=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=hj/=ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjö<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 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:134: ./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&]”jFjAjGjB>jHjB>jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjL>h]”hŒ Parameters”…”�”}”(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:134: ./mm/memcontrol.c”h´MîhjF>ubj¤)�”}”(hhh]”(j©)�”}”(hŒ3``struct folio *old`` Currently circulating folio. ”h]”(j¯)�”}”(hŒ``struct folio *old``”h]”jS)�”}”(hjk>h]”hŒstruct folio *old”…”�”}”(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:134: ./mm/memcontrol.c”h´Mëhje>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´Mëhj�>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhje>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j€>h´Mëhjb>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:134: ./mm/memcontrol.c”h´Mìhjž>ubjÉ)�”}”(hhh]”jM)�”}”(hŒReplacement folio.”h]”hŒReplacement 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ì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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MîhjF>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”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjõ>ubhŒ. ”…”�”}”(hjõ>h²hh³Nh´NubjŽ)�”}”(hŒ**old**”h]”hŒold”…”�”}”(hj!?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:134: ./mm/memcontrol.c”h´MíhjF>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”…”�”}”(hjB?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:134: ./mm/memcontrol.c”h´MðhjF>ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmem_cgroup_migrate (C function)”Œc.mem_cgroup_migrate”hNt”auh1hÜhjKò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àhjw?h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”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Œ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þhjw?h²hh³j‰?h´M!ubj8)�”}”(hŒ&(struct folio *old, struct folio *new)”h]”(j>)�”}”(hŒstruct folio *old”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¸?h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj´?ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅ?h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj´?ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÖ?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÓ?ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jØ?Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjž?sbŒc.mem_cgroup_migrate”†”asbuh1hhj´?ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjö?h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj´?ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj´?ubj)�”}”(hŒold”h]”hŒold”…”�”}”(hj@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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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&@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”jèŒ reftarget”jJ@Œmodname”NŒ classname”Njìjï)�”}”jò]”jò?Œc.mem_cgroup_migrate”†”asbuh1hhj&@ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjf@h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj&@ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjt@h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj&@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=hj°?ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjw?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Œ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:134: ./mm/memcontrol.c”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²hhjKò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:134: ./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:134: ./mm/memcontrol.c”h´M"hjæ@ubjÉ)�”}”(hhh]”jM)�”}”(hŒCurrently circulating folio.”h]”hŒCurrently circulating folio.”…”�”}”(hjAh²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Œ)``struct folio *new`` Replacement folio. ”h]”(j¯)�”}”(hŒ``struct folio *new``”h]”jS)�”}”(hj%Ah]”hŒstruct folio *new”…”�”}”(hj'Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj#Aubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M#hjAubjÉ)�”}”(hhh]”jM)�”}”(hŒReplacement folio.”h]”hŒReplacement folio.”…”�”}”(hj>Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j:Ah´M#hj;Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjAubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j:Ah´M#hjã@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÇ@ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj`Ah]”hŒ Description”…”�”}”(hjbAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj^Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./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).”…”�”}”(hjvAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M$hjÇ@ubjM)�”}”(hŒmapping** must be set up.”h]”(hŒBoth folios must be locked, ”…”�”}”(hj…Ah²hh³Nh´NubjŽ)�”}”(hŒ**new->mapping**”h]”hŒ new->mapping”…”�”}”(hj�Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj…AubhŒ must be set up.”…”�”}”(hj…Ah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M)hjÇ@ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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ÆAh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÂAh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.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Œmem_cgroup_sk_charge”h]”j)�”}”(hŒmem_cgroup_sk_charge”h]”hŒmem_cgroup_sk_charge”…”�”}”(hjæAh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjâAubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÂAh²hh³jÓAh´M�ubj8)�”}”(hŒ>(const struct sock *sk, unsigned int nr_pages, gfp_t gfp_mask)”h]”(j>)�”}”(hŒconst struct sock *sk”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjþAubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjþAubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjþAubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*Bh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjþAubh)�”}”(hhh]”j)�”}”(hŒsock”h]”hŒsock”…”�”}”(hj;Bh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj8Bubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j=BŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjèAsbŒc.mem_cgroup_sk_charge”†”asbuh1hhjþAubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[Bh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjþAubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjiBh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjþAubj)�”}”(hŒsk”h]”hŒsk”…”�”}”(hjvBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjþAubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjúAubj>)�”}”(hŒunsigned int nr_pages”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj�Bh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj‹Bubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Bh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‹Bubjá)�”}”(hŒint”h]”hŒint”…”�”}”(hj«Bh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj‹Bubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹Bh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj‹Bubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hjÇBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‹Bubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjúAubj>)�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjãBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjàBubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jåBŒmodname”NŒ classname”Njìjï)�”}”jò]”jWBŒc.mem_cgroup_sk_charge”†”asbuh1hhjÜBubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÜBubj)�”•}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÜBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjúAubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÂ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Œcharge socket memory”h]”hŒcharge socket memory”…”�”}”(hj9Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M�hj6Ch²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj»Ah²hh³jÓAh´M�ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjQCjHjQCjI‰jJ‰jK‰uh1híh²hhjKò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[Ch]”hŒ Parameters”…”�”}”(hj]Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjYCubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M”hjUCubj¤)�”}”(hhh]”(j©)�”}”(hŒ4``const struct sock *sk`` socket in memcg to charge ”h]”(j¯)�”}”(hŒ``const struct sock *sk``”h]”jS)�”}”(hjzCh]”hŒconst struct sock *sk”…”�”}”(hj|Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjxCubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M‘hjtCubjÉ)�”}”(hhh]”jM)�”}”(hŒsocket in memcg to charge”h]”hŒsocket in memcg to charge”…”�”}”(hj“Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�Ch´M‘hj�Cubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjtCubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�Ch´M‘hjqCubj©)�”}”(hŒ4``unsigned int nr_pages`` number of pages to charge ”h]”(j¯)�”}”(hŒ``unsigned int nr_pages``”h]”jS)�”}”(hj³Ch]”hŒunsigned int nr_pages”…”�”}”(hjµCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj±Cubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M’hj­CubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages to charge”h]”hŒnumber of pages to charge”…”�”}”(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’hjqCubj©)�”}”(hŒ ``gfp_t gfp_mask`` reclaim mode ”h]”(j¯)�”}”(hŒ``gfp_t gfp_mask``”h]”jS)�”}”(hjìCh]”hŒgfp_t gfp_mask”…”�”}”(hjîCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjêCubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M“hjæCubjÉ)�”}”(hhh]”jM)�”}”(hŒ reclaim mode”h]”hŒ reclaim mode”…”�”}”(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“hjqCubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjUCubjM)�”}”(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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M•hjUCubjM)�”}”(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 ”…”�”}”(hj=Dh²hh³Nh´NubjŽ)�”}”(hŒ **nr_pages**”h]”hŒnr_pages”…”�”}”(hjEDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj=DubhŒ to ”…”�”}”(hj=Dh²hh³Nh´NubjŽ)�”}”(hŒ **memcg**”h]”hŒmemcg”…”�”}”(hjWDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj=DubhŒ . Returns ”…”�”}”(hj=Dh²hh³Nh´NubjS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjiDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj=DubhŒ if the charge fit within ”…”�”}”(hj=Dh²hh³Nh´NubjŽ)�”}”(hŒ **memcg**”h]”hŒmemcg”…”�”}”(hj{Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj=DubhŒ’s configured limit, ”…”�”}”(hj=Dh²hh³Nh´NubjS)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj�Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj=DubhŒ if it doesn’t.”…”�”}”(hj=Dh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M”hjUCubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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ÆDh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÂDh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M©ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕDh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÂDh²hh³jÔDh´M©ubhÿ)�”}”(hŒmem_cgroup_sk_uncharge”h]”j)�”}”(hŒmem_cgroup_sk_uncharge”h]”hŒmem_cgroup_sk_uncharge”…”�”}”(hjçDh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjãDubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÂDh²hh³jÔDh´M©ubj8)�”}”(hŒ.(const struct sock *sk, unsigned int nr_pages)”h]”(j>)�”}”(hŒconst struct sock *sk”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÿDubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÿDubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjEh²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ÿDubh)�”}”(hhh]”j)�”}”(hŒsock”h]”hŒsock”…”�”}”(hjEŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjéDsbŒc.mem_cgroup_sk_uncharge”†”asbuh1hhjÿDubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\Eh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÿDubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjjEh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÿDubj)�”}”(hŒsk”h]”hŒsk”…”�”}”(hjwEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÿDubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjûDubj>)�”}”(hŒunsigned int nr_pages”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj�Eh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjŒEubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžEh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjŒEubjá)�”}”(hŒint”h]”hŒint”…”�”}”(hj¬Eh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjŒEubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºEh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjŒEubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hjÈEh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŒEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjûDubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÂDh²hh³jÔDh´M©ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¾Dh²hh³jÔDh´M©ubah}”(h]”j¹Dah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÔDh´M©hj»Dh²hubj4)�”}”(hhh]”jM)�”}”(hŒuncharge socket memory”h]”hŒuncharge socket memory”…”�”}”(hjòEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M©hjïEh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj»Dh²hh³jÔDh´M©ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj FjHj FjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjFh]”hŒ Parameters”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjFubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M­hjFubj¤)�”}”(hhh]”(j©)�”}”(hŒ6``const struct sock *sk`` socket in memcg to uncharge ”h]”(j¯)�”}”(hŒ``const struct sock *sk``”h]”jS)�”}”(hj3Fh]”hŒconst struct sock *sk”…”�”}”(hj5Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj1Fubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mªhj-FubjÉ)�”}”(hhh]”jM)�”}”(hŒsocket in memcg to uncharge”h]”hŒsocket in memcg to uncharge”…”�”}”(hjLFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jHFh´MªhjIFubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj-Fubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jHFh´Mªhj*Fubj©)�”}”(hŒ5``unsigned int nr_pages`` number of pages to uncharge”h]”(j¯)�”}”(hŒ``unsigned int nr_pages``”h]”jS)�”}”(hjlFh]”hŒunsigned int nr_pages”…”�”}”(hjnFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjjFubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M¬hjfFubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages to uncharge”h]”hŒnumber of pages to uncharge”…”�”}”(hj…Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M«hj‚Fubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjfFubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�Fh´M¬hj*Fubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjFubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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ÆFh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÂFh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕFh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÂFh²hh³jÔFh´Mjubhÿ)�”}”(hŒ__mem_cgroup_try_charge_swap”h]”j)�”}”(hŒ__mem_cgroup_try_charge_swap”h]”hŒ__mem_cgroup_try_charge_swap”…”�”}”(hjçFh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjãFubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÂFh²hh³jÔFh´Mjubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÿFubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÿFubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj!Gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjGubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j#GŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjéFsbŒc.__mem_cgroup_try_charge_swap”†”asbuh1hhjÿFubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAGh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÿFubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjOGh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÿFubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj\Gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÿFubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjûFubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÂFh²hh³jÔFh´Mjubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¾Fh²hh³jÔFh´Mjubah}”(h]”j¹Fah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÔFh´Mjhj»Fh²hubj4)�”}”(hhh]”jM)�”}”(hŒ#try charging swap space for a folio”h]”hŒ#try charging swap space for a folio”…”�”}”(hj†Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MjhjƒGh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj»Fh²hh³jÔFh´Mjubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjžGjHjžGjI‰jJ‰jK‰uh1híh²hhjKò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¨Gh]”hŒ Parameters”…”�”}”(hjªGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¦Gubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mnhj¢Gubj¤)�”}”(hhh]”j©)�”}”(hŒ2``struct folio *folio`` folio being added to swap ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjÇGh]”hŒstruct folio *folio”…”�”}”(hjÉGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÅGubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MkhjÁGubjÉ)�”}”(hhh]”jM)�”}”(hŒfolio being added to swap”h]”hŒfolio being added to swap”…”�”}”(hjàGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÜGh´MkhjÝGubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÁGubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÜGh´Mkhj¾Gubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¢GubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjHh]”hŒ Description”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjHubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mmhj¢GubjM)�”}”(hŒBTry to charge **folio**'s memcg for the swap space at folio->swap.”h]”(hŒTry to charge ”…”�”}”(hjHh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjHubhŒ-’s memcg for the swap space at folio->swap.”…”�”}”(hjHh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mlhj¢GubjM)�”}”(hŒ)Returns 0 on success, -ENOMEM on failure.”h]”hŒ)Returns 0 on success, -ENOMEM on failure.”…”�”}”(hj9Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mnhj¢Gubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hjhHh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjdHh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M�ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwHh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjdHh²hh³jvHh´M�ubhÿ)�”}”(hŒ__mem_cgroup_uncharge_swap”h]”j)�”}”(hŒ__mem_cgroup_uncharge_swap”h]”hŒ__mem_cgroup_uncharge_swap”…”�”}”(hj‰Hh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj…Hubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjdHh²hh³jvHh´M�ubj8)�”}”(hŒ*(unsigned short id, unsigned int nr_pages)”h]”(j>)�”}”(hŒunsigned short id”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¥Hh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj¡Hubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³Hh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¡Hubjá)�”}”(hŒshort”h]”hŒshort”…”�”}”(hjÁHh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj¡Hubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏHh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¡Hubj)�”}”(hŒid”h]”hŒid”…”�”}”(hjÝHh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¡Hubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj�Hubj>)�”}”(hŒunsigned int nr_pages”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjöHh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjòHubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjòHubjá)�”}”(hŒint”h]”hŒint”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjòHubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Ih²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjòHubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hj.Ih²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjòHubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj�Hubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjdHh²hh³jvHh´M�ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj`Hh²hh³jvHh´M�ubah}”(h]”j[Hah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jvHh´M�hj]Hh²hubj4)�”}”(hhh]”jM)�”}”(hŒuncharge swap space”h]”hŒuncharge swap space”…”�”}”(hjXIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M�hjUIh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj]Hh²hh³jvHh´M�ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjpIjHjpIjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjzIh]”hŒ Parameters”…”�”}”(hj|Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjxIubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M¡hjtIubj¤)�”}”(hhh]”(j©)�”}”(hŒ,``unsigned short id`` cgroup id to uncharge ”h]”(j¯)�”}”(hŒ``unsigned short id``”h]”jS)�”}”(hj™Ih]”hŒunsigned short id”…”�”}”(hj›Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj—Iubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mžhj“IubjÉ)�”}”(hhh]”jM)�”}”(hŒcgroup id to uncharge”h]”hŒcgroup id to uncharge”…”�”}”(hj²Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j®Ih´Mžhj¯Iubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj“Iubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j®Ih´Mžhj�Iubj©)�”}”(hŒ>``unsigned int nr_pages`` the amount of swap space to uncharge”h]”(j¯)�”}”(hŒ``unsigned int nr_pages``”h]”jS)�”}”(hjÒIh]”hŒunsigned int nr_pages”…”�”}”(hjÔIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÐIubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M hjÌIubjÉ)�”}”(hhh]”jM)�”}”(hŒ$the amount of swap space to uncharge”h]”hŒ$the amount of swap space to uncharge”…”�”}”(hjëIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MŸhjèIubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÌIubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jçIh´M hj�Iubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjtIubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ-mem_cgroup_get_folio_swap_margin (C function)”Œ"c.mem_cgroup_get_folio_swap_margin”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒAlong mem_cgroup_get_folio_swap_margin (const struct folio *folio)”h]”hù)�”}”(hŒ@long mem_cgroup_get_folio_swap_margin(const struct folio *folio)”h]”(já)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj,Jh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj(Jh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.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Œ mem_cgroup_get_folio_swap_margin”h]”j)�”}”(hŒ mem_cgroup_get_folio_swap_margin”h]”hŒ mem_cgroup_get_folio_swap_margin”…”�”}”(hjMJh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjIJubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj(Jh²hh³j:Jh´MÁubj8)�”}”(hŒ(const struct folio *folio)”h]”j>)�”}”(hŒconst struct folio *folio”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjiJh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjeJubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvJh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjeJubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj„Jh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjeJubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘Jh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjeJubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj¢Jh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŸJubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j¤JŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjOJsbŒ"c.mem_cgroup_get_folio_swap_margin”†”asbuh1hhjeJubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂJh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjeJubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÐJh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjeJubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÝJh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjeJubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjaJubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj(Jh²hh³j:Jh´MÁubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj$Jh²hh³j:Jh´MÁubah}”(h]”jJah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j:Jh´MÁhj!Jh²hubj4)�”}”(hhh]”jM)�”}”(hŒget a folio's memcg swap margin”h]”hŒ!get a folio’s memcg swap margin”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MÁhjKh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj!Jh²hh³j:Jh´MÁubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjKjHjKjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hŒ›**Parameters** ``const struct folio *folio`` folio whose memcg margin is queried **Return** Remaining chargeable pages in the folio's memcg hierarchy.”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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MÅhj#Kubj¤)�”}”(hhh]”j©)�”}”(hŒB``const struct folio *folio`` folio whose memcg margin is queried ”h]”(j¯)�”}”(hŒ``const struct folio *folio``”h]”jS)�”}”(hjHKh]”hŒconst struct folio *folio”…”�”}”(hjJKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjFKubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MÂhjBKubjÉ)�”}”(hhh]”jM)�”}”(hŒ#folio whose memcg margin is queried”h]”hŒ#folio whose memcg margin is queried”…”�”}”(hjaKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j]Kh´MÂhj^Kubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjBKubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j]Kh´MÂhj?Kubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj#KubjM)�”}”(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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MÄhj#KubjM)�”}”(hŒ:Remaining chargeable pages in the folio's memcg hierarchy.”h]”hŒ)�”}”(hŒstruct obj_cgroup *objcg”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjLubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjLubh)�”}”(hhh]”j)�”}”(hŒ obj_cgroup”h]”hŒ obj_cgroup”…”�”}”(hj"Lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjLubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j$LŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjêKsbŒc.obj_cgroup_may_zswap”†”asbuh1hhjLubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBLh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjLubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjPLh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjLubj)�”}”(hŒobjcg”h]”hŒobjcg”…”�”}”(hj]Lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjLubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjüKubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÄKh²hh³jÕKh´Mzubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÀKh²hh³jÕKh´Mzubah}”(h]”j»Kah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÕKh´Mzhj½Kh²hubj4)�”}”(hhh]”jM)�”}”(hŒcheck if this cgroup can zswap”h]”hŒcheck if this cgroup can zswap”…”�”}”(hj‡Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mzhj„Lh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj½Kh²hh³jÕKh´Mzubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjŸLjHjŸLjI‰jJ‰jK‰uh1híh²hhjKò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©Lh]”hŒ Parameters”…”�”}”(hj«Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj§Lubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M~hj£Lubj¤)�”}”(hhh]”j©)�”}”(hŒ/``struct obj_cgroup *objcg`` the object cgroup ”h]”(j¯)�”}”(hŒ``struct obj_cgroup *objcg``”h]”jS)�”}”(hjÈLh]”hŒstruct obj_cgroup *objcg”…”�”}”(hjÊLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÆLubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M{hjÂLubjÉ)�”}”(hhh]”jM)�”}”(hŒthe object cgroup”h]”hŒthe object cgroup”…”�”}”(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{hj¿Lubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj£LubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjMh]”hŒ Description”…”�”}”(hjMh²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:134: ./mm/memcontrol.c”h´M}hj£LubjM)�”}”(hŒ7Check if the hierarchical zswap limit has been reached.”h]”hŒ7Check if the hierarchical zswap limit has been reached.”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M|hj£LubjM)�”}”(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(Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M~hj£Lubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hjWMh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjSMh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M§ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfMh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjSMh²hh³jeMh´M§ubhÿ)�”}”(hŒobj_cgroup_charge_zswap”h]”j)�”}”(hŒobj_cgroup_charge_zswap”h]”hŒobj_cgroup_charge_zswap”…”�”}”(hjxMh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjtMubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjSMh²hh³jeMh´M§ubj8)�”}”(hŒ'(struct obj_cgroup *objcg, size_t size)”h]”(j>)�”}”(hŒstruct obj_cgroup *objcg”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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�Mubh)�”}”(hhh]”j)�”}”(hŒ obj_cgroup”h]”hŒ obj_cgroup”…”�”}”(hj²Mh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¯Mubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j´MŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjzMsbŒc.obj_cgroup_charge_zswap”†”asbuh1hhj�Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒMh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�Mubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjàMh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj�Mubj)�”}”(hŒobjcg”h]”hŒobjcg”…”�”}”(hjíMh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�Mubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjŒMubj>)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj Nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjNubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j NŒmodname”NŒ classname”Njìjï)�”}”jò]”jÎMŒc.obj_cgroup_charge_zswap”†”asbuh1hhjNubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'Nh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjNubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj5Nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjNubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjŒMubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjSMh²hh³jeMh´M§ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjOMh²hh³jeMh´M§ubah}”(h]”jJMah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jeMh´M§hjLMh²hubj4)�”}”(hhh]”jM)�”}”(hŒ!charge compression backend memory”h]”hŒ!charge compression backend memory”…”�”}”(hj_Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M§hj\Nh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjLMh²hh³jeMh´M§ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjwNjHjwNjI‰jJ‰jK‰uh1híh²hhjKò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�Nh]”hŒ Parameters”…”�”}”(hjƒNh²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:134: ./mm/memcontrol.c”h´M«hj{Nubj¤)�”}”(hhh]”(j©)�”}”(hŒ/``struct obj_cgroup *objcg`` the object cgroup ”h]”(j¯)�”}”(hŒ``struct obj_cgroup *objcg``”h]”jS)�”}”(hj Nh]”hŒstruct obj_cgroup *objcg”…”�”}”(hj¢Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjžNubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M¨hjšNubjÉ)�”}”(hhh]”jM)�”}”(hŒthe object cgroup”h]”hŒthe object cgroup”…”�”}”(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Œ*``size_t size`` size of compressed object ”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³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M©hjÓNubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of compressed object”h]”hŒsize of compressed object”…”�”}”(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—Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj{NubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjOh]”hŒ Description”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjOubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´M«hj{NubjM)�”}”(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*Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´Mªhj{Nubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hjYOh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjUOh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MÈubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhOh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjUOh²hh³jgOh´MÈubhÿ)�”}”(hŒobj_cgroup_uncharge_zswap”h]”j)�”}”(hŒobj_cgroup_uncharge_zswap”h]”hŒobj_cgroup_uncharge_zswap”…”�”}”(hjzOh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjvOubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjUOh²hh³jgOh´MÈubj8)�”}”(hŒ'(struct obj_cgroup *objcg, size_t size)”h]”(j>)�”}”(hŒstruct obj_cgroup *objcg”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj–Oh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj’Oubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£Oh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj’Oubh)�”}”(hhh]”j)�”}”(hŒ obj_cgroup”h]”hŒ obj_cgroup”…”�”}”(hj´Oh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj±Oubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j¶OŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj|OsbŒc.obj_cgroup_uncharge_zswap”†”asbuh1hhj’Oubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔOh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj’Oubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjâOh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj’Oubj)�”}”(hŒobjcg”h]”hŒobjcg”…”�”}”(hjïOh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj’Oubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjŽOubj>)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj Ph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjPubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j PŒmodname”NŒ classname”Njìjï)�”}”jò]”jÐOŒc.obj_cgroup_uncharge_zswap”†”asbuh1hhjPubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)Ph²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjPubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj7Ph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjPubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjŽOubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjUOh²hh³jgOh´MÈubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjQOh²hh³jgOh´MÈubah}”(h]”jLOah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jgOh´MÈhjNOh²hubj4)�”}”(hhh]”jM)�”}”(hŒ#uncharge compression backend memory”h]”hŒ#uncharge compression backend memory”…”�”}”(hjaPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MÈhj^Ph²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjNOh²hh³jgOh´MÈubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjyPjHjyPjI‰jJ‰jK‰uh1híh²hhjKò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ƒPh]”hŒ Parameters”…”�”}”(hj…Ph²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:134: ./mm/memcontrol.c”h´MÌhj}Pubj¤)�”}”(hhh]”(j©)�”}”(hŒ/``struct obj_cgroup *objcg`` the object cgroup ”h]”(j¯)�”}”(hŒ``struct obj_cgroup *objcg``”h]”jS)�”}”(hj¢Ph]”hŒstruct obj_cgroup *objcg”…”�”}”(hj¤Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MÉhjœPubjÉ)�”}”(hhh]”jM)�”}”(hŒthe object cgroup”h]”hŒthe object cgroup”…”�”}”(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™Pubj©)�”}”(hŒ*``size_t size`` size of compressed object ”h]”(j¯)�”}”(hŒ``size_t size``”h]”jS)�”}”(hjÛPh]”hŒ size_t size”…”�”}”(hjÝPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÙPubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MÊhjÕPubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of compressed object”h]”hŒsize of compressed object”…”�”}”(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™Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj}PubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjQh]”hŒ Description”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjQubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MÌhj}PubjM)�”}”(hŒ"Uncharges zswap memory on page in.”h]”hŒ"Uncharges zswap memory on page in.”…”�”}”(hj,Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:134: ./mm/memcontrol.c”h´MËhj}Pubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubjzÕ)�”}”(hŒ0#kernel-doc:: mm/memory-tiers.c (build warnings)”h]”hŒ0#kernel-doc:: mm/memory-tiers.c (build warnings)”…”�”}”hjBQsbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jyÕhjKò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ÜhjKò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”…”�”}”(hjiQh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjeQh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´M©ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwQh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjeQh²hh³jvQh´M©ubhÿ)�”}”(hŒshmem_recalc_inode”h]”j)�”}”(hŒshmem_recalc_inode”h]”hŒshmem_recalc_inode”…”�”}”(hj‰Qh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj…Qubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjeQh²hh³jvQh´M©ubj8)�”}”(hŒ1(struct inode *inode, long alloced, long swapped)”h]”(j>)�”}”(hŒstruct inode *inode”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¥Qh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¡Qubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²Qh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¡Qubh)�”}”(hhh]”j)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjÃQh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÀQubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÅQŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj‹QsbŒc.shmem_recalc_inode”†”asbuh1hhj¡Qubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãQh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¡Qubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjñQh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¡Qubj)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjþQh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¡Qubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj�Qubj>)�”}”(hŒ long alloced”h]”(já)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjRubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%Rh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjRubj)�”}”(hŒalloced”h]”hŒalloced”…”�”}”(hj3Rh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj�Qubj>)�”}”(hŒ long swapped”h]”(já)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjLRh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjHRubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZRh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjHRubj)�”}”(hŒswapped”h]”hŒswapped”…”�”}”(hjhRh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjHRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj�Qubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjeQh²hh³jvQh´M©ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjaQh²hh³jvQh´M©ubah}”(h]”j\Qah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jvQh´M©hj^Qh²hubj4)�”}”(hhh]”jM)�”}”(hŒ'recalculate the block usage of an inode”h]”hŒ'recalculate the block usage of an inode”…”�”}”(hj’Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´M©hj�Rh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj^Qh²hh³jvQh´M©ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjªRjHjªRjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hj´Rh]”hŒ Parameters”…”�”}”(hj¶Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj²Rubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´M­hj®Rubj¤)�”}”(hhh]”(j©)�”}”(hŒ(``struct inode *inode`` inode to recalc ”h]”(j¯)�”}”(hŒ``struct inode *inode``”h]”jS)�”}”(hjÓRh]”hŒstruct inode *inode”…”�”}”(hjÕRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÑRubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´MªhjÍRubjÉ)�”}”(hhh]”jM)�”}”(hŒinode to recalc”h]”hŒinode to recalc”…”�”}”(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ªhjÊRubj©)�”}”(hŒB``long alloced`` the change in number of pages allocated to inode ”h]”(j¯)�”}”(hŒ``long alloced``”h]”jS)�”}”(hj Sh]”hŒ long alloced”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj Subah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´M«hjSubjÉ)�”}”(hhh]”jM)�”}”(hŒ0the change in number of pages allocated to inode”h]”hŒ0the change in number of pages allocated to inode”…”�”}”(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«hjÊRubj©)�”}”(hŒB``long swapped`` the change in number of pages swapped from inode ”h]”(j¯)�”}”(hŒ``long swapped``”h]”jS)�”}”(hjESh]”hŒ long swapped”…”�”}”(hjGSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjCSubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´M¬hj?SubjÉ)�”}”(hhh]”jM)�”}”(hŒ0the change in number of pages swapped from inode”h]”hŒ0the change in number of pages swapped from inode”…”�”}”(hj^Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jZSh´M¬hj[Subah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj?Subeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jZSh´M¬hjÊRubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj®RubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj€Sh]”hŒ Description”…”�”}”(hj‚Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj~Subah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´M®hj®RubjM)�”}”(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–Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´M­hj®RubjM)�”}”(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¥Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´M°hj®RubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj¶Sh]”hŒReturn”…”�”}”(hj¸Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj´Subah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´M³hj®RubjM)�”}”(hŒ=true if swapped was incremented from 0, for shmem_writeout().”h]”hŒ=true if swapped was incremented from 0, for shmem_writeout().”…”�”}”(hjÌSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´M´hj®Rubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒshmem_writeout (C function)”Œc.shmem_writeout”hNt”auh1hÜhjKò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ûSh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj÷Sh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Th²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj÷Sh²hh³j Th´Mubhÿ)�”}”(hŒshmem_writeout”h]”j)�”}”(hŒshmem_writeout”h]”hŒshmem_writeout”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjTubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj÷Sh²hh³j Th´Mubj8)�”}”(hŒL(struct swap_io_ctx *ctx, struct folio *folio, struct list_head *folio_list)”h]”(j>)�”}”(hŒstruct swap_io_ctx *ctx”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj8Th²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj4Tubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjETh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj4Tubh)�”}”(hhh]”j)�”}”(hŒ swap_io_ctx”h]”hŒ swap_io_ctx”…”�”}”(hjVTh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjSTubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jXTŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjTsbŒc.shmem_writeout”†”asbuh1hhj4Tubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvTh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj4Tubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj„Th²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj4Tubj)�”}”(hŒctx”h]”hŒctx”…”�”}”(hj‘Th²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4Tubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj0Tubj>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjªTh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¦Tubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·Th²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¦Tubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÈTh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÅTubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÊTŒmodname”NŒ classname”Njìjï)�”}”jò]”jrTŒc.shmem_writeout”†”asbuh1hhj¦Tubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæTh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¦Tubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjôTh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¦Tubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦Tubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj0Tubj>)�”}”(hŒstruct list_head *folio_list”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjUubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'Uh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjUubh)�”}”(hhh]”j)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hj8Uh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj5Uubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j:UŒmodname”NŒ classname”Njìjï)�”}”jò]”jrTŒc.shmem_writeout”†”asbuh1hhjUubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjVUh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjUubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjdUh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjUubj)�”}”(hŒ folio_list”h]”hŒ folio_list”…”�”}”(hjqUh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjUubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj0Tubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj÷Sh²hh³j Th´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjóSh²hh³j Th´Mubah}”(h]”jîSah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j Th´MhjðSh²hubj4)�”}”(hhh]”jM)�”}”(hŒWrite the folio to swap”h]”hŒWrite the folio to swap”…”�”}”(hj›Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´Mhj˜Uh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjðSh²hh³j Th´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj³UjHj³UjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hj½Uh]”hŒ Parameters”…”�”}”(hj¿Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj»Uubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´M hj·Uubj¤)�”}”(hhh]”(j©)�”}”(hŒ-``struct swap_io_ctx *ctx`` swap I/O context ”h]”(j¯)�”}”(hŒ``struct swap_io_ctx *ctx``”h]”jS)�”}”(hjÜUh]”hŒstruct swap_io_ctx *ctx”…”�”}”(hjÞUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÚUubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´M hjÖUubjÉ)�”}”(hhh]”jM)�”}”(hŒswap I/O context”h]”hŒswap I/O context”…”�”}”(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 hjÓUubj©)�”}”(hŒ+``struct folio *folio`` The folio to write ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjVh]”hŒstruct folio *folio”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´M hjVubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to write”h]”hŒThe folio to write”…”�”}”(hj.Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j*Vh´M hj+Vubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjVubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j*Vh´M hjÓUubj©)�”}”(hŒB``struct list_head *folio_list`` list to put back folios on split ”h]”(j¯)�”}”(hŒ ``struct list_head *folio_list``”h]”jS)�”}”(hjNVh]”hŒstruct list_head *folio_list”…”�”}”(hjPVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjLVubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´M hjHVubjÉ)�”}”(hhh]”jM)�”}”(hŒ list to put back folios on split”h]”hŒ list to put back folios on split”…”�”}”(hjgVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jcVh´M hjdVubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjHVubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jcVh´M hjÓUubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj·UubjM)�”}”(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³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´M hj·UubjM)�”}”(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.”…”�”}”(hjŸVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´M hj·Uubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒshmem_get_folio (C function)”Œc.shmem_get_folio”hNt”auh1hÜhjKò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”…”�”}”(hjÎVh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÊVh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.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Œshmem_get_folio”h]”j)�”}”(hŒshmem_get_folio”h]”hŒshmem_get_folio”…”�”}”(hjïVh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjëVubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÊVh²hh³jÜVh´Mõ ubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj Wh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjWubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjWubh)�”}”(hhh]”j)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj)Wh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj&Wubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j+WŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjñVsbŒc.shmem_get_folio”†”asbuh1hhjWubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIWh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjWubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjWWh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjWubj)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjdWh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjWubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjWubj>)�”}”(hŒ pgoff_t index”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”jèŒ reftarget”j‚WŒmodname”NŒ classname”Njìjï)�”}”jò]”jEWŒc.shmem_get_folio”†”asbuh1hhjyWubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžWh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjyWubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(hj¬Wh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjyWubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjWubj>)�”}”(hŒloff_t write_end”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjÈWh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÅWubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÊWŒmodname”NŒ classname”Njìjï)�”}”jò]”jEWŒc.shmem_get_folio”†”asbuh1hhjÁWubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæWh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÁWubj)�”}”(hŒ write_end”h]”hŒ write_end”…”�”}”(hjôWh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÁWubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjWubj>)�”}”(hŒstruct folio **foliop”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj Xh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj Xubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj Xubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj+Xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj(Xubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j-XŒmodname”NŒ classname”Njìjï)�”}”jò]”jEWŒc.shmem_get_folio”†”asbuh1hhj Xubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIXh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj Xubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjWXh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj Xubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjdXh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj Xubj)�”}”(hŒfoliop”h]”hŒfoliop”…”�”}”(hjqXh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Xubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjWubj>)�”}”(hŒenum sgp_type sgp”h]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(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†Xubh)�”}”(hhh]”j)�”}”(hŒsgp_type”h]”hŒsgp_type”…”�”}”(hj¨Xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¥Xubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jªXŒmodname”NŒ classname”Njìjï)�”}”jò]”jEWŒc.shmem_get_folio”†”asbuh1hhj†Xubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆXh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj†Xubj)�”}”(hŒsgp”h]”hŒsgp”…”�”}”(hjÔXh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj†Xubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjWubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÊ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]”jM)�”}”(hŒfind, and lock a shmem folio.”h]”hŒfind, and lock a shmem folio.”…”�”}”(hjþXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´Mõ hjûXh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÃVh²hh³jÜVh´Mõ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjYjHjYjI‰jJ‰jK‰uh1híh²hhjKò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 Yh]”hŒ Parameters”…”�”}”(hj"Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjYubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´Mù hjYubj¤)�”}”(hhh]”(j©)�”}”(hŒ(``struct inode *inode`` inode to search ”h]”(j¯)�”}”(hŒ``struct inode *inode``”h]”jS)�”}”(hj?Yh]”hŒstruct inode *inode”…”�”}”(hjAYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj=Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´Mö hj9YubjÉ)�”}”(hhh]”jM)�”}”(hŒinode to search”h]”hŒinode to search”…”�”}”(hjXYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jTYh´Mö hjUYubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj9Yubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jTYh´Mö hj6Yubj©)�”}”(hŒ"``pgoff_t index`` the page index. ”h]”(j¯)�”}”(hŒ``pgoff_t index``”h]”jS)�”}”(hjxYh]”hŒ pgoff_t index”…”�”}”(hjzYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjvYubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´M÷ hjrYubjÉ)�”}”(hhh]”jM)�”}”(hŒthe page index.”h]”hŒthe page index.”…”�”•W}”(hj‘Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j�Yh´M÷ hjŽYubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjrYubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�Yh´M÷ hj6Yubj©)�”}”(hŒ=``loff_t write_end`` end of a write, could extend inode size ”h]”(j¯)�”}”(hŒ``loff_t write_end``”h]”jS)�”}”(hj±Yh]”hŒloff_t write_end”…”�”}”(hj³Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¯Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´Mø hj«YubjÉ)�”}”(hhh]”jM)�”}”(hŒ'end of a write, could extend inode size”h]”hŒ'end of a write, could extend inode size”…”�”}”(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ø hj6Yubj©)�”}”(hŒ8``struct folio **foliop`` pointer to the folio if found ”h]”(j¯)�”}”(hŒ``struct folio **foliop``”h]”jS)�”}”(hjêYh]”hŒstruct folio **foliop”…”�”}”(hjìYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjèYubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´Mù hjäYubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to the folio if found”h]”hŒpointer to the folio if found”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÿYh´Mù hjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjäYubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÿYh´Mù hj6Yubj©)�”}”(hŒ6``enum sgp_type sgp`` SGP_* flags to control behavior ”h]”(j¯)�”}”(hŒ``enum sgp_type sgp``”h]”jS)�”}”(hj#Zh]”hŒenum sgp_type sgp”…”�”}”(hj%Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj!Zubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´Mú hjZubjÉ)�”}”(hhh]”jM)�”}”(hŒSGP_* flags to control behavior”h]”hŒSGP_* flags to control behavior”…”�”}”(hj)�”}”(hŒconst char *name”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œ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ƒ\ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¾\h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjƒ\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”jèŒ reftarget”jé\Œmodname”NŒ classname”Njìjï)�”}”jò]”jH\Œ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Œ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”…”�”}”(hj/]h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj,]ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j1]Œmodname”NŒ classname”Njìjï)�”}”jò]”jH\Œc.shmem_kernel_file_setup”†”asbuh1hhj(]ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjM]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&]”jjuh1j7hj \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:136: ./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²hhjKò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:136: ./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:136: ./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)�”}”(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:136: ./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·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)�”}”(hj8^h]”hŒvma_flags_t flags”…”�”}”(hj:^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj6^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´M¹hj2^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”…”�”}”(hjQ^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´M¸hjN^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj2^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jM^h´M¹hj½]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¡]ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒshmem_file_setup (C function)”Œc.shmem_file_setup”hNt”auh1hÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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:136: ./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”jèŒ reftarget”j³^Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒshmem_file_setup”sbŒc.shmem_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Âubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjà^h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjŽ^h²hh³jŸ^h´MÂubhÿ)�”}”(hŒshmem_file_setup”h]”j)�”}”(hjÏ^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³jŸ^h´MÂubj8)�”}”(hŒ2(const char *name, loff_t size, vma_flags_t flags)”h]”(j>)�”}”(hŒconst char *name”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hj _h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj_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Œ ”…”�”}”(hj5_h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj_ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjC_h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj_ubj)�”}”(hŒname”h]”hŒname”…”�”}”(hjP_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”…”�”}”(hjl_h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhji_ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jn_Œmodname”NŒ classname”Njìjï)�”}”jò]”jÍ^Œc.shmem_file_setup”†”asbuh1hhje_ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠ_h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhje_ubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj˜_h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhje_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”jèŒ reftarget”j¶_Œmodname”NŒ classname”Njìjï)�”}”jò]”jÍ^Œc.shmem_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&]”jjuh1j7hjŽ^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:136: ./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²hhjKò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:136: ./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)�”}”(hjK`h]”hŒconst char *name”…”�”}”(hjM`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjI`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´MÃhjE`ubjÉ)�”}”(hhh]”jM)�”}”(hŒ0name for dentry (to be seen in /proc//maps)”h]”hŒ0name for dentry (to be seen in /proc//maps)”…”�”}”(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`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:136: ./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ÄhjB`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:136: ./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:136: ./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ÆhjB`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj&`ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjah²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´MÎubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%ah²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjah²hh³j$ah´MÎubh)�”}”(hhh]”j)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj6ah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3aubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j8aŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒshmem_file_setup_with_mnt”sbŒc.shmem_file_setup_with_mnt”†”asbuh1hhjah²hh³j$ah´MÎubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWah²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjah²hh³j$ah´MÎubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjeah²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjah²hh³j$ah´MÎubhÿ)�”}”(hŒshmem_file_setup_with_mnt”h]”j)�”}”(hjTah]”hŒshmem_file_setup_with_mnt”…”�”}”(hjvah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjraubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjah²hh³j$ah´MÎubj8)�”}”(hŒH(struct vfsmount *mnt, const char *name, loff_t size, vma_flags_t flags)”h]”(j>)�”}”(hŒstruct vfsmount *mnt”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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�aubh)�”}”(hhh]”j)�”}”(hŒvfsmount”h]”hŒvfsmount”…”�”}”(hj¯ah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¬aubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j±aŒmodname”NŒ classname”Njìjï)�”}”jò]”jRaŒc.shmem_file_setup_with_mnt”†”asbuh1hhj�aubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍah²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�aubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÛah²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj�aubj)�”}”(hŒmnt”h]”hŒmnt”…”�”}”(hjèah²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�aubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj‰aubj>)�”}”(hŒconst char *name”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjýaubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjýaubjá)�”}”(hŒchar”h]”hŒchar”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjýaubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*bh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjýaubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj8bh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjýaubj)�”}”(hŒname”h]”hŒname”…”�”}”(hjEbh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjýaubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj‰aubj>)�”}”(hŒ loff_t size”h]”(h)�”}”(hhh]”j)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjabh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj^bubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jcbŒmodname”NŒ classname”Njìjï)�”}”jò]”jRaŒc.shmem_file_setup_with_mnt”†”asbuh1hhjZbubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjZbubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj�bh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjZbubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj‰aubj>)�”}”(hŒvma_flags_t flags”h]”(h)�”}”(hhh]”j)�”}”(hŒ vma_flags_t”h]”hŒ vma_flags_t”…”�”}”(hj©bh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦bubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j«bŒmodname”NŒ classname”Njìjï)�”}”jò]”jRaŒc.shmem_file_setup_with_mnt”†”asbuh1hhj¢bubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇbh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¢bubj)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjÕbh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¢bubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj‰aubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjah²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Œ$get an unlinked file living in tmpfs”h]”hŒ$get an unlinked file living in tmpfs”…”�”}”(hjÿbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.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&]”jFjAjGjcjHjcjI‰jJ‰jK‰uh1híh²hhjKò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!ch]”hŒ Parameters”…”�”}”(hj#ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjcubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´MÒhjcubj¤)�”}”(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@ch]”hŒstruct vfsmount *mnt”…”�”}”(hjBch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj>cubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´MÏhj:cubjÉ)�”}”(hhh]”jM)�”}”(hŒ.the tmpfs mount where the file will be created”h]”hŒ.the tmpfs mount where the file will be created”…”�”}”(hjYch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jUch´MÏhjVcubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj:cubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jUch´MÏhj7cubj©)�”}”(hŒF``const char *name`` name for dentry (to be seen in /proc//maps) ”h]”(j¯)�”}”(hŒ``const char *name``”h]”jS)�”}”(hjych]”hŒconst char *name”…”�”}”(hj{ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjwcubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´MÐhjscubjÉ)�”}”(hhh]”jM)�”}”(hŒ0name for dentry (to be seen in /proc//maps)”h]”hŒ0name for dentry (to be seen in /proc//maps)”…”�”}”(hj’ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jŽch´MÐhj�cubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjscubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŽch´MÐhj7cubj©)�”}”(hŒ,``loff_t size`` size to be set for the file ”h]”(j¯)�”}”(hŒ``loff_t size``”h]”jS)�”}”(hj²ch]”hŒ loff_t size”…”�”}”(hj´ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj°cubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´MÑhj¬cubjÉ)�”}”(hhh]”jM)�”}”(hŒsize to be set for the file”h]”hŒsize to be set for the file”…”�”}”(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Ñhj7cubj©)�”}”(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ëch]”hŒvma_flags_t flags”…”�”}”(hjích²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjécubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´MÓhjåcubjÉ)�”}”(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”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´MÒhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjåcubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jdh´MÓhj7cubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjcubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒshmem_zero_setup (C function)”Œc.shmem_zero_setup”hNt”auh1hÜhjKò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”…”�”}”(hjEdh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjAdh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´Mêubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTdh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjAdh²hh³jSdh´Mêubhÿ)�”}”(hŒshmem_zero_setup”h]”j)�”}”(hŒshmem_zero_setup”h]”hŒshmem_zero_setup”…”�”}”(hjfdh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjbdubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjAdh²hh³jSdh´Mêubj8)�”}”(hŒ(struct vm_area_struct *vma)”h]”j>)�”}”(hŒstruct vm_area_struct *vma”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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~dubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj dh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�dubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j¢dŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjhdsbŒc.shmem_zero_setup”†”asbuh1hhj~dubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀdh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj~dubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÎdh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj~dubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjÛdh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj~dubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjzdubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjAdh²hh³jSdh´Mêubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj=dh²hh³jSdh´Mêubah}”(h]”j8dah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jSdh´Mêhj:dh²hubj4)�”}”(hhh]”jM)�”}”(hŒ setup a shared anonymous mapping”h]”hŒ setup a shared anonymous mapping”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´Mêhjeh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj:dh²hh³jSdh´Mêubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjejHjejI‰jJ‰jK‰uh1híh²hhjKò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'eh]”hŒ Parameters”…”�”}”(hj)eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj%eubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´Mîhj!eubj¤)�”}”(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)�”}”(hjFeh]”hŒstruct vm_area_struct *vma”…”�”}”(hjHeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjDeubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´Mëhj@eubjÉ)�”}”(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_eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j[eh´Mëhj\eubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj@eubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j[eh´Mëhj=eubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj!eubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj�eh]”hŒReturn”…”�”}”(hjƒeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´Míhj!eubjM)�”}”(hŒ0 on success, or error”h]”hŒ0 on success, or error”…”�”}”(hj—eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´Mìhj!eubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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Æeh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÂeh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´Mþubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕeh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÂeh²hh³jÔeh´Mþubhÿ)�”}”(hŒshmem_zero_setup_desc”h]”j)�”}”(hŒshmem_zero_setup_desc”h]”hŒshmem_zero_setup_desc”…”�”}”(hjçeh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjãeubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÂeh²hh³jÔeh´Mþubj8)�”}”(hŒ(struct vm_area_desc *desc)”h]”j>)�”}”(hŒstruct vm_area_desc *desc”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÿeubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÿeubh)�”}”(hhh]”j)�”}”(hŒ vm_area_desc”h]”hŒ vm_area_desc”…”�”}”(hj!fh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjfubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j#fŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjéesbŒc.shmem_zero_setup_desc”†”asbuh1hhjÿeubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAfh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÿeubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjOfh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÿeubj)�”}”(hŒdesc”h]”hŒdesc”…”�”}”(hj\fh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÿeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjûeubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÂeh²hh³jÔeh´Mþubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¾eh²hh³jÔeh´Mþubah}”(h]”j¹eah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÔeh´Mþhj»eh²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.”…”�”}”(hj†fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´Mþhjƒfh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj»eh²hh³jÔeh´Mþubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjžfjHjžfjI‰jJ‰jK‰uh1híh²hhjKò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¨fh]”hŒ Parameters”…”�”}”(hjªfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¦fubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´Mhj¢fubj¤)�”}”(hhh]”j©)�”}”(hŒ,``struct vm_area_desc *desc`` Describes VMA ”h]”(j¯)�”}”(hŒ``struct vm_area_desc *desc``”h]”jS)�”}”(hjÇfh]”hŒstruct vm_area_desc *desc”…”�”}”(hjÉfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÅfubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´MhjÁfubjÉ)�”}”(hhh]”jM)�”}”(hŒ Describes VMA”h]”hŒ Describes VMA”…”�”}”(hjàfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÜfh´MhjÝfubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÁfubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÜfh´Mhj¾fubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj¢fubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjgh]”hŒReturn”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjgubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´Mhj¢fubjM)�”}”(hŒ0 on success, or error”h]”hŒ0 on success, or error”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´Mhj¢fubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjGgh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjCgh²hh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUgh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjCgh²hh³jTgh´Mubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjfgh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjcgubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jhgŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒshmem_read_folio_gfp”sbŒc.shmem_read_folio_gfp”†”asbuh1hhjCgh²hh³jTgh´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡gh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjCgh²hh³jTgh´Mubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj•gh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjCgh²hh³jTgh´Mubhÿ)�”}”(hŒshmem_read_folio_gfp”h]”j)�”}”(hj„gh]”hŒshmem_read_folio_gfp”…”�”}”(hj¦gh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¢gubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjCgh²hh³jTgh´Mubj8)�”}”(hŒ9(struct address_space *mapping, pgoff_t index, gfp_t gfp)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÁgh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj½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”jèŒ reftarget”jágŒmodname”NŒ classname”Njìjï)�”}”jò]”j‚gŒc.shmem_read_folio_gfp”†”asbuh1hhj½gubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýgh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj½gubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj hh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj½gubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjhh²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”…”�”}”(hj4hh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj1hubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j6hŒmodname”NŒ classname”Njìjï)�”}”jò]”j‚gŒc.shmem_read_folio_gfp”†”asbuh1hhj-hubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRhh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj-hubj)�”}”(hŒindex”h]”hŒindex”…”�”}”(hj`hh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj-hubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¹gubj>)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj|hh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjyhubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j~hŒmodname”NŒ classname”Njìjï)�”}”jò]”j‚gŒc.shmem_read_folio_gfp”†”asbuh1hhjuhubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšhh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjuhubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj¨hh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjuhubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¹gubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjCgh²hh³jTgh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj?gh²hh³jTgh´Mubah}”(h]”j:gah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jTgh´Mhjread_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ôhh]”hŒ Parameters”…”�”}”(hjöhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjòhubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´Mhjîhubj¤)�”}”(hhh]”(j©)�”}”(hŒ<``struct address_space *mapping`` the folio's address_space ”h]”(j¯)�”}”(hŒ!``struct address_space *mapping``”h]”jS)�”}”(hjih]”hŒstruct address_space *mapping”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´Mhj iubjÉ)�”}”(hhh]”jM)�”}”(hŒthe folio's address_space”h]”hŒthe folio’s address_space”…”�”}”(hj,ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j(ih´Mhj)iubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj iubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j(ih´Mhj iubj©)�”}”(hŒ"``pgoff_t index`` the folio index ”h]”(j¯)�”}”(hŒ``pgoff_t index``”h]”jS)�”}”(hjLih]”hŒ pgoff_t index”…”�”}”(hjNih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjJiubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´MhjFiubjÉ)�”}”(hhh]”jM)�”}”(hŒthe folio index”h]”hŒthe folio index”…”�”}”(hjeih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jaih´Mhjbiubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjFiubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jaih´Mhj iubj©)�”}”(hŒ<``gfp_t gfp`` the page allocator flags to use if allocating ”h]”(j¯)�”}”(hŒ ``gfp_t gfp``”h]”jS)�”}”(hj…ih]”hŒ gfp_t gfp”…”�”}”(hj‡ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjƒiubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´MhjiubjÉ)�”}”(hhh]”jM)�”}”(hŒ-the page allocator flags to use if allocating”h]”hŒ-the page allocator flags to use if allocating”…”�”}”(hjžih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jših´Mhj›iubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjiubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jših´Mhj iubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjîhubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjÀih]”hŒ Description”…”�”}”(hjÂih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¾iubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´MhjîhubjM)�”}”(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.”…”�”}”(hjÖih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´MhjîhubjM)�”}”(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åih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒK/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:136: ./mm/shmem.c”h´Mhjîhubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjjh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´KLubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#jh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjjh²hh³j"jh´KLubhÿ)�”}”(hŒmigrate_vma_split_folio”h]”j)�”}”(hŒmigrate_vma_split_folio”h]”hŒmigrate_vma_split_folio”…”�”}”(hj5jh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj1jubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjjh²hh³j"jh´KLubj8)�”}”(hŒ.(struct folio *folio, struct page *fault_page)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjQjh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjMjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^jh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjMjubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjojh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjljubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jqjŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj7jsbŒc.migrate_vma_split_folio”†”asbuh1hhjMjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�jh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjMjubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj�jh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjMjubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjªjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjMjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjIjubj>)�”}”(hŒstruct page *fault_page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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¿jubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjájh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÞjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jãjŒmodname”NŒ classname”Njìjï)�”}”jò]”j‹jŒc.migrate_vma_split_folio”†”asbuh1hhj¿jubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¿jubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj kh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¿jubj)�”}”(hŒ fault_page”h]”hŒ fault_page”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¿jubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjIjubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjjh²hh³j"jh´KLubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj jh²hh³j"jh´KLubah}”(h]”jjah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j"jh´KLhj jh²hubj4)�”}”(hhh]”jM)�”}”(hŒ$Helper function to split a THP folio”h]”hŒ$Helper function to split a THP folio”…”�”}”(hjDkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´KLhjAkh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj jh²hh³j"jh´KLubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj\kjHj\kjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjfkh]”hŒ Parameters”…”�”}”(hjhkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjdkubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´KPhj`kubj¤)�”}”(hhh]”(j©)�”}”(hŒ+``struct folio *folio`` the folio to split ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj…kh]”hŒstruct folio *folio”…”�”}”(hj‡kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjƒkubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´KMhjkubjÉ)�”}”(hhh]”jM)�”}”(hŒthe folio to split”h]”hŒthe folio to split”…”�”}”(hjžkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jškh´KMhj›kubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjkubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jškh´KMhj|kubj©)�”}”(hŒI``struct page *fault_page`` struct page associated with the fault if any ”h]”(j¯)�”}”(hŒ``struct page *fault_page``”h]”jS)�”}”(hj¾kh]”hŒstruct page *fault_page”…”�”}”(hjÀkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¼kubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´KNhj¸kubjÉ)�”}”(hhh]”jM)�”}”(hŒ,struct page associated with the fault if any”h]”hŒ,struct page associated with the fault if any”…”�”}”(hj×kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÓkh´KNhjÔkubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¸kubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÓkh´KNhj|kubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj`kubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjùkh]”hŒ Description”…”�”}”(hjûkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj÷kubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´KPhj`kubjM)�”}”(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 ”…”�”}”(hjlh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjlubhŒ is not the folio containing ”…”�”}”(hjlh²hh³Nh´NubjŽ)�”}”(hŒ**fault_page**”h]”hŒ fault_page”…”�”}”(hj)lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjlubhŒ&, the caller must hold a reference on ”…”�”}”(hjlh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj;lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjlubhŒ%. The helper consumes that reference.”…”�”}”(hjlh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´KOhj`kubjM)�”}”(hŒReturns 0 on success”h]”hŒReturns 0 on success”…”�”}”(hjTlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´KRhj`kubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmigrate_vma_setup (C function)”Œc.migrate_vma_setup”hNt”auh1hÜhjKò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”…”�”}”(hjƒlh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjlh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´M¥ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’lh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjlh²hh³j‘lh´M¥ubhÿ)�”}”(hŒmigrate_vma_setup”h]”j)�”}”(hŒmigrate_vma_setup”h]”hŒmigrate_vma_setup”…”�”}”(hj¤lh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj lubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjlh²hh³j‘lh´M¥ubj8)�”}”(hŒ(struct migrate_vma *args)”h]”j>)�”}”(hŒstruct migrate_vma *args”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÀlh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¼lubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍlh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¼lubh)�”}”(hhh]”j)�”}”(hŒ migrate_vma”h]”hŒ migrate_vma”…”�”}”(hjÞlh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÛlubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jàlŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj¦lsbŒc.migrate_vma_setup”†”asbuh1hhj¼lubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþlh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¼lubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj mh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¼lubj)�”}”(hŒargs”h]”hŒargs”…”�”}”(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&]”jjuh1j7hjlh²hh³j‘lh´M¥ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj{lh²hh³j‘lh´M¥ubah}”(h]”jvlah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j‘lh´M¥hjxlh²hubj4)�”}”(hhh]”jM)�”}”(hŒ$prepare to migrate a range of memory”h]”hŒ$prepare to migrate a range of memory”…”�”}”(hjCmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´M¥hj@mh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjxlh²hh³j‘lh´M¥ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj[mjHj[mjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjemh]”hŒ Parameters”…”�”}”(hjgmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjcmubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´M©hj_mubj¤)�”}”(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)�”}”(hj„mh]”hŒstruct migrate_vma *args”…”�”}”(hj†mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‚mubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´M¦hj~mubjÉ)�”}”(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”…”�”}”(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£hj_mubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj¿mh]”hŒReturn”…”�”}”(hjÁmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj½mubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´M¨hj_mubjM)�”}”(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.”…”�”}”(hjÕmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´M¨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³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´M«hj_mubjM)�”}”(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ümh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´Mªhj_mubjM)�”}”(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 nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´M²hj_mubjM)�”}”(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.”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´M¹hj_mubjM)�”}”(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)nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´MÀhj_mubjM)�”}”(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.”…”�”}”(hj8nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´MÉhj_mubjM)�”}”(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.”…”�”}”(hjGnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´MÑhj_mubjM)�”}”(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.”…”�”}”(hjVnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´MÕhj_mubjM)�”}”(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).”…”�”}”(hjenh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´MÙhj_mubjM)�”}”(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.”…”�”}”(hjtnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´MÝhj_mubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hj£nh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjŸnh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²nh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjŸnh²hh³j±nh´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”…”�”}”(hjÄnh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÀnubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjŸnh²hh³j±nh´Mubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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)�”}”(hhh]”j)�”}”(hŒ migrate_vma”h]”hŒ migrate_vma”…”�”}”(hjþnh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjûnubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”joŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÆnsbŒ"c.migrate_vma_insert_huge_pmd_page”†”asbuh1hhjÜnubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÜnubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj,oh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÜnubj)�”}”(hŒmigrate”h]”hŒmigrate”…”�”}”(hj9oh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÜnubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjØnubj>)�”}”(hŒunsigned long addr”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjRoh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjNoubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`oh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjNoubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjnoh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjNoubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|oh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjNoubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjŠoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjNoubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjØnubj>)�”}”(hŒstruct page *page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj£oh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjŸoubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°oh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjŸoubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÁoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¾oubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÃoŒmodname”NŒ classname”Njìjï)�”}”jò]”joŒ"c.migrate_vma_insert_huge_pmd_page”†”asbuh1hhjŸoubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßoh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjŸoubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjíoh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjŸoubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjúoh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŸoubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjØnubj>)�”}”(hŒunsigned long *src”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjpubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!ph²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjpubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj/ph²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjpubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=ph²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjpubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjKph²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjpubj)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hjXph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjpubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjØnubj>)�”}”(hŒ pmd_t *pmdp”h]”(h)�”}”(hhh]”j)�”}”(hŒpmd_t”h]”hŒpmd_t”…”�”}”(hjtph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjqpubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jvpŒmodname”NŒ classname”Njìjï)�”}”jò]”joŒ"c.migrate_vma_insert_huge_pmd_page”†”asbuh1hhjmpubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’ph²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjmpubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj ph²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjmpubj)�”}”(hŒpmdp”h]”hŒpmdp”…”�”}”(hj­ph²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjmpubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjØnubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjŸnh²hh³j±nh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj›nh²hh³j±nh´Mubah}”(h]”j–nah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j±nh´Mhj˜nh²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 ”…”�”}”(hj×ph²hh³Nh´NubjŽ)�”}”(hŒ**migrate->vma->vm_mm**”h]”hŒmigrate->vma->vm_mm”…”�”}”(hjßph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj×pubhŒ at ”…”�”}”(hj×ph²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hjñph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj×pubhŒP. folio is already allocated as a part of the migration process with large page.”…”�”}”(hj×ph²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´MhjÔph²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj˜nh²hh³j±nh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjqjHjqjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjqh]”hŒ Parameters”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjqubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´Mhjqubj¤)�”}”(hhh]”(j©)�”}”(hŒ6``struct migrate_vma *migrate`` migrate_vma arguments ”h]”(j¯)�”}”(hŒ``struct migrate_vma *migrate``”h]”jS)�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj:qubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´Mhj6qubjÉ)�”}”(hhh]”jM)�”}”(hŒmigrate_vma arguments”h]”hŒmigrate_vma arguments”…”�”}”(hjUqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jQqh´MhjRqubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj6qubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jQqh´Mhj3qubj©)�”}”(hŒ@``unsigned long addr`` address where the folio will be inserted ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hjuqh]”hŒunsigned long addr”…”�”}”(hjwqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjsqubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´MhjoqubjÉ)�”}”(hhh]”jM)�”}”(hŒ(address where the folio will be inserted”h]”hŒ(address where the folio will be inserted”…”�”}”(hjŽqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jŠqh´Mhj‹qubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjoqubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŠqh´Mhj3qubj©)�”}”(hŒ6``struct page *page`` page to be inserted at **addr** ”h]”(j¯)�”}”(hŒ``struct page *page``”h]”jS)�”}”(hj®qh]”hŒstruct page *page”…”�”}”(hj°qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¬qubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´Mhj¨qubjÉ)�”}”(hhh]”jM)�”}”(hŒpage to be inserted at **addr**”h]”(hŒpage to be inserted at ”…”�”}”(hjÇqh²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hjÏqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÇqubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÃqh´MhjÄqubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¨qubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÃqh´Mhj3qubj©)�”}”(hŒ7``unsigned long *src`` src pfn which is being migrated ”h]”(j¯)�”}”(hŒ``unsigned long *src``”h]”jS)�”}”(hjõqh]”hŒunsigned long *src”…”�”}”(hj÷qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjóqubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´MhjïqubjÉ)�”}”(hhh]”jM)�”}”(hŒsrc pfn which is being migrated”h]”hŒsrc pfn which is being migrated”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j rh´Mhj rubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjïqubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j rh´Mhj3qubj©)�”}”(hŒ#``pmd_t *pmdp`` pointer to the pmd ”h]”(j¯)�”}”(hŒ``pmd_t *pmdp``”h]”jS)�”}”(hj.rh]”hŒ pmd_t *pmdp”…”�”}”(hj0rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj,rubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´Mhj(rubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to the pmd”h]”hŒpointer to the pmd”…”�”}”(hjGrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jCrh´MhjDrubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj(rubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jCrh´Mhj3qubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjqubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjirh]”hŒ Description”…”�”}”(hjkrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjgrubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´M hjqubjM)�”}”(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ƒrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjrubhŒ² 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.”…”�”}”(hjrh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´Mhjqubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!migrate_device_pages (C function)”Œc.migrate_device_pages”hNt”auh1hÜhjKò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”…”�”}”(hj¼rh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj¸rh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´Mñubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËrh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¸rh²hh³jÊrh´Mñubhÿ)�”}”(hŒmigrate_device_pages”h]”j)�”}”(hŒmigrate_device_pages”h]”hŒmigrate_device_pages”…”�”}”(hjÝrh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÙrubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¸rh²hh³jÊrh´Mñubj8)�”}”(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ùrh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjõrubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjõrubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjõrubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#sh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjõrubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj1sh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjõrubj)�”}”(hŒsrc_pfns”h]”hŒsrc_pfns”…”�”}”(hj>sh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjõrubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjñrubj>)�”}”(hŒunsigned long *dst_pfns”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjWsh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjSsubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjesh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjSsubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjssh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjSsubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�sh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjSsubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj�sh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjSsubj)�”}”(hŒdst_pfns”h]”hŒdst_pfns”…”�”}”(hjœsh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjSsubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjñrubj>)�”}”(hŒunsigned long npages”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjµsh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj±subjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃsh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj±subjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÑsh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj±subjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßsh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj±subj)�”}”(hŒnpages”h]”hŒnpages”…”�”}”(hjísh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj±subeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjñrubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj¸rh²hh³jÊrh´Mñubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj´rh²hh³jÊrh´Mñubah}”(h]”j¯rah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÊrh´Mñhj±rh²hubj4)�”}”(hhh]”jM)�”}”(hŒ+migrate meta-data from src page to dst page”h]”hŒ+migrate meta-data from src page to dst page”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´Mñhjth²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj±rh²hh³jÊrh´Mñubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj/tjHj/tjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hj9th]”hŒ Parameters”…”�”}”(hj;th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj7tubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´Mõhj3tubj¤)�”}”(hhh]”(j©)�”}”(hŒJ``unsigned long *src_pfns`` src_pfns returned from migrate_device_range() ”h]”(j¯)�”}”(hŒ``unsigned long *src_pfns``”h]”jS)�”}”(hjXth]”hŒunsigned long *src_pfns”…”�”}”(hjZth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjVtubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´MòhjRtubjÉ)�”}”(hhh]”jM)�”}”(hŒ-src_pfns returned from migrate_device_range()”h]”hŒ-src_pfns returned from migrate_device_range()”…”�”}”(hjqth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jmth´Mòhjntubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjRtubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jmth´MòhjOtubj©)�”}”(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‘th]”hŒunsigned long *dst_pfns”…”�”}”(hj“th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj�tubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´Móhj‹tubjÉ)�”}”(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ª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óhjOtubj©)�”}”(hŒ6``unsigned long npages`` number of pages in the range ”h]”(j¯)�”}”(hŒ``unsigned long npages``”h]”jS)�”}”(hjÊth]”hŒunsigned long npages”…”�”}”(hjÌth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÈtubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´MôhjÄtubjÉ)�”}”(hhh]”jM)�”}”(hŒnumber of pages in the range”h]”hŒnumber of pages in the range”…”�”}”(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ôhjOtubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj3tubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjuh]”hŒ Description”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjuubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´Möhj3tubjM)�”}”(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.”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´Mõhj3tubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmigrate_vma_pages (C function)”Œc.migrate_vma_pages”hNt”auh1hÜhjKò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”…”�”}”(hjJuh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjFuh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYuh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjFuh²hh³jXuh´Mubhÿ)�”}”(hŒmigrate_vma_pages”h]”j)�”}”(hŒmigrate_vma_pages”h]”hŒmigrate_vma_pages”…”�”}”(hjkuh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjguubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjFuh²hh³jXuh´Mubj8)�”}”(hŒ(struct migrate_vma *migrate)”h]”j>)�”}”(hŒstruct migrate_vma *migrate”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj‡uh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjƒuubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”uh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjƒuubh)�”}”(hhh]”j)�”}”(hŒ migrate_vma”h]”hŒ migrate_vma”…”�”}”(hj¥uh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¢uubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j§uŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjmusbŒc.migrate_vma_pages”†”asbuh1hhjƒuubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅuh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjƒuubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÓuh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjƒuubj)�”}”(hŒmigrate”h]”hŒmigrate”…”�”}”(hjàuh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjƒuubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjuubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjFuh²hh³jXuh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjBuh²hh³jXuh´Mubah}”(h]”j=uah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jXuh´Mhj?uh²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 vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´Mhjvh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj?uh²hh³jXuh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj"vjHj"vjI‰jJ‰jK‰uh1híh²hhjKò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,vh]”hŒ Parameters”…”�”}”(hj.vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj*vubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´Mhj&vubj¤)�”}”(hhh]”j©)�”}”(hŒT``struct migrate_vma *migrate`` migrate struct containing all migration information ”h]”(j¯)�”}”(hŒ``struct migrate_vma *migrate``”h]”jS)�”}”(hjKvh]”hŒstruct migrate_vma *migrate”…”�”}”(hjMvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjIvubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´MhjEvubjÉ)�”}”(hhh]”jM)�”}”(hŒ3migrate struct containing all migration information”h]”hŒ3migrate struct containing all migration information”…”�”}”(hjdvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j`vh´Mhjavubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjEvubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j`vh´MhjBvubah}”(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³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´Mhj&vubjM)�”}”(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.”…”�”}”(hjœvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´Mhj&vubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!migrate_vma_finalize (C function)”Œc.migrate_vma_finalize”hNt”auh1hÜhjKò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”…”�”}”(hjËvh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÇvh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´MTubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚvh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÇvh²hh³jÙvh´MTubhÿ)�”}”(hŒmigrate_vma_finalize”h]”j)�”}”(hŒmigrate_vma_finalize”h]”hŒmigrate_vma_finalize”…”�”}”(hjìvh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjèvubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÇvh²hh³jÙvh´MTubj8)�”}”(hŒ(struct migrate_vma *migrate)”h]”j>)�”}”(hŒstruct migrate_vma *migrate”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjwubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjwubh)�”}”(hhh]”j)�”}”(hŒ migrate_vma”h]”hŒ migrate_vma”…”�”}”(hj&wh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj#wubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j(wŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjîvsbŒc.migrate_vma_finalize”†”asbuh1hhjwubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFwh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjwubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjTwh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjwubj)�”}”(hŒmigrate”h]”hŒmigrate”…”�”}”(hjawh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjwubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjwubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÇvh²hh³jÙvh´MTubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÃvh²hh³jÙvh´MTubah}”(h]”j¾vah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÙvh´MThjÀvh²hubj4)�”}”(hhh]”jM)�”}”(hŒrestore CPU page table entry”h]”hŒrestore CPU page table entry”…”�”}”(hj‹wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´MThjˆwh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÀvh²hh³jÙvh´MTubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj£wjHj£wjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hj­wh]”hŒ Parameters”…”�”}”(hj¯wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj«wubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´MXhj§wubj¤)�”}”(hhh]”j©)�”}”(hŒT``struct migrate_vma *migrate`` migrate struct containing all migration information ”h]”(j¯)�”}”(hŒ``struct migrate_vma *migrate``”h]”jS)�”}”(hjÌwh]”hŒstruct migrate_vma *migrate”…”�”}”(hjÎwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÊwubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´MUhjÆwubjÉ)�”}”(hhh]”jM)�”}”(hŒ3migrate struct containing all migration information”h]”hŒ3migrate struct containing all migration information”…”�”}”(hjåwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jáwh´MUhjâwubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÆwubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jáwh´MUhjÃwubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj§wubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjxh]”hŒ Description”…”�”}”(hj xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjxubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´MWhj§wubjM)�”}”(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.”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´MVhj§wubjM)�”}”(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,xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´MZhj§wubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!migrate_device_range (C function)”Œc.migrate_device_range”hNt”auh1hÜhjKò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[xh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjWxh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´Mvubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjxh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjWxh²hh³jixh´Mvubhÿ)�”}”(hŒmigrate_device_range”h]”j)�”}”(hŒmigrate_device_range”h]”hŒmigrate_device_range”…”�”}”(hj|xh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjxxubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjWxh²hh³jixh´Mvubj8)�”}”(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˜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Œlong”h]”hŒlong”…”�”}”(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”xubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÐxh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj”xubj)�”}”(hŒsrc_pfns”h]”hŒsrc_pfns”…”�”}”(hjÝxh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj”xubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj�xubj>)�”}”(hŒunsigned long start”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjöxh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjòxubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjòxubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(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òxubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj.yh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjòxubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj�xubj>)�”}”(hŒunsigned long npages”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjGyh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjCyubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUyh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjCyubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjcyh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjCyubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqyh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjCyubj)�”}”(hŒnpages”h]”hŒnpages”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjCyubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj�xubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjWxh²hh³jixh´Mvubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjSxh²hh³jixh´Mvubah}”(h]”jNxah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jixh´MvhjPxh²hubj4)�”}”(hhh]”jM)�”}”(hŒ-migrate device private pfns to normal memory.”h]”hŒ-migrate device private pfns to normal memory.”…”�”}”(hj©yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´Mvhj¦yh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjPxh²hh³jixh´Mvubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÁyjHjÁyjI‰jJ‰jK‰uh1híh²hhjKò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_device_range() 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. 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Ž)�”}”(hjËyh]”hŒ Parameters”…”�”}”(hjÍyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÉyubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´MzhjÅyubj¤)�”}”(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êyh]”hŒunsigned long *src_pfns”…”�”}”(hjìyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjèyubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´MwhjäyubjÉ)�”}”(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.”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÿyh´Mwhjzubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjäyubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÿyh´Mwhjáyubj©)�”}”(hŒ>``unsigned long start`` starting pfn in the range to migrate. ”h]”(j¯)�”}”(hŒ``unsigned long start``”h]”jS)�”}”(hj#zh]”hŒunsigned long start”…”�”}”(hj%zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj!zubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´MxhjzubjÉ)�”}”(hhh]”jM)�”}”(hŒ%starting pfn in the range to migrate.”h]”hŒ%starting pfn in the range to migrate.”…”�”}”(hj)�”}”(hŒunsigned long *src_pfns”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{ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjo{h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj3{ubj)�”}”(hŒsrc_pfns”h]”hŒsrc_pfns”…”�”}”(hj|{h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj3{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&]”jjuh1j7hjözh²hh³j{h´M­ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjòzh²hh³j{h´M­ubah}”(h]”jízah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j{h´M­hjïzh²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:137: ./mm/migrate_device.c”h´M­hjô{h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjïzh²hh³j{h´M­ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj|jHj|jI‰jJ‰jK‰uh1híh²hhjKò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:137: ./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)�”}”(hj8|h]”hŒunsigned long *src_pfns”…”�”}”(hj:|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj6|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´M®hj2|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.”…”�”}”(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Œ5``unsigned long npages`` number of pages to migrate. ”h]”(j¯)�”}”(hŒ``unsigned long npages``”h]”jS)�”}”(hjq|h]”hŒunsigned long npages”…”�”}”(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:137: ./mm/migrate_device.c”h´M¯hjk|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È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³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./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.”…”�”}”(hjÂ|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:137: ./mm/migrate_device.c”h´M°hj|ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubjzÕ)�”}”(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)”…”�”}”hjØ|sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1jyÕhjKòh²hh³hÊh´KŠubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒwp_walk (C struct)”Œ c.wp_walk”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒwp_walk”h]”hù)�”}”(hŒstruct wp_walk”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÿ|h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjû|h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./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”…”�”}”(hjA}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./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&]”jFjAjGjY}jHjY}jI‰jJ‰jK‰uh1híh²hhjKò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”…”�”}”(hje}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hja}ubhŒ:”…”�”}”(hja}h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.c”h´Khj]}ubj7 )�”}”(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&]”jjuh1j6 h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./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:139: ./mm/mapping_dirty_helpers.c”h´Khj]}ubj¤)�”}”(hhh]”(j©)�”}”(hŒ"``range`` Range for mmu notifiers ”h]”(j¯)�”}”(hŒ ``range``”h]”jS)�”}”(hj®}h]”hŒrange”…”�”}”(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:139: ./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³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Œ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:139: ./mm/mapping_dirty_helpers.c”h´Khjá}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Èhjá}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:139: ./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”…”�”}”(hj9~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j5~h´Khj6~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j5~h´Khj¥}ubj©)�”}”(hŒ'``total`` Total number of modified ptes”h]”(j¯)�”}”(hŒ ``total``”h]”jS)�”}”(hjY~h]”hŒtotal”…”�”}”(hj[~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjW~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.c”h´KhjS~ubjÉ)�”}”(hhh]”jM)�”}”(hŒTotal number of modified ptes”h]”hŒTotal number of modified ptes”…”�”}”(hjr~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.c”h´Khjo~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjS~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jn~h´Khj¥}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj]}ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒwp_pte (C function)”Œc.wp_pte”hNt”auh1hÜhjKò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”…”�”}”(hj³~h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj¯~h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./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_pte”h]”j)�”}”(hŒwp_pte”h]”hŒwp_pte”…”�”}”(hjÔ~h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÐ~ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¯~h²hh³jÁ~h´Kubj8)�”}”(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”jèŒ reftarget”jõ~Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÖ~sbŒc.wp_pte”†”asbuh1hhjì~ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjì~ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjì~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”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjCubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjCubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjCubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjCubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjCubeh}”(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è~ubj>)�”}”(hŒstruct mm_walk *walk”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjåubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjåubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”j €Œmodname”NŒ classname”Njìjï)�”}”jò]”jŒc.wp_pte”†”asbuh1hhjåubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%€h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjåubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj3€h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjå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&]”jjuh1j7hj¯~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ŒWrite-protect a pte”h]”hŒWrite-protect a pte”…”�”}”(hjj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.c”h´Khjg€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²hhjKò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:139: ./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)�”}”(hj«€h]”hŒ pte_t *pte”…”�”}”(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:139: ./mm/mapping_dirty_helpers.c”h´Khj¥€ubjÉ)�”}”(hhh]”jM)�”}”(hŒPointer to the pte”h]”hŒPointer to the pte”…”�”}”(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Œ?``unsigned long addr`` The start of protecting 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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.c”h´KhjÞ€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ÈhjÞ€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jù€h´Khj¢€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:139: ./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”…”�”}”(hj6�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j2�h´Khj3�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j2�h´Khj¢€ubj©)�”}”(hŒ:``struct mm_walk *walk`` pagetable walk callback argument ”h]”(j¯)�”}”(hŒ``struct mm_walk *walk``”h]”jS)�”}”(hjV�h]”hŒstruct mm_walk *walk”…”�”}”(hjX�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjT�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.c”h´KhjP�ubjÉ)�”}”(hhh]”jM)�”}”(hŒ pagetable walk callback argument”h]”hŒ pagetable walk callback argument”…”�”}”(hjo�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jk�h´Khjl�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjP�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jk�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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./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:139: ./mm/mapping_dirty_helpers.c”•h´Khj†€ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒclean_walk (C struct)”Œ c.clean_walk”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ clean_walk”h]”hù)�”}”(hŒstruct clean_walk”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÖ�h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÒ�h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.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Œ clean_walk”h]”j)�”}”(hjÐ�h]”hŒ clean_walk”…”�”}”(hjö�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjò�ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþ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Œ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:139: ./mm/mapping_dirty_helpers.c”h´K7hj‚h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjË�h²hh³jã�h´K$ubeh}”(h]”h ]”(jAŒstruct”eh"]”h$]”h&]”jFjAjGj0‚jHj0‚jI‰jJ‰jK‰uh1híh²hhjKò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�hj8‚ubhŒ:”…”�”}”(hj8‚h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.c”h´K;hj4‚ubj7 )�”}”(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; };”…”�”}”hjU‚sbah}”(h]”h ]”h"]”h$]”h&]”jjuh1j6 h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.c”h´K=hj4‚ubjM)�”}”(hŒ **Members**”h]”jŽ)�”}”(hjf‚h]”hŒMembers”…”�”}”(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:139: ./mm/mapping_dirty_helpers.c”h´KEhj4‚ubj¤)�”}”(hhh]”(j©)�”}”(hŒ'``base`` struct wp_walk we derive from ”h]”(j¯)�”}”(hŒ``base``”h]”jS)�”}”(hj…‚h]”hŒbase”…”�”}”(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:139: ./mm/mapping_dirty_helpers.c”h´K9hj‚ubjÉ)�”}”(hhh]”jM)�”}”(hŒstruct wp_walk we derive from”h]”hŒstruct wp_walk we derive from”…”�”}”(hjž‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jš‚h´K9hj›‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jš‚h´K9hj|‚ubj©)�”}”(hŒJ``bitmap_pgoff`` Address_space Page offset of the first bit in **bitmap** ”h]”(j¯)�”}”(hŒ``bitmap_pgoff``”h]”jS)�”}”(hj¾‚h]”hŒ 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:139: ./mm/mapping_dirty_helpers.c”h´K:hj¸‚ubjÉ)�”}”(hhh]”jM)�”}”(hŒ8Address_space Page offset of the first bit in **bitmap**”h]”(hŒ.Address_space Page offset of the first bit in ”…”�”}”(hjׂh²hh³Nh´NubjŽ)�”}”(hŒ **bitmap**”h]”hŒbitmap”…”�”}”(hjß‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjׂubeh}”(h]”h ]”h"]”h$]”h&]”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ŒX``bitmap`` Bitmap with one bit for each page offset in the address_space range covered. ”h]”(j¯)�”}”(hŒ ``bitmap``”h]”jS)�”}”(hjƒh]”hŒbitmap”…”�”}”(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:139: ./mm/mapping_dirty_helpers.c”h´Khj9ƒubjÉ)�”}”(hhh]”jM)�”}”(hŒLAddress_space page offset of first modified pte relative to **bitmap_pgoff**”h]”(hŒhj|‚ubj©)�”}”(hŒS``end`` Address_space page offset of last modified pte relative to **bitmap_pgoff**”h]”(j¯)�”}”(hŒ``end``”h]”jS)�”}”(hj‡ƒh]”hŒ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:139: ./mm/mapping_dirty_helpers.c”h´K?hj�ƒubjÉ)�”}”(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 ”…”�”}”(hj ƒh²hh³Nh´NubjŽ)�”}”(hŒ**bitmap_pgoff**”h]”hŒ bitmap_pgoff”…”�”}”(hj¨ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj ƒubeh}”(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£hj4‚ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒclean_record_pte (C function)”Œc.clean_record_pte”hNt”auh1hÜhjKò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îƒh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjêƒh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.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Œclean_record_pte”h]”j)�”}”(hŒclean_record_pte”h]”hŒclean_record_pte”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj „ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjêƒh²hh³jüƒh´KLubj8)�”}”(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”jèŒ reftarget”j0„Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj„sbŒc.clean_record_pte”†”asbuh1hhj'„ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjN„h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj'„ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj\„h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj'„ubj)�”}”(hŒpte”h]”hŒpte”…”�”}”(hji„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”…”�”}”(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#„ubj>)�”}”(hŒstruct mm_walk *walk”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj$…h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj …ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1…h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj …ubh)�”}”(hhh]”j)�”}”(hŒmm_walk”h]”hŒmm_walk”…”�”}”(hjB…h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj?…ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jD…Œmodname”NŒ classname”Njìjï)�”}”jò]”jJ„Œc.clean_record_pte”†”asbuh1hhj …ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`…h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj …ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjn…h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj …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&]”jjuh1j7hjêƒ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Œ;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¥…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.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²hhjKò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Ç…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:139: ./mm/mapping_dirty_helpers.c”h´KPhjÁ…ubj¤)�”}”(hhh]”(j©)�”}”(hŒ"``pte_t *pte`` Pointer to the pte ”h]”(j¯)�”}”(hŒ``pte_t *pte``”h]”jS)�”}”(hjæ…h]”hŒ pte_t *pte”…”�”}”(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:139: ./mm/mapping_dirty_helpers.c”h´KNhjà…ubjÉ)�”}”(hhh]”jM)�”}”(hŒPointer to the pte”h]”hŒPointer to the pte”…”�”}”(hjÿ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jû…h´KNhjü…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjà…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jû…h´KNhjÝ…ubj©)�”}”(hŒ@``unsigned long addr`` The start of virtual address to be clean ”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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.c”h´KOhj†ubjÉ)�”}”(hhh]”jM)�”}”(hŒ(The start of virtual address to be clean”h]”hŒ(The start of virtual address to be clean”…”�”}”(hj8†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j4†h´KOhj5†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j4†h´KOhjÝ…ubj©)�”}”(hŒ=``unsigned long end`` The end of virtual address to be clean ”h]”(j¯)�”}”(hŒ``unsigned long end``”h]”jS)�”}”(hjX†h]”hŒunsigned long end”…”�”}”(hjZ†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjV†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.c”h´KPhjR†ubjÉ)�”}”(hhh]”jM)�”}”(hŒ&The end of virtual address to be clean”h]”hŒ&The end of virtual address to be clean”…”�”}”(hjq†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jm†h´KPhjn†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjR†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jm†h´KPhjÝ…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:139: ./mm/mapping_dirty_helpers.c”h´KQhj‹†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´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£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:139: ./mm/mapping_dirty_helpers.c”h´KShjÁ…ubjM)�”}”(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.”…”�”}”(hjâ†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.c”h´KRhjÁ…ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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‡h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj ‡h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.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úubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj.‡h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj ‡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úubhÿ)�”}”(hŒwp_shared_mapping_range”h]”j)�”}”(hŒwp_shared_mapping_range”h]”hŒwp_shared_mapping_range”…”�”}”(hjN‡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjJ‡ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj ‡h²hh³j‡h´Kúubj8)�”}”(hŒ@(struct address_space *mapping, pgoff_t first_index, pgoff_t nr)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjj‡h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjf‡ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjw‡h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjf‡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”jèŒ reftarget”jЇŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjP‡sbŒc.wp_shared_mapping_range”†”asbuh1hhjf‡ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨‡h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjf‡ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¶‡h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjf‡ubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjf‡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjb‡ubj>)�”}”(hŒpgoff_t first_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”jèŒ reftarget”jᇌmodname”NŒ classname”Njìjï)�”}”jò]”j¤‡Œc.wp_shared_mapping_range”†”asbuh1hhj؇ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý‡h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj؇ubj)�”}”(hŒ first_index”h]”hŒ first_index”…”�”}”(hj ˆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj؇ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjb‡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&]”uh1jhj$ˆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j)ˆŒmodname”NŒ classname”Njìjï)�”}”jò]”j¤‡Œc.wp_shared_mapping_range”†”asbuh1hhj ˆubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEˆh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj ˆubj)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjSˆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ˆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjb‡ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj ‡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Œ0Write-protect all ptes in an address space range”h]”hŒ0Write-protect 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:139: ./mm/mapping_dirty_helpers.c”h´Kúhjzˆ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²hhjKò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Ž)�”}”(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:139: ./mm/mapping_dirty_helpers.c”h´Kþhj™ˆubj¤)�”}”(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)�”}”(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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.c”h´Kûhj¸ˆubjÉ)�”}”(hhh]”jM)�”}”(hŒ*The address_space we want to write protect”h]”hŒ*The address_space we want to write protect”…”�”}”(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Œ;``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:139: ./mm/mapping_dirty_helpers.c”h´Kühjñˆ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´Kühj ‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjñˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j ‰h´Kühjµˆubj©)�”}”(hŒ;``pgoff_t nr`` Number of incremental page offsets to cover ”h]”(j¯)�”}”(hŒ``pgoff_t nr``”h]”jS)�”}”(hj0‰h]”hŒ pgoff_t nr”…”�”}”(hj2‰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:139: ./mm/mapping_dirty_helpers.c”h´Kýhj*‰ubjÉ)�”}”(hhh]”jM)�”}”(hŒ+Number of incremental page offsets to cover”h]”hŒ+Number of incremental page offsets to cover”…”�”}”(hjI‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jE‰h´KýhjF‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj*‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jE‰h´Kýhjµˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj™ˆubjM)�”}”(hŒ**Note**”h]”jŽ)�”}”(hjk‰h]”hŒNote”…”�”}”(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:139: ./mm/mapping_dirty_helpers.c”h´Kÿhj™ˆ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 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.”…”�”}”(hj�‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.c”h´Mhj™ˆubjM)�”}”(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¨‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.c”h´Mhj™ˆubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hj׉h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÓ‰h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.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Œ!clean_record_shared_mapping_range”h]”j)�”}”(hŒ!clean_record_shared_mapping_range”h]”hŒ!clean_record_shared_mapping_range”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŠubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÓ‰h²hh³jå‰h´Mubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj0Šh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj,Šubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=Šh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj,Šubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjNŠh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjKŠubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jPŠŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjŠsbŒ#c.clean_record_shared_mapping_range”†”asbuh1hhj,Šubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnŠh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj,Šubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj|Šh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj,Š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 first_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”jèŒ reftarget”j§ŠŒmodname”NŒ classname”Njìjï)�”}”jò]”jjŠŒ#c.clean_record_shared_mapping_range”†”asbuh1hhjžŠubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjžŠubj)�”}”(hŒ first_index”h]”hŒ first_index”…”�”}”(hjÑŠ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&]”uh1jhjêŠubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jmodname”NŒ classname”Njìjï)�”}”jò]”jjŠŒ#c.clean_record_shared_mapping_range”†”asbuh1hhjæŠ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=hj(Šubj>)�”}”(hŒpgoff_t bitmap_pgoff”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”jèŒ reftarget”j7‹Œmodname”NŒ classname”Njìjï)�”}”jò]”jjŠŒ#c.clean_record_shared_mapping_range”†”asbuh1hhj.‹ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjS‹h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj.‹ubj)�”}”(hŒ bitmap_pgoff”h]”hŒ bitmap_pgoff”…”�”}”(hja‹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj.‹ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj(Šubj>)�”}”(hŒunsigned long *bitmap”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjz‹h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjv‹ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ‹h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjv‹ubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj–‹h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjv‹ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤‹h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjv‹ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj²‹h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjv‹ubj)�”}”(hŒbitmap”h]”hŒbitmap”…”�”}”(hj¿‹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjv‹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”…”�”}”(hjÛ‹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjØ‹ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÝ‹Œmodname”NŒ classname”Njìjï)�”}”jò]”jjŠŒ#c.clean_record_shared_mapping_range”†”asbuh1hhjÔ‹ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjù‹h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÔ‹ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÔ‹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Œ pgoff_t *end”h]”(h)�”}”(hhh]”j)�”}”(hŒpgoff_t”h]”hŒpgoff_t”…”�”}”(hj0Œh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj-Œubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j2ŒŒmodname”NŒ classname”Njìjï)�”}”jò]”jjŠŒ#c.clean_record_shared_mapping_range”†”asbuh1hhj)Œubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNŒh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj)Œubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj\Œh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj)Œubj)�”}”(hŒend”h]”hŒend”…”�”}”(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&]”jjuh1j7hjÓ‰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Œ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:139: ./mm/mapping_dirty_helpers.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²hhjKò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Ž)�”}”(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:139: ./mm/mapping_dirty_helpers.c”h´Mhj¯Œ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)�”}”(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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.c”h´MhjÎŒ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ÈhjÎŒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jéŒh´MhjËŒ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:139: ./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´MhjËŒubj©)�”}”(hŒ;``pgoff_t nr`` Number of incremental page offsets to cover ”h]”(j¯)�”}”(hŒ``pgoff_t nr``”h]”jS)�”}”(hjF�h]”hŒ pgoff_t nr”…”�”}”(hjH�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjD�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./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´MhjËŒ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:139: ./mm/mapping_dirty_helpers.c”h´Mhjy�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”…”�”}”(hj �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Èhjy�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j”�h´MhjËŒ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&]”uh1jRhjÄ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.c”h´MhjÀ�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 ”…”�”}”(hjß�h²hh³Nh´NubjŽ)�”}”(hŒ**nr**”h]”hŒnr”…”�”}”(hjç�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjß�ubhŒ1 bits. The bitmap needs to cover the whole range ”…”�”}”(hjß�h²hh³Nh´NubjŽ)�”}”(hŒ**first_index**”h]”hŒ first_index”…”�”}”(hjù�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjß�ubhŒ..**first_index** + ”…”�”}”(hjß�h²hh³Nh´NubjŽ)�”}”(hŒ**nr**”h]”hŒnr”…”�”}”(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:139: ./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´MhjËŒ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)�”}”(hj6Žh]”hŒpgoff_t *start”…”�”}”(hj8Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj4Žubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.c”h´Mhj0Ž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 ”…”�”}”(hjOŽh²hh³Nh´NubjŽ)�”}”(hŒ **bitmap**”h]”hŒbitmap”…”�”}”(hjWŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjOŽubhŒ2. is modified as new bits are set by the function.”…”�”}”(hjOŽh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.c”h´MhjLŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj0Žubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jKŽh´MhjËŒ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:139: ./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 ”…”�”}”(hj›Žh²hh³Nh´NubjŽ)�”}”(hŒ **bitmap**”h]”hŒbitmap”…”�”}”(hj£Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj›ŽubhŒF. none set. The value 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:139: ./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!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³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.c”h´M#hj¯Œ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:139: ./mm/mapping_dirty_helpers.c”h´M"hj¯Œubj^)�”}”(hhh]”(jc)�”}”(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:139: ./mm/mapping_dirty_helpers.c”h´M&hjøŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjõŽubjc)�”}”(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:139: ./mm/mapping_dirty_helpers.c”h´M(hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjõŽubeh}”(h]”h ]”h"]”h$]”h&]”j‚juuh1j]h³j �h´M&hj¯Œ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.”…”�”}”(hj0�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.c”h´M+hj¯Œ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:139: ./mm/mapping_dirty_helpers.c”h´M1hj¯ŒubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjP�h]”hŒReturn”…”�”}”(hjR�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjN�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.c”h´M6hj¯ŒubjM)�”}”(hŒ*The number of dirty ptes actually cleaned.”h]”hŒ*The number of dirty ptes actually cleaned.”…”�”}”(hjf�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:139: ./mm/mapping_dirty_helpers.c”h´M7hj¯Œubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubjzÕ)�”}”(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&]”jjuh1jyÕhjKò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ÜhjKò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”…”�”}”(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:141: ./mm/percpu.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Œpcpu_addr_in_chunk”h]”j)�”}”(hŒpcpu_addr_in_chunk”h]”hŒpcpu_addr_in_chunk”…”�”}”(hjÃ�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¿�ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjŸ�h²hh³j°�h´KÐubj8)�”}”(hŒ&(struct pcpu_chunk *chunk, void *addr)”h]”(j>)�”}”(hŒstruct pcpu_chunk *chunk”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjß�h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÛ�ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjì�h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÛ�ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jÿ�Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÅ�sbŒc.pcpu_addr_in_chunk”†”asbuh1hhjÛ�ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÛ�ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj+�h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÛ�ubj)�”}”(hŒchunk”h]”hŒchunk”…”�”}”(hj8�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÛ�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj×�ubj>)�”}”(hŒ void *addr”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjQ�h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjM�ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_�h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjM�ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjm�h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjM�ubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjz�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&]”jjuh1j7hjŸ�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Œ.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:141: ./mm/percpu.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²hhjKò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�hjÄ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´KÔ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:141: ./mm/percpu.c”h´KÑ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´KÑhjû�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjß�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jú�h´KÑhjÜ�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:141: ./mm/percpu.c”h´KÒhj‘ubjÉ)�”}”(hhh]”jM)�”}”(hŒpercpu address”h]”hŒpercpu address”…”�”}”(hj7‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j3‘h´KÒhj4‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j3‘h´KÒhjÜ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjÀ�ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjY‘h]”hŒReturn”…”�”}”(hj[‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjW‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´KÔhjÀ�ubjM)�”}”(hŒ.True if the address is served from this chunk.”h]”hŒ.True if the address is served from this chunk.”…”�”}”(hjo‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´KÔhjÀ�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(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:141: ./mm/percpu.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Œpcpu_check_block_hint”h]”j)�”}”(hŒpcpu_check_block_hint”h]”hŒpcpu_check_block_hint”…”�”}”(hj¾‘h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjº‘ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjš‘h²hh³j«‘h´M4ubj8)�”}”(hŒ5(struct pcpu_block_md *block, int bits, size_t align)”h]”(j>)�”}”(hŒstruct pcpu_block_md *block”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÚ‘h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÖ‘ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç‘h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÖ‘ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jú‘Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÀ‘sbŒc.pcpu_check_block_hint”†”asbuh1hhjÖ‘ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÖ‘ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj&’h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÖ‘ubj)�”}”(hŒblock”h]”hŒblock”…”�”}”(hj3’h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÖ‘ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÒ‘ubj>)�”}”(hŒint bits”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjL’h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjH’ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZ’h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjH’ubj)�”}”(hŒbits”h]”hŒbits”…”�”}”(hjh’h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjH’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÒ‘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”jèŒ reftarget”j†’Œmodname”NŒ classname”Njìjï)�”}”jò]”j’Œc.pcpu_check_block_hint”†”asbuh1hhj}’ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢’h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj}’ubj)�”}”(hŒalign”h]”hŒalign”…”�”}”(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&]”jjuh1j7hjš‘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Œcheck against the contig hint”h]”hŒcheck against the contig hint”…”�”}”(hjÚ’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.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²hhjKò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:141: ./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:141: ./mm/percpu.c”h´M5hj“ubjÉ)�”}”(hhh]”jM)�”}”(hŒblock of interest”h]”hŒblock of interest”…”�”}”(hj4“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j0“h´M5hj1“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j0“h´M5hj“ubj©)�”}”(hŒ ``int bits`` size of allocation ”h]”(j¯)�”}”(hŒ ``int bits``”h]”jS)�”}”(hjT“h]”hŒint bits”…”�”}”(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:141: ./mm/percpu.c”h´M6hjN“ubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of allocation”h]”hŒsize of allocation”…”�”}”(hjm“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ji“h´M6hjj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjN“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³ji“h´M6hj“ubj©)�”}”(hŒ3``size_t align`` alignment of area (max PAGE_SIZE) ”h]”(j¯)�”}”(hŒ``size_t align``”h]”jS)�”}”(hj�“h]”hŒ size_t 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:141: ./mm/percpu.c”h´M7hj‡“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´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:141: ./mm/percpu.c”h´M9hjö’ubjM)�”}”(hŒ§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]”hŒ«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.”…”�”}”(hjÞ“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M8hjö’ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%pcpu_next_md_free_region (C function)”Œc.pcpu_next_md_free_region”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒQvoid pcpu_next_md_free_region (struct pcpu_chunk *chunk, int *bit_off, int *bits)”h]”hù)�”}”(hŒPvoid pcpu_next_md_free_region(struct pcpu_chunk *chunk, int *bit_off, int *bits)”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:141: ./mm/percpu.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Œpcpu_next_md_free_region”h]”j)�”}”(hŒpcpu_next_md_free_region”h]”hŒpcpu_next_md_free_region”…”�”}”(hj.”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj*”ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj ”h²hh³j”h´Mcubj8)�”}”(hŒ3(struct pcpu_chunk *chunk, int *bit_off, int *bits)”h]”(j>)�”}”(hŒstruct pcpu_chunk *chunk”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjJ”h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjF”ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW”h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjF”ubh)�”}”(hhh]”j)�”}”(hŒ pcpu_chunk”h]”hŒ pcpu_chunk”…”�”}”(hjh”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhje”ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jj”Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj0”sbŒc.pcpu_next_md_free_region”†”asbuh1hhjF”ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ”h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjF”ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj–”h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjF”ubj)�”}”(hŒchunk”h]”hŒchunk”…”�”}”(hj£”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjF”ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjB”ubj>)�”}”(hŒ int *bit_off”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¸”ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjØ”h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¸”ubj)�”}”(hŒbit_off”h]”hŒbit_off”…”�”}”(hjå”h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¸”ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjB”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ú”ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjú”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=hjB”ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj ”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Œfinds the next hint free area”h]”hŒfinds the next hint free area”…”�”}”(hjQ•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´MchjN•h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj”h²hh³j”h´Mcubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGji•jHji•jI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hXg**Parameters** ``struct pcpu_chunk *chunk`` chunk of interest ``int *bit_off`` chunk offset ``int *bits`` size of free area **Description** 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]”(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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´Mghjm•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:141: ./mm/percpu.c”h´MdhjŒ•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´Mdhj¨•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjŒ•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j§•h´Mdhj‰•ubj©)�”}”(hŒ``int *bit_off`` chunk offset ”h]”(j¯)�”}”(hŒ``int *bit_off``”h]”jS)�”}”(hjË•h]”hŒ int *bit_off”…”�”}”(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:141: ./mm/percpu.c”h´MehjÅ•ubjÉ)�”}”(hhh]”jM)�”}”(hŒ chunk offset”h]”hŒ chunk offset”…”�”}”(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‰•ubj©)�”}”(hŒ ``int *bits`` size of free area ”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:141: ./mm/percpu.c”h´Mfhjþ•ubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of free area”h]”hŒsize of free area”…”�”}”(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‰•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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´Mhhjm•ubjM)�”}”(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.”…”�”}”(hjU–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´Mghjm•ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(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:141: ./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_next_fit_region”h]”j)�”}”(hŒpcpu_next_fit_region”h]”hŒpcpu_next_fit_region”…”�”}”(hj¥–h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¡–ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj€–h²hh³j’–h´M—ubj8)�”}”(hŒN(struct pcpu_chunk *chunk, int alloc_bits, int align, int *bit_off, int *bits)”h]”(j>)�”}”(hŒstruct pcpu_chunk *chunk”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÁ–h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj½–ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjΖh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj½–ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”já–Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj§–sbŒc.pcpu_next_fit_region”†”asbuh1hhj½–ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ–h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj½–ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj —h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj½–ubj)�”}”(hŒchunk”h]”hŒchunk”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj½–ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¹–ubj>)�”}”(hŒint alloc_bits”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Œ alloc_bits”h]”hŒ alloc_bits”…”�”}”(hjO—h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj/—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¹–ubj>)�”}”(hŒ int align”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(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Œalign”h]”hŒalign”…”�”}”(hj„—h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjd—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¹–ubj>)�”}”(hŒ int *bit_off”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™—ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¹—h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj™—ubj)�”}”(hŒbit_off”h]”hŒbit_off”…”�”}”(hjÆ—h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¹–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Û—ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjû—h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÛ—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=hj¹–ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj€–h²hh³j’–h´M—ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj|–h²hh³j’–h´M—ubah}”(h]”jw–ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j’–h´M—hjy–h²hubj4)�”}”(hhh]”jM)�”}”(hŒ.finds fit areas for a given allocation request”h]”hŒ.finds fit areas for a given allocation request”…”�”}”(hj2˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M—hj/˜h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjy–h²hh³j’–h´M—ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjJ˜jHjJ˜jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(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:141: ./mm/percpu.c”h´M›hjN˜ubj¤)�”}”(hhh]”(j©)�”}”(hŒ/``struct pcpu_chunk *chunk`` chunk of interest ”h]”(j¯)�”}”(hŒ``struct pcpu_chunk *chunk``”h]”jS)�”}”(hjs˜h]”hŒstruct pcpu_chunk *chunk”…”�”}”(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:141: ./mm/percpu.c”h´M˜hjm˜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Èhjm˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jˆ˜h´M˜hjj˜ubj©)�”}”(hŒ&``int alloc_bits`` size of allocation ”h]”(j¯)�”}”(hŒ``int alloc_bits``”h]”jS)�”}”(hj¬˜h]”hŒint alloc_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:141: ./mm/percpu.c”h´M™hj¦˜ubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of allocation”h]”hŒsize of 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™hjj˜ubj©)�”}”(hŒ0``int align`` alignment of area (max PAGE_SIZE) ”h]”(j¯)�”}”(hŒ ``int align``”h]”jS)�”}”(hjå˜h]”hŒ int 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:141: ./mm/percpu.c”h´Mšhjߘ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Èhjߘubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jú˜h´Mšhjj˜ubj©)�”}”(hŒ``int *bit_off`` chunk offset ”h]”(j¯)�”}”(hŒ``int *bit_off``”h]”jS)�”}”(hj™h]”hŒ int *bit_off”…”�”}”(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:141: ./mm/percpu.c”h´M›hj™ubjÉ)�”}”(hhh]”jM)�”}”(hŒ chunk offset”h]”hŒ chunk offset”…”�”}”(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›hjj˜ubj©)�”}”(hŒ ``int *bits`` size of free area ”h]”(j¯)�”}”(hŒ ``int *bits``”h]”jS)�”}”(hjW™h]”hŒ int *bits”…”�”}”(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:141: ./mm/percpu.c”h´MœhjQ™ubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of free area”h]”hŒsize of free area”…”�”}”(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œ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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´MžhjN˜ubjM)�”}”(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.”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¨™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M�hjN˜ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpcpu_mem_zalloc (C function)”Œc.pcpu_mem_zalloc”hNt”auh1hÜhjKò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”…”�”}”(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:141: ./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ìubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjô™h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÓ™h²hh³jå™h´Mìubhÿ)�”}”(hŒpcpu_mem_zalloc”h]”j)�”}”(hŒpcpu_mem_zalloc”h]”hŒpcpu_mem_zalloc”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjšubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÓ™h²hh³jå™h´Mìubj8)�”}”(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$šh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj!šubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j&šŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjšsbŒc.pcpu_mem_zalloc”†”asbuh1hhjšubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDšh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjšubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjRš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”…”�”}”(hjnšh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjkšubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jpšŒmodname”NŒ classname”Njìjï)�”}”jò]”j@šŒc.pcpu_mem_zalloc”†”asbuh1hhjgšubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒšh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjgšubj)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(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&]”jjuh1j7hjÓ™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”h]”hŒallocate memory”…”�”}”(hjÄšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./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²hhjKò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æš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:141: ./mm/percpu.c”h´Mðhjàšubj¤)�”}”(hhh]”(j©)�”}”(hŒ"``size_t size`` 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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´MíhjÿšubjÉ)�”}”(hhh]”jM)�”}”(hŒbytes to allocate”h]”hŒ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Œ``gfp_t gfp`` allocation 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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´Mîhj8›ubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation flags”h]”hŒallocation flags”…”�”}”(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î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:141: ./mm/percpu.c”h´MðhjàšubjM)�”}”(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�›h²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj—›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�›ubhŒ bytes. If ”…”�”}”(hj�›h²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj©›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj�›ubhŒ¾ is 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�›h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.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:141: ./mm/percpu.c”h´MôhjàšubjM)�”}”(hŒ:Pointer to the allocated area on success, NULL on failure.”h]”hŒ:Pointer to the allocated area 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:141: ./mm/percpu.c”h´Mõhjàšubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpcpu_mem_free (C function)”Œc.pcpu_mem_free”hNt”auh1hÜhjKò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 œ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:141: ./mm/percpu.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Œ pcpu_mem_free”h]”j)�”}”(hŒ pcpu_mem_free”h]”hŒ pcpu_mem_free”…”�”}”(hj*œh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj&œubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjœh²hh³jœh´Mubj8)�”}”(hŒ (void *ptr)”h]”j>)�”}”(hŒ void *ptr”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjFœh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjBœubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTœh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjBœubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjbœh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjBœubj)�”}”(hŒptr”h]”hŒptr”…”�”}”(hjoœh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjBœubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj>œubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjœ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Œ free memory”h]”hŒ free memory”…”�”}”(hj™œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.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²hhjKò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Ž)�”}”(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:141: ./mm/percpu.c”h´Mhjµœubj¤)�”}”(hhh]”j©)�”}”(hŒ``void *ptr`` memory to free ”h]”(j¯)�”}”(hŒ ``void *ptr``”h]”jS)�”}”(hjÚœh]”hŒ void *ptr”…”�”}”(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:141: ./mm/percpu.c”h´MhjÔœubjÉ)�”}”(hhh]”jM)�”}”(hŒmemory to free”h]”hŒmemory to free”…”�”}”(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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´MhjµœubjM)�”}”(hŒJFree **ptr**. **ptr** should have been allocated using pcpu_mem_zalloc().”h]”(hŒFree ”…”�”}”(hj+�h²hh³Nh´NubjŽ)�”}”(hŒ**ptr**”h]”hŒptr”…”�”}”(hj3�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj+�ubhŒ. ”…”�”}”(hj+�h²hh³Nh´NubjŽ)�”}”(hŒ**ptr**”h]”hŒptr”…”�”}”(hjE�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj+�ubhŒ4 should have been allocated using pcpu_mem_zalloc().”…”�”}”(hj+�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´Mhjµœubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ pcpu_chunk_relocate (C function)”Œc.pcpu_chunk_relocate”hNt”auh1hÜhjKò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”…”�”}”(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:141: ./mm/percpu.c”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjz�h²hh³jŒ�h´Mubhÿ)�”}”(hŒpcpu_chunk_relocate”h]”j)�”}”(hŒpcpu_chunk_relocate”h]”hŒpcpu_chunk_relocate”…”�”}”(hjŸ�h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj›�ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjz�h²hh³jŒ�h´Mubj8)�”}”(hŒ%(struct pcpu_chunk *chunk, int oslot)”h]”(j>)�”}”(hŒstruct pcpu_chunk *chunk”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj»�h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj·�ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈ�h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj·�ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jÛ�Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj¡�sbŒc.pcpu_chunk_relocate”†”asbuh1hhj·�ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjù�h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj·�ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj·�ubj)�”}”(hŒchunk”h]”hŒchunk”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj·�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj³�ubj>)�”}”(hŒ int oslot”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Œoslot”h]”hŒoslot”…”�”}”(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&]”jjuh1j7hjz�h²hh³jŒ�h´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjv�h²hh³jŒ�h´Mubah}”(h]”jq�ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jŒ�h´Mhjs�h²hubj4)�”}”(hhh]”jM)�”}”(hŒ'put chunk in the appropriate chunk slot”h]”hŒ'put chunk in the appropriate chunk slot”…”�”}”(hjsžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´Mhjpžh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjs�h²hh³jŒ�h´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj‹žjHj‹žjI‰jJ‰jK‰uh1híh²hhjKò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•ž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:141: ./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:141: ./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Œ*``int oslot`` the previous slot it was on ”h]”(j¯)�”}”(hŒ ``int oslot``”h]”jS)�”}”(hjížh]”hŒ int oslot”…”�”}”(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:141: ./mm/percpu.c”h´M!hjçžubjÉ)�”}”(hhh]”jM)�”}”(hŒthe previous slot it was on”h]”hŒthe previous slot it was 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:141: ./mm/percpu.c”h´M#hj�žubjM)�”}”(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ŒŸh²hh³Nh´NubjŽ)�”}”(hŒ **chunk**”h]”hŒchunk”…”�”}”(hjFŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj>ŸubhŒ<. New slot according to the changed state is determined and ”…”�”}”(hj>Ÿh²hh³Nh´NubjŽ)�”}”(hŒ **chunk**”h]”hŒchunk”…”�”}”(hjXŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj>ŸubhŒQ is moved to the slot. Note that the reserved chunk is never put on chunk slots.”…”�”}”(hj>Ÿh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M"hj�žubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjsŸh]”hŒContext”…”�”}”(hjuŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjqŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M'hj�žubjM)�”}”(hŒ pcpu_lock.”h]”hŒ pcpu_lock.”…”�”}”(hj‰Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M(hj�žubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpcpu_block_update (C function)”Œc.pcpu_block_update”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒHvoid pcpu_block_update (struct pcpu_block_md *block, int start, int end)”h]”hù)�”}”(hŒGvoid pcpu_block_update(struct pcpu_block_md *block, int start, int end)”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:141: ./mm/percpu.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Œpcpu_block_update”h]”j)�”}”(hŒpcpu_block_update”h]”hŒpcpu_block_update”…”�”}”(hjÙŸh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕŸubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj´Ÿh²hh³jÆŸh´Mmubj8)�”}”(hŒ1(struct pcpu_block_md *block, int start, int end)”h]”(j>)�”}”(hŒstruct pcpu_block_md *block”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjõŸh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjñŸubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjñŸubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÛŸsbŒc.pcpu_block_update”†”asbuh1hhjñŸubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3 h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjñŸubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjñŸubj)�”}”(hŒblock”h]”hŒblock”…”�”}”(hjN h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñŸubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjíŸubj>)�”}”(hŒ int start”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(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Œstart”h]”hŒstart”…”�”}”(hjƒ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjc ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjíŸubj>)�”}”(hŒint end”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Œ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&]”jjuh1j7hj´Ÿ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Œ!updates a block given a free area”h]”hŒ!updates a block given a free area”…”�”}”(hjâ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.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²hhjKòh³Nh´Nubj„)�”}”(hXb**Parameters** ``struct pcpu_block_md *block`` block of interest ``int start`` start offset in block ``int end`` end offset in block **Description** Updates a block given a known free area. The region [start, end) is expected to be the entirety of the free area within a block. Chooses the best starting offset if the contig hints are equal.”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:141: ./mm/percpu.c”h´Mqhjþ 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:141: ./mm/percpu.c”h´Mnhj¡ubjÉ)�”}”(hhh]”jM)�”}”(hŒblock of interest”h]”hŒblock of interest”…”�”}”(hj<¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j8¡h´Mnhj9¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j8¡h´Mnhj¡ubj©)�”}”(hŒ$``int start`` start offset in block ”h]”(j¯)�”}”(hŒ ``int start``”h]”jS)�”}”(hj\¡h]”hŒ int start”…”�”}”(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:141: ./mm/percpu.c”h´MohjV¡ubjÉ)�”}”(hhh]”jM)�”}”(hŒstart offset in block”h]”hŒstart offset in block”…”�”}”(hju¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jq¡h´Mohjr¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjV¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jq¡h´Mohj¡ubj©)�”}”(hŒ ``int end`` end offset in block ”h]”(j¯)�”}”(hŒ ``int end``”h]”jS)�”}”(hj•¡h]”hŒint 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:141: ./mm/percpu.c”h´Mphj�¡ubjÉ)�”}”(hhh]”jM)�”}”(hŒend offset in block”h]”hŒend offset in block”…”�”}”(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¡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:141: ./mm/percpu.c”h´Mrhjþ ubjM)�”}”(hŒÂUpdates a block given a known free area. The region [start, end) is expected to be the entirety of the free area within a block. Chooses the best starting offset if the contig hints are equal.”h]”hŒÂUpdates a block given a known free area. The region [start, end) is expected to be the entirety of the free area within a block. Chooses the best starting offset if the contig hints are equal.”…”�”}”(hjæ¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´Mqhjþ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$pcpu_chunk_refresh_hint (C function)”Œc.pcpu_chunk_refresh_hint”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒGvoid pcpu_chunk_refresh_hint (struct pcpu_chunk *chunk, bool full_scan)”h]”hù)�”}”(hŒFvoid pcpu_chunk_refresh_hint(struct pcpu_chunk *chunk, bool full_scan)”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:141: ./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_chunk_refresh_hint”h]”j)�”}”(hŒpcpu_chunk_refresh_hint”h]”hŒpcpu_chunk_refresh_hint”…”�”}”(hj6¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2¢ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¢h²hh³j#¢h´MÞubj8)�”}”(hŒ*(struct pcpu_chunk *chunk, bool full_scan)”h]”(j>)�”}”(hŒstruct pcpu_chunk *chunk”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjR¢h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjN¢ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_¢h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjN¢ubh)�”}”(hhh]”j)�”}”(hŒ pcpu_chunk”h]”hŒ pcpu_chunk”…”�”}”(hjp¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjm¢ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jr¢Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj8¢sbŒc.pcpu_chunk_refresh_hint”†”asbuh1hhjN¢ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�¢h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjN¢ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjž¢h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjN¢ubj)�”}”(hŒchunk”h]”hŒchunk”…”�”}”(hj«¢h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjN¢ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjJ¢ubj>)�”}”(hŒbool full_scan”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Œ full_scan”h]”hŒ full_scan”…”�”}”(hjߢh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÀ¢ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjJ¢ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj¢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Œupdates metadata about a chunk”h]”hŒupdates metadata about a chunk”…”�”}”(hj £h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./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²hhjKòh³Nh´Nubj„)�”}”(hXü**Parameters** ``struct pcpu_chunk *chunk`` chunk of interest ``bool full_scan`` if we should scan from the beginning **Description** Iterates over the metadata blocks to find the largest contig area. A full scan can be avoided on the allocation path as this is triggered if we broke the contig_hint. In doing so, the scan_hint will be before the contig_hint or after if the scan_hint == contig_hint. This cannot be prevented on freeing as we want to find the largest area possibly spanning blocks.”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:141: ./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)�”}”(hjJ£h]”hŒstruct pcpu_chunk *chunk”…”�”}”(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:141: ./mm/percpu.c”h´MßhjD£ubjÉ)�”}”(hhh]”jM)�”}”(hŒchunk of interest”h]”hŒchunk of interest”…”�”}”(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Œ8``bool full_scan`` if we should scan from the beginning ”h]”(j¯)�”}”(hŒ``bool full_scan``”h]”jS)�”}”(hjƒ£h]”hŒbool full_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:141: ./mm/percpu.c”h´Màhj}£ubjÉ)�”}”(hhh]”jM)�”}”(hŒ$if we should scan from the beginning”h]”hŒ$if we should scan from the beginning”…”�”}”(hjœ£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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Ž)�”}”(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:141: ./mm/percpu.c”h´Mâhj%£ubjM)�”}”(hXnIterates over the metadata blocks to find the largest contig area. A full scan can be avoided on the allocation path as this is triggered if we broke the contig_hint. In doing so, the scan_hint will be before the contig_hint or after if the scan_hint == contig_hint. This cannot be prevented on freeing as we want to find the largest area possibly spanning blocks.”h]”hXnIterates over the metadata blocks to find the largest contig area. A full scan can be avoided on the allocation path as this is triggered if we broke the contig_hint. In doing so, the scan_hint will be before the contig_hint or after if the scan_hint == contig_hint. This cannot be prevented on freeing as we want to find the largest area possibly spanning blocks.”…”�”}”(hjÔ£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´Máhj%£ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ$pcpu_block_refresh_hint (C function)”Œc.pcpu_block_refresh_hint”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒBvoid pcpu_block_refresh_hint (struct pcpu_chunk *chunk, int index)”h]”hù)�”}”(hŒAvoid pcpu_block_refresh_hint(struct pcpu_chunk *chunk, int index)”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:141: ./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_block_refresh_hint”h]”j)�”}”(hŒpcpu_block_refresh_hint”h]”hŒpcpu_block_refresh_hint”…”�”}”(hj$¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ¤ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÿ£h²hh³j¤h´Mþubj8)�”}”(hŒ%(struct pcpu_chunk *chunk, int index)”h]”(j>)�”}”(hŒstruct pcpu_chunk *chunk”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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<¤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”jèŒ reftarget”j`¤Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj&¤sbŒc.pcpu_block_refresh_hint”†”asbuh1hhj<¤ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~¤h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj<¤ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjŒ¤h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj<¤ubj)�”}”(hŒchunk”h]”hŒchunk”…”�”}”(hj™¤h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj<¤ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj8¤ubj>)�”}”(hŒ int index”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Œindex”h]”hŒindex”…”�”}”(hjΤh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj®¤ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj8¤ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÿ£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²hhjKòh³Nh´Nubj„)�”}”(hŒØ**Parameters** ``struct pcpu_chunk *chunk`` chunk of interest ``int index`` index of the metadata block **Description** Scans over the block beginning at first_free and updates the block metadata 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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´Mhj¥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:141: ./mm/percpu.c”h´Mÿhj$¥ubjÉ)�”}”(hhh]”jM)�”}”(hŒchunk of interest”h]”hŒchunk of interest”…”�”}”(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!¥ubj©)�”}”(hŒ*``int index`` index of the metadata block ”h]”(j¯)�”}”(hŒ ``int index``”h]”jS)�”}”(hjc¥h]”hŒ int index”…”�”}”(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:141: ./mm/percpu.c”h´Mhj]¥ubjÉ)�”}”(hhh]”jM)�”}”(hŒindex of the metadata block”h]”hŒindex of the metadata block”…”�”}”(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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´Mhj¥ubjM)�”}”(hŒXScans over the block beginning at first_free and updates the block metadata accordingly.”h]”hŒXScans over the block beginning at first_free and updates the block metadata accordingly.”…”�”}”(hj´¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´Mhj¥ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ)pcpu_block_update_hint_alloc (C function)”Œc.pcpu_block_update_hint_alloc”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒSvoid pcpu_block_update_hint_alloc (struct pcpu_chunk *chunk, int bit_off, int bits)”h]”hù)�”}”(hŒRvoid pcpu_block_update_hint_alloc(struct pcpu_chunk *chunk, int bit_off, int bits)”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:141: ./mm/percpu.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Œpcpu_block_update_hint_alloc”h]”j)�”}”(hŒpcpu_block_update_hint_alloc”h]”hŒpcpu_block_update_hint_alloc”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjߥh²hh³jñ¥h´Mubj8)�”}”(hŒ1(struct pcpu_chunk *chunk, int bit_off, int bits)”h]”(j>)�”}”(hŒstruct pcpu_chunk *chunk”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj ¦h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¦ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-¦h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¦ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j@¦Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj¦sbŒc.pcpu_block_update_hint_alloc”†”asbuh1hhj¦ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^¦h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¦ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjl¦h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¦ubj)�”}”(hŒchunk”h]”hŒchunk”…”�”}”(hjy¦h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¦ubj>)�”}”(hŒ int bit_off”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Œbit_off”h]”hŒbit_off”…”�”}”(hj®¦h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjަubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¦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=hj¦ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjߥ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Œupdate hint on allocation path”h]”hŒupdate hint on allocation path”…”�”}”(hj §h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.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²hhjKòh³Nh´Nubj„)�”}”(hX_**Parameters** ``struct pcpu_chunk *chunk`` chunk of interest ``int bit_off`` chunk offset ``int bits`` size of request **Description** Updates metadata for the allocation path. The metadata only has to be refreshed by a full scan iff the chunk's contig hint is broken. Block level scans are required if the block's contig hint is broken.”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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./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)�”}”(hjN§h]”hŒstruct pcpu_chunk *chunk”…”�”}”(hjP§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjL§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´MhjH§ubjÉ)�”}”(hhh]”jM)�”}”(hŒchunk of interest”h]”hŒchunk of interest”…”�”}”(hjg§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jc§h´Mhjd§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjH§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jc§h´MhjE§ubj©)�”}”(hŒ``int bit_off`` chunk offset ”h]”(j¯)�”}”(hŒ``int bit_off``”h]”jS)�”}”(hj‡§h]”hŒ int bit_off”…”�”}”(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:141: ./mm/percpu.c”h´M hj�§ubjÉ)�”}”(hhh]”jM)�”}”(hŒ chunk offset”h]”hŒ chunk offset”…”�”}”(hj §h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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Œ``int bits`` size of request ”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:141: ./mm/percpu.c”h´M!hjº§ubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of request”h]”hŒsize of request”…”�”}”(hjÙ§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M#hj)§ubjM)�”}”(hŒÌUpdates metadata for the allocation path. The metadata only has to be refreshed by a full scan iff the chunk's contig hint is broken. Block level scans are required if the block's contig hint is broken.”h]”hŒÐUpdates metadata for the allocation path. The metadata only has to be refreshed by a full scan iff the chunk’s contig hint is broken. Block level scans are required if the block’s contig hint is broken.”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M"hj)§ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ(pcpu_block_update_hint_free (C function)”Œc.pcpu_block_update_hint_free”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒRvoid pcpu_block_update_hint_free (struct pcpu_chunk *chunk, int bit_off, int bits)”h]”hù)�”}”(hŒQvoid pcpu_block_update_hint_free(struct pcpu_chunk *chunk, int bit_off, int bits)”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:141: ./mm/percpu.c”h´M±ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjO¨h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj<¨h²hh³jN¨h´M±ubhÿ)�”}”(hŒpcpu_block_update_hint_free”h]”j)�”}”(hŒpcpu_block_update_hint_free”h]”hŒpcpu_block_update_hint_free”…”�”}”(hja¨h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj]¨ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj<¨h²hh³jN¨h´M±ubj8)�”}”(hŒ1(struct pcpu_chunk *chunk, int bit_off, int bits)”h]”(j>)�”}”(hŒstruct pcpu_chunk *chunk”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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¨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”jèŒ reftarget”j�¨Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjc¨sbŒc.pcpu_block_update_hint_free”†”asbuh1hhjy¨ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»¨h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjy¨ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjɨh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjy¨ubj)�”}”(hŒchunk”h]”hŒchunk”…”�”}”(hjÖ¨h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjy¨ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hju¨ubj>)�”}”(hŒ int bit_off”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Œbit_off”h]”hŒbit_off”…”�”}”(hj ©h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjë¨ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hju¨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Œ ”…”�”}”(hj2©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=hju¨ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj<¨h²hh³jN¨h´M±ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj8¨h²hh³jN¨h´M±ubah}”(h]”j3¨ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jN¨h´M±hj5¨h²hubj4)�”}”(hhh]”jM)�”}”(hŒ(updates the block hints on the free path”h]”hŒ(updates the block hints on the free path”…”�”}”(hjj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M±hjg©h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj5¨h²hh³jN¨h´M±ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj‚©jHj‚©jI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hX**Parameters** ``struct pcpu_chunk *chunk`` chunk of interest ``int bit_off`` chunk offset ``int bits`` size of request **Description** 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. A 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]”(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:141: ./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:141: ./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Œ``int bit_off`` chunk offset ”h]”(j¯)�”}”(hŒ``int bit_off``”h]”jS)�”}”(hjä©h]”hŒ int bit_off”…”�”}”(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:141: ./mm/percpu.c”h´M³hjÞ©ubjÉ)�”}”(hhh]”jM)�”}”(hŒ chunk offset”h]”hŒ chunk offset”…”�”}”(hjý©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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 bits`` size of request ”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:141: ./mm/percpu.c”h´M´hjªubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of request”h]”hŒsize of request”…”�”}”(hj6ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j2ªh´M´hj3ªubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjªubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j2ªh´M´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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M¶hj†©ubjM)�”}”(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.”…”�”}”(hjnªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´Mµhj†©ubjM)�”}”(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.”…”�”}”(hj}ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´Mºhj†©ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpcpu_is_populated (C function)”Œc.pcpu_is_populated”hNt”auh1hÜhjKò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”…”�”}”(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:141: ./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_is_populated”h]”j)�”}”(hŒpcpu_is_populated”h]”hŒpcpu_is_populated”…”�”}”(hj̪h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjȪubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¨ªh²hh³j¹ªh´M$ubj8)�”}”(hŒ@(struct pcpu_chunk *chunk, int bit_off, int bits, int *next_off)”h]”(j>)�”}”(hŒstruct pcpu_chunk *chunk”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjèªh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjäªubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõªh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjäªubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j«Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjΪsbŒc.pcpu_is_populated”†”asbuh1hhjäªubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&«h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjäªubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj4«h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjäªubj)�”}”(hŒchunk”h]”hŒchunk”…”�”}”(hjA«h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjäªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjàªubj>)�”}”(hŒ int bit_off”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjZ«h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjV«ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh«h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjV«ubj)�”}”(hŒbit_off”h]”hŒbit_off”…”�”}”(hjv«h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjV«ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjàª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=hjàªubj>)�”}”(hŒ int *next_off”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À«ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjà«h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÀ«ubj)�”}”(hŒnext_off”h]”hŒnext_off”…”�”}”(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&]”jjuh1j7hj¨ª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Œ%determines if the region is populated”h]”hŒ%determines if the region is populated”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./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²hhjKò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Ž)�”}”(hj9¬h]”hŒ Parameters”…”�”}”(hj;¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj7¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M(hj3¬ubj¤)�”}”(hhh]”(j©)�”}”(hŒ/``struct pcpu_chunk *chunk`` chunk of interest ”h]”(j¯)�”}”(hŒ``struct pcpu_chunk *chunk``”h]”jS)�”}”(hjX¬h]”hŒstruct pcpu_chunk *chunk”…”�”}”(h•jZ¬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:141: ./mm/percpu.c”h´M%hjR¬ubjÉ)�”}”(hhh]”jM)�”}”(hŒchunk of interest”h]”hŒchunk of interest”…”�”}”(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%hjO¬ubj©)�”}”(hŒ``int bit_off`` chunk offset ”h]”(j¯)�”}”(hŒ``int bit_off``”h]”jS)�”}”(hj‘¬h]”hŒ int bit_off”…”�”}”(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:141: ./mm/percpu.c”h´M&hj‹¬ubjÉ)�”}”(hhh]”jM)�”}”(hŒ chunk offset”h]”hŒ chunk offset”…”�”}”(hjª¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¦¬h´M&hj§¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj‹¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¦¬h´M&hjO¬ubj©)�”}”(hŒ``int bits`` size of area ”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:141: ./mm/percpu.c”h´M'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´M'hjà¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjĬubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j߬h´M'hjO¬ubj©)�”}”(hŒF``int *next_off`` return value for the next offset to start searching ”h]”(j¯)�”}”(hŒ``int *next_off``”h]”jS)�”}”(hj­h]”hŒ int *next_off”…”�”}”(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:141: ./mm/percpu.c”h´M(hjý¬ubjÉ)�”}”(hhh]”jM)�”}”(hŒ3return value for the next offset to start searching”h]”hŒ3return value for the next offset 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(hjO¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj3¬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:141: ./mm/percpu.c”h´M*hj3¬ubjM)�”}”(hŒAFor atomic allocations, check if the backing pages are populated.”h]”hŒAFor atomic allocations, check if the backing pages are populated.”…”�”}”(hjT­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M)hj3¬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:141: ./mm/percpu.c”h´M+hj3¬ubjM)�”}”(hŒnBool if the backing pages are populated. next_index is to skip over unpopulated blocks in pcpu_find_block_fit.”h]”hŒnBool if the backing pages are populated. next_index is to skip over unpopulated blocks in pcpu_find_block_fit.”…”�”}”(hj{­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M,hj3¬ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ pcpu_find_block_fit (C function)”Œc.pcpu_find_block_fit”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ_int pcpu_find_block_fit (struct pcpu_chunk *chunk, int alloc_bits, size_t align, bool pop_only)”h]”hù)�”}”(hŒ^int pcpu_find_block_fit(struct pcpu_chunk *chunk, int alloc_bits, size_t align, bool pop_only)”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:141: ./mm/percpu.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Œpcpu_find_block_fit”h]”j)�”}”(hŒpcpu_find_block_fit”h]”hŒpcpu_find_block_fit”…”�”}”(hjË­h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÇ­ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¦­h²hh³j¸­h´MCubj8)�”}”(hŒG(struct pcpu_chunk *chunk, int alloc_bits, size_t align, bool pop_only)”h]”(j>)�”}”(hŒstruct pcpu_chunk *chunk”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjç­h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjã­ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjô­h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjã­ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j®Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÍ­sbŒc.pcpu_find_block_fit”†”asbuh1hhjã­ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%®h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjã­ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj3®h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjã­ubj)�”}”(hŒchunk”h]”hŒchunk”…”�”}”(hj@®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjã­ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjß­ubj>)�”}”(hŒint alloc_bits”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjY®h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjU®ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjg®h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjU®ubj)�”}”(hŒ alloc_bits”h]”hŒ alloc_bits”…”�”}”(hju®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjU®ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjß­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”jèŒ reftarget”j“®Œmodname”NŒ classname”Njìjï)�”}”jò]”j!®Œc.pcpu_find_block_fit”†”asbuh1hhjŠ®ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯®h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjŠ®ubj)�”}”(hŒalign”h]”hŒalign”…”�”}”(hj½®h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŠ®ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjß­ubj>)�”}”(hŒ bool pop_only”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Œpop_only”h]”hŒpop_only”…”�”}”(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&]”jjuh1j7hj¦­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Œ(finds the block index to start searching”h]”hŒ(finds the block index to start searching”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´MChj¯h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjŸ­h²hh³j¸­h´MCubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj3¯jHj3¯jI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hX0**Parameters** ``struct pcpu_chunk *chunk`` chunk of interest ``int alloc_bits`` size of request in allocation units ``size_t align`` alignment of area (max PAGE_SIZE bytes) ``bool pop_only`` use populated regions only **Description** Given a chunk and an allocation spec, find the offset to begin searching for a free region. This iterates over the bitmap metadata blocks to find an offset that will be guaranteed to fit the requirements. It is not quite first fit as if the allocation does not fit in the contig hint of a block or chunk, it is skipped. This errs on the side of caution to prevent excess iteration. Poor alignment can cause the allocator to skip over blocks and chunks that have valid free areas. **Return** The offset in the bitmap to begin searching. -1 if no offset 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:141: ./mm/percpu.c”h´MGhj7¯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&]”uh1jRhjZ¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´MDhjV¯ubjÉ)�”}”(hhh]”jM)�”}”(hŒchunk of interest”h]”hŒchunk of interest”…”�”}”(hju¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jq¯h´MDhjr¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjV¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jq¯h´MDhjS¯ubj©)�”}”(hŒ7``int alloc_bits`` size of request in allocation units ”h]”(j¯)�”}”(hŒ``int alloc_bits``”h]”jS)�”}”(hj•¯h]”hŒint alloc_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:141: ./mm/percpu.c”h´MEhj�¯ubjÉ)�”}”(hhh]”jM)�”}”(hŒ#size of request in allocation units”h]”hŒ#size of request in allocation units”…”�”}”(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´MEhjS¯ubj©)�”}”(hŒ9``size_t align`` alignment of area (max PAGE_SIZE bytes) ”h]”(j¯)�”}”(hŒ``size_t align``”h]”jS)�”}”(hjίh]”hŒ size_t 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:141: ./mm/percpu.c”h´MFhjȯubjÉ)�”}”(hhh]”jM)�”}”(hŒ'alignment of area (max PAGE_SIZE bytes)”h]”hŒ'alignment of area (max PAGE_SIZE bytes)”…”�”}”(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´MFhjS¯ubj©)�”}”(hŒ-``bool pop_only`` use populated regions only ”h]”(j¯)�”}”(hŒ``bool pop_only``”h]”jS)�”}”(hj°h]”hŒ bool pop_only”…”�”}”(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:141: ./mm/percpu.c”h´MGhj°ubjÉ)�”}”(hhh]”jM)�”}”(hŒuse populated regions only”h]”hŒuse populated regions only”…”�”}”(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´MGhjS¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj7¯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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´MIhj7¯ubjM)�”}”(hXãGiven a chunk and an allocation spec, find the offset to begin searching for a free region. This iterates over the bitmap metadata blocks to find an offset that will be guaranteed to fit the requirements. It is not quite first fit as if the allocation does not fit in the contig hint of a block or chunk, it is skipped. This errs on the side of caution to prevent excess iteration. Poor alignment can cause the allocator to skip over blocks and chunks that have valid free areas.”h]”hXãGiven a chunk and an allocation spec, find the offset to begin searching for a free region. This iterates over the bitmap metadata blocks to find an offset that will be guaranteed to fit the requirements. It is not quite first fit as if the allocation does not fit in the contig hint of a block or chunk, it is skipped. This errs on the side of caution to prevent excess iteration. Poor alignment can cause the allocator to skip over blocks and chunks that have valid free areas.”…”�”}”(hjX°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´MHhj7¯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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´MPhj7¯ubjM)�”}”(hŒFThe offset in the bitmap to begin searching. -1 if no offset is found.”h]”hŒFThe offset in the bitmap to begin searching. -1 if no offset is found.”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´MQhj7¯ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpcpu_alloc_area (C function)”Œc.pcpu_alloc_area”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒWint pcpu_alloc_area (struct pcpu_chunk *chunk, int alloc_bits, size_t align, int start)”h]”hù)�”}”(hŒVint pcpu_alloc_area(struct pcpu_chunk *chunk, int alloc_bits, size_t align, int start)”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:141: ./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_alloc_area”h]”j)�”}”(hŒpcpu_alloc_area”h]”hŒpcpu_alloc_area”…”�”}”(hjϰh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj˰ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjª°h²hh³j¼°h´M¬ubj8)�”}”(hŒC(struct pcpu_chunk *chunk, int alloc_bits, size_t align, int start)”h]”(j>)�”}”(hŒstruct pcpu_chunk *chunk”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjë°h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjç°ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjø°h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjç°ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j ±Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjѰsbŒc.pcpu_alloc_area”†”asbuh1hhjç°ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)±h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjç°ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj7±h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjç°ubj)�”}”(hŒchunk”h]”hŒchunk”…”�”}”(hjD±h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjç°ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjã°ubj>)�”}”(hŒint alloc_bits”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(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Œ alloc_bits”h]”hŒ alloc_bits”…”�”}”(hjy±h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjY±ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjã°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”jèŒ reftarget”j—±Œmodname”NŒ classname”Njìjï)�”}”jò]”j%±Œc.pcpu_alloc_area”†”asbuh1hhjޱubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³±h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjޱubj)�”}”(hŒalign”h]”hŒalign”…”�”}”(hjÁ±h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjޱubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjã°ubj>)�”}”(hŒ int start”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Œstart”h]”hŒstart”…”�”}”(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&]”jjuh1j7hjª°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Œ#allocates an area from a pcpu_chunk”h]”hŒ#allocates an area from a pcpu_chunk”…”�”}”(hj ²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./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&]”jFjAjGj8²jHj8²jI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hXï**Parameters** ``struct pcpu_chunk *chunk`` chunk of interest ``int alloc_bits`` size of request in allocation units ``size_t align`` alignment of area (max PAGE_SIZE) ``int start`` bit_off to start searching **Description** 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. **Return** Allocated addr offset in **chunk** on success. -1 if no matching area is found.”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:141: ./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)�”}”(hja²h]”hŒstruct pcpu_chunk *chunk”…”�”}”(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:141: ./mm/percpu.c”h´M­hj[²ubjÉ)�”}”(hhh]”jM)�”}”(hŒchunk of interest”h]”hŒchunk of interest”…”�”}”(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Œ7``int alloc_bits`` size of request in allocation units ”h]”(j¯)�”}”(hŒ``int alloc_bits``”h]”jS)�”}”(hjš²h]”hŒint alloc_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:141: ./mm/percpu.c”h´M®hj”²ubjÉ)�”}”(hhh]”jM)�”}”(hŒ#size of request in allocation units”h]”hŒ#size of request in allocation units”…”�”}”(hj³²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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Œ3``size_t align`` alignment of area (max PAGE_SIZE) ”h]”(j¯)�”}”(hŒ``size_t align``”h]”jS)�”}”(hjÓ²h]”hŒ size_t 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:141: ./mm/percpu.c”h´M¯hjͲ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ÈhjͲubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jè²h´M¯hjX²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:141: ./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°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:141: ./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”…”�”}”(hje³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”…”�”}”(hjw³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj]³ubhŒ with alignment ”…”�”}”(hj]³h²hh³Nh´NubjŽ)�”}”(hŒ **align**”h]”hŒalign”…”�”}”(hj‰³h²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”…”�”}”(hj›³h²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:141: ./mm/percpu.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:141: ./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 ”…”�”}”(hj̳h²hh³Nh´NubjŽ)�”}”(hŒ **chunk**”h]”hŒchunk”…”�”}”(hjÔ³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj̳ubhŒ- on success. -1 if no matching area is found.”…”�”}”(hj̳h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´Mºhj<²ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpcpu_free_area (C function)”Œc.pcpu_free_area”hNt”auh1hÜhjKò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 ´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:141: ./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_free_area”h]”j)�”}”(hŒpcpu_free_area”h]”hŒpcpu_free_area”…”�”}”(hj.´h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj*´ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj ´h²hh³j´h´Mðubj8)�”}”(hŒ#(struct pcpu_chunk *chunk, int off)”h]”(j>)�”}”(hŒstruct pcpu_chunk *chunk”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjJ´h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjF´ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW´h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjF´ubh)�”}”(hhh]”j)�”}”(hŒ pcpu_chunk”h]”hŒ pcpu_chunk”…”�”}”(hjh´h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhje´ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jj´Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj0´sbŒc.pcpu_free_area”†”asbuh1hhjF´ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ´h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjF´ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj–´h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjF´ubj)�”}”(hŒchunk”h]”hŒchunk”…”�”}”(hj£´h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjF´ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjB´ubj>)�”}”(hŒint off”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Œoff”h]”hŒoff”…”�”}”(hjØ´h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¸´ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjB´ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj ´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Œfrees the corresponding offset”h]”hŒfrees the corresponding offset”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./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²hhjKò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$µ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:141: ./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)�”}”(hjCµh]”hŒstruct pcpu_chunk *chunk”…”�”}”(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:141: ./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³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Œ#``int off`` addr offset into chunk ”h]”(j¯)�”}”(hŒ ``int off``”h]”jS)�”}”(hj|µh]”hŒint off”…”�”}”(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:141: ./mm/percpu.c”h´MòhjvµubjÉ)�”}”(hhh]”jM)�”}”(hŒaddr offset into chunk”h]”hŒaddr offset into chunk”…”�”}”(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£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:141: ./mm/percpu.c”h´MôhjµubjM)�”}”(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.”…”�”}”(hj͵h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.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:141: ./mm/percpu.c”h´MöhjµubjM)�”}”(hŒNumber of freed bytes.”h]”hŒNumber of freed bytes.”…”�”}”(hjôµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M÷hjµubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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:141: ./mm/percpu.c”h´M9ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1¶h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¶h²hh³j0¶h´M9ubh)�”}”(hhh]”j)�”}”(hŒ pcpu_chunk”h]”hŒ pcpu_chunk”…”�”}”(hjB¶h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj?¶ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jD¶Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒpcpu_alloc_first_chunk”sbŒc.pcpu_alloc_first_chunk”†”asbuh1hhj¶h²hh³j0¶h´M9ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc¶h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¶h²hh³j0¶h´M9ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjq¶h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¶h²hh³j0¶h´M9ubhÿ)�”}”(hŒpcpu_alloc_first_chunk”h]”j)�”}”(hj`¶h]”hŒpcpu_alloc_first_chunk”…”�”}”(hj‚¶h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj~¶ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¶h²hh³j0¶h´M9ubj8)�”}”(hŒ&(unsigned long tmp_addr, int map_size)”h]”(j>)�”}”(hŒunsigned long tmp_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Œtmp_addr”h]”hŒtmp_addr”…”�”}”(hjÕ¶h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™¶ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj•¶ubj>)�”}”(hŒ int map_size”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Œmap_size”h]”hŒmap_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&]”jjuh1j7hj¶h²hh³j0¶h´M9ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj¶h²hh³j0¶h´M9ubah}”(h]”j¶ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j0¶h´M9hj¶h²hubj4)�”}”(hhh]”jM)�”}”(hŒ)creates chunks that serve the first chunk”h]”hŒ)creates chunks that serve the first chunk”…”�”}”(hj4·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M9hj1·h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj¶h²hh³j0¶h´M9ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjL·jHjL·jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjV·h]”hŒ Parameters”…”�”}”(hjX·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjT·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M=hjP·ubj¤)�”}”(hhh]”(j©)�”}”(hŒ:``unsigned long tmp_addr`` the start of the region served ”h]”(j¯)�”}”(hŒ``unsigned long tmp_addr``”h]”jS)�”}”(hju·h]”hŒunsigned long tmp_addr”…”�”}”(hjw·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjs·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M:hjo·ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe start of the region served”h]”hŒthe start of the region served”…”�”}”(hjŽ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jŠ·h´M:hj‹·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjo·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŠ·h´M:hjl·ubj©)�”}”(hŒ+``int map_size`` size of the region served ”h]”(j¯)�”}”(hŒ``int map_size``”h]”jS)�”}”(hj®·h]”hŒ int map_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:141: ./mm/percpu.c”h´M;hj¨·ubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of the region served”h]”hŒsize of the region served”…”�”}”(hjÇ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j÷h´M;hjÄ·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¨·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j÷h´M;hjl·ubeh}”(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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M=hjP·ubjM)�”}”(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ÿ·h²hh³Nh´NubjŽ)�”}”(hŒ **tmp_addr**”h]”hŒtmp_addr”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÿ·ubhŒ± 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ÿ·h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M<hjP·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:141: ./mm/percpu.c”h´MAhjP·ubjM)�”}”(hŒ9Chunk serving the region at **tmp_addr** of **map_size**.”h]”(hŒChunk serving the region at ”…”�”}”(hj8¸h²hh³Nh´NubjŽ)�”}”(hŒ **tmp_addr**”h]”hŒtmp_addr”…”�”}”(hj@¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj8¸ubhŒ of ”…”�”}”(hj8¸h²hh³Nh´NubjŽ)�”}”(hŒ **map_size**”h]”hŒmap_size”…”�”}”(hjR¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj8¸ubhŒ.”…”�”}”(hj8¸h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´MBhjP·ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!pcpu_chunk_populated (C function)”Œc.pcpu_chunk_populated”hNt”auh1hÜhjKò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‹¸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:141: ./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_chunk_populated”h]”j)�”}”(hŒpcpu_chunk_populated”h]”hŒpcpu_chunk_populated”…”�”}”(hj¬¸h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¨¸ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj‡¸h²hh³j™¸h´MÞubj8)�”}”(hŒ8(struct pcpu_chunk *chunk, int page_start, int page_end)”h]”(j>)�”}”(hŒstruct pcpu_chunk *chunk”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjȸh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjĸubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕ¸h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjĸubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j踌modname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj®¸sbŒc.pcpu_chunk_populated”†”asbuh1hhjĸubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjĸubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjĸubj)�”}”(hŒchunk”h]”hŒchunk”…”�”}”(hj!¹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjĸubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÀ¸ubj>)�”}”(hŒint page_start”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(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¹ubj)�”}”(hŒ page_start”h]”hŒ page_start”…”�”}”(hjV¹h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj6¹ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÀ¸ubj>)�”}”(hŒ int page_end”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(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Œpage_end”h]”hŒpage_end”…”�”}”(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&]”jjuh1j7hj‡¸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Œpost-population bookkeeping”h]”hŒpost-population bookkeeping”…”�”}”(hjµ¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./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²hhjKò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Ž)�”}”(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:141: ./mm/percpu.c”h´Mâhjѹubj¤)�”}”(hhh]”(j©)�”}”(hŒ<``struct pcpu_chunk *chunk`` pcpu_chunk which got populated ”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:141: ./mm/percpu.c”h´Mßhjð¹ubjÉ)�”}”(hhh]”jM)�”}”(hŒpcpu_chunk which got populated”h]”hŒpcpu_chunk which got populated”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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 page_start`` the start page ”h]”(j¯)�”}”(hŒ``int page_start``”h]”jS)�”}”(hj/ºh]”hŒint page_start”…”�”}”(hj1º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:141: ./mm/percpu.c”h´Màhj)ºubjÉ)�”}”(hhh]”jM)�”}”(hŒthe start page”h]”hŒthe start page”…”�”}”(hjHºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jDºh´MàhjEºubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj)ºubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jDºh´Màhjí¹ubj©)�”}”(hŒ``int page_end`` the end page ”h]”(j¯)�”}”(hŒ``int page_end``”h]”jS)�”}”(hjhºh]”hŒ int page_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:141: ./mm/percpu.c”h´MáhjbºubjÉ)�”}”(hhh]”jM)�”}”(hŒ the end page”h]”hŒ the end page”…”�”}”(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í¹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:141: ./mm/percpu.c”h´MãhjѹubjM)�”}”(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 [”…”�”}”(hj¹ºh²hh³Nh´NubjŽ)�”}”(hŒ**page_start**”h]”hŒ page_start”…”�”}”(hjÁºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¹ºubhŒ&,**page_end**) have been populated to ”…”�”}”(hj¹ºh²hh³Nh´NubjŽ)�”}”(hŒ **chunk**”h]”hŒchunk”…”�”}”(hjÓºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¹ºubhŒd. Update the bookkeeping information accordingly. Must be called after each successful population.”…”�”}”(hj¹ºh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´Mâhjѹubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ#pcpu_chunk_depopulated (C function)”Œc.pcpu_chunk_depopulated”hNt”auh1hÜhjKò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 »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:141: ./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_chunk_depopulated”h]”j)�”}”(hŒpcpu_chunk_depopulated”h]”hŒpcpu_chunk_depopulated”…”�”}”(hj-»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj)»ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj»h²hh³j»h´Möubj8)�”}”(hŒ8(struct pcpu_chunk *chunk, int page_start, int page_end)”h]”(j>)�”}”(hŒstruct pcpu_chunk *chunk”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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»ubh)�”}”(hhh]”j)�”}”(hŒ pcpu_chunk”h]”hŒ pcpu_chunk”…”�”}”(hjg»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjd»ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”ji»Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj/»sbŒc.pcpu_chunk_depopulated”†”asbuh1hhjE»ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡»h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjE»ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj•»h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjE»ubj)�”}”(hŒchunk”h]”hŒchunk”…”�”}”(hj¢»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjE»ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjA»ubj>)�”}”(hŒint page_start”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Œ page_start”h]”hŒ page_start”…”�”}”(hj×»h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj·»ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjA»ubj>)�”}”(hŒ int page_end”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Œpage_end”h]”hŒpage_end”…”�”}”(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&]”jjuh1j7hj»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Œpost-depopulation bookkeeping”h]”hŒpost-depopulation bookkeeping”…”�”}”(hj6¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´Möhj3¼h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj»h²hh³j»h´Möubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjN¼jHjN¼jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjX¼h]”hŒ Parameters”…”�”}”(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:141: ./mm/percpu.c”h´MúhjR¼ubj¤)�”}”(hhh]”(j©)�”}”(hŒ>``struct pcpu_chunk *chunk`` pcpu_chunk which got depopulated ”h]”(j¯)�”}”(hŒ``struct pcpu_chunk *chunk``”h]”jS)�”}”(hjw¼h]”hŒstruct pcpu_chunk *chunk”…”�”}”(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:141: ./mm/percpu.c”h´M÷hjq¼ubjÉ)�”}”(hhh]”jM)�”}”(hŒ pcpu_chunk which got depopulated”h]”hŒ pcpu_chunk which got depopulated”…”�”}”(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¼ubj©)�”}”(hŒ"``int page_start`` the start page ”h]”(j¯)�”}”(hŒ``int page_start``”h]”jS)�”}”(hj°¼h]”hŒint page_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:141: ./mm/percpu.c”h´Møhjª¼ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe start page”h]”hŒthe start 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øhjn¼ubj©)�”}”(hŒ``int page_end`` the end page ”h]”(j¯)�”}”(hŒ``int page_end``”h]”jS)�”}”(hjé¼h]”hŒ int page_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:141: ./mm/percpu.c”h´Mùhjã¼ubjÉ)�”}”(hhh]”jM)�”}”(hŒ the end page”h]”hŒ the end 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ùhjn¼ubeh}”(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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´MûhjR¼ubjM)�”}”(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:½h²hh³Nh´NubjŽ)�”}”(hŒ**page_start**”h]”hŒ page_start”…”�”}”(hjB½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj:½ubhŒ*,**page_end**) have been depopulated from ”…”�”}”(hj:½h²hh³Nh´NubjŽ)�”}”(hŒ **chunk**”h]”hŒchunk”…”�”}”(hjT½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj:½ubhŒe. Update the bookkeeping information accordingly. Must be called after each successful depopulation.”…”�”}”(hj:½h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´MúhjR¼ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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:141: ./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)�”}”(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”jèŒ reftarget”j®½Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒpcpu_chunk_addr_search”sbŒc.pcpu_chunk_addr_search”†”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/ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÛ½h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj‰½h²hh³jš½h´M/ubhÿ)�”}”(hŒpcpu_chunk_addr_search”h]”j)�”}”(hjʽh]”hŒpcpu_chunk_addr_search”…”�”}”(hjì½h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjè½ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj‰½h²hh³jš½h´M/ubj8)�”}”(hŒ (void *addr)”h]”j>)�”}”(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¾ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj#¾h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¾ubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(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&]”jjuh1j7hj‰½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Œ,determine chunk containing specified address”h]”hŒ,determine chunk containing specified address”…”�”}”(hjZ¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.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²hhjKò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Ž)�”}”(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:141: ./mm/percpu.c”h´M3hjv¾ubj¤)�”}”(hhh]”j©)�”}”(hŒC``void *addr`` address for which the chunk needs to be determined. ”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:141: ./mm/percpu.c”h´M0hj•¾ubjÉ)�”}”(hhh]”jM)�”}”(hŒ3address for which the chunk needs to be determined.”h]”hŒ3address for which the chunk needs to be determined.”…”�”}”(hj´¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j°¾h´M0hj±¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj•¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j°¾h´M0hj’¾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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M2hjv¾ubjM)�”}”(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ì¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M1hjv¾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:141: ./mm/percpu.c”h´M4hjv¾ubjM)�”}”(hŒThe address of the found chunk.”h]”hŒThe address of the found chunk.”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M5hjv¾ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpcpu_alloc (C function)”Œ c.pcpu_alloc”hNt”auh1hÜhjKò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”…”�”}”(hjB¿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:141: ./mm/percpu.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Œ__percpu”…”�”}”(hj>¿h²hh³Nh´Nubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc¿h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj>¿h²hh³jP¿h´M¹ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjq¿h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj>¿h²hh³jP¿h´M¹ubhÿ)�”}”(hŒ pcpu_alloc”h]”j)�”}”(hŒ pcpu_alloc”h]”hŒ pcpu_alloc”…”�”}”(hj‚¿h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj~¿ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj>¿h²hh³jP¿h´M¹ubj8)�”}”(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”…”�”}”(hj¡¿h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjž¿ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j£¿Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj„¿sbŒ c.pcpu_alloc”†”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Œ 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”jèŒ reftarget”jí¿Œmodname”NŒ classname”Njìjï)�”}”jò]”j½¿Œ c.pcpu_alloc”†”asbuh1hhjä¿ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Àh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjä¿ubj)�”}”(hŒalign”h]”hŒalign”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjä¿ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj–¿ubj>)�”}”(hŒ bool reserved”h]”(já)�”}”(hj½h]”hŒbool”…”�”}”(hj0À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Œreserved”h]”hŒreserved”…”�”}”(hjKÀ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”…”�”}”(hjgÀh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjdÀubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jiÀŒmodname”NŒ classname”Njìjï)�”}”jò]”j½¿Œ c.pcpu_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–¿ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj>¿h²hh³jP¿h´M¹ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj:¿h²hh³jP¿h´M¹ubah}”(h]”j5¿ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jP¿h´M¹hj7¿h²hubj4)�”}”(hhh]”jM)�”}”(hŒthe percpu allocator”h]”hŒthe percpu allocator”…”�”}”(hj½Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M¹hjºÀh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj7¿h²hh³jP¿h´M¹ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÕÀjHjÕÀjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(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:141: ./mm/percpu.c”h´M½hjÙÀubj¤)�”}”(hhh]”(j©)�”}”(hŒ2``size_t size`` size of area to allocate in bytes ”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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´MºhjøÀubjÉ)�”}”(hhh]”jM)�”}”(hŒ!size of area to allocate in bytes”h]”hŒ!size of area to allocate 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Œ3``size_t align`` alignment of area (max PAGE_SIZE) ”h]”(j¯)�”}”(hŒ``size_t align``”h]”jS)�”}”(hj7Áh]”hŒ size_t align”…”�”}”(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:141: ./mm/percpu.c”h´M»hj1ÁubjÉ)�”}”(hhh]”jM)�”}”(hŒ!alignment of area (max PAGE_SIZE)”h]”hŒ!alignment of area (max PAGE_SIZE)”…”�”}”(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Œ@``bool reserved`` allocate from the reserved chunk if available ”h]”(j¯)�”}”(hŒ``bool reserved``”h]”jS)�”}”(hjpÁh]”hŒ bool reserved”…”�”}”(hjrÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjnÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M¼hjjÁubjÉ)�”}”(hhh]”jM)�”}”(hŒ-allocate from the reserved chunk if available”h]”hŒ-allocate from the reserved chunk if available”…”�”}”(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Œ``gfp_t gfp`` allocation 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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M½hj£ÁubjÉ)�”}”(hhh]”jM)�”}”(hŒallocation flags”h]”hŒ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õÀ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:141: ./mm/percpu.c”h´M¿hjÙÀubjM)�”}”(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úÁh²hh³Nh´NubjŽ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjúÁubhŒ bytes aligned at ”…”�”}”(hjúÁh²hh³Nh´NubjŽ)�”}”(hŒ **align**”h]”hŒalign”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjúÁubhŒ. If ”…”�”}”(hjúÁh²hh³Nh´NubjŽ)�”}”(hŒ**gfp**”h]”hŒgfp”…”�”}”(hj&Âh²hh³Nh´Nuba•ƒh}”(h]”h ]”h"]”h$]”h&]”uh1j�hjúÁubhŒ8 doesn’t allow blocking, the allocation is atomic. If ”…”�”}”(hjúÁh²hh³Nh´NubjŽ)�”}”(hŒ**gfp**”h]”hŒgfp”…”�”}”(hj8Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjúÁubhŒ] has __GFP_NOWARN then no warning will be triggered on invalid or failed allocation requests.”…”�”}”(hjúÁh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M¾hjÙÀubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjSÂh]”hŒReturn”…”�”}”(hjUÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjQÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´MÂhjÙÀubjM)�”}”(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.”…”�”}”(hjiÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´MÃhjÙÀubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒpcpu_balance_free (C function)”Œc.pcpu_balance_free”hNt”auh1hÜhjKò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˜Â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:141: ./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_balance_free”h]”j)�”}”(hŒpcpu_balance_free”h]”hŒpcpu_balance_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œubj8)�”}”(hŒ(bool empty_only)”h]”j>)�”}”(hŒbool empty_only”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Œ empty_only”h]”hŒ empty_only”…”�”}”(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&]”jjuh1j7hj”Â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Œ manage the amount of free chunks”h]”hŒ manage the amount of free chunks”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./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&]”jFjAjGj2ÃjHj2ÃjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hXB**Parameters** ``bool empty_only`` free chunks only if there are no populated pages **Description** If empty_only is ``false``, reclaim all fully free chunks regardless of the number of populated pages. Otherwise, only reclaim chunks that have no populated pages. **Context** pcpu_lock (can be dropped temporarily)”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:141: ./mm/percpu.c”h´M hj6Ãubj¤)�”}”(hhh]”j©)�”}”(hŒE``bool empty_only`` free chunks only if there are no populated pages ”h]”(j¯)�”}”(hŒ``bool empty_only``”h]”jS)�”}”(hj[Ãh]”hŒbool empty_only”…”�”}”(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:141: ./mm/percpu.c”h´M�hjUÃubjÉ)�”}”(hhh]”jM)�”}”(hŒ0free chunks only if there are no populated pages”h]”hŒ0free chunks only if there are no populated pages”…”�”}”(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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´MŸhj6ÃubjM)�”}”(hŒ¤If empty_only is ``false``, reclaim all fully free chunks regardless of the number of populated pages. Otherwise, only reclaim chunks that have no populated pages.”h]”(hŒIf empty_only is ”…”�”}”(hj¬Ãh²hh³Nh´NubjS)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj´Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¬ÃubhŒŠ, reclaim all fully free chunks regardless of the number of populated pages. Otherwise, only reclaim chunks that have no populated pages.”…”�”}”(hj¬Ãh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´Mžhj6Ã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:141: ./mm/percpu.c”h´M¢hj6ÃubjM)�”}”(hŒ&pcpu_lock (can be dropped temporarily)”h]”hŒ&pcpu_lock (can be dropped temporarily)”…”�”}”(hjåÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M£hj6Ãubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ#pcpu_balance_populated (C function)”Œc.pcpu_balance_populated”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ"void pcpu_balance_populated (void)”h]”hù)�”}”(hŒ!void pcpu_balance_populated(void)”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:141: ./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_balance_populated”h]”j)�”}”(hŒpcpu_balance_populated”h]”hŒpcpu_balance_populated”…”�”}”(hj5Äh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj1Äubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÄh²hh³j"Äh´MÑubj8)�”}”(hŒ(void)”h]”j>)�”}”(hŒvoid”h]”já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjQÄh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjMÄubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjIÄubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÄ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Œ$manage the amount of populated pages”h]”hŒ$manage the amount of populated pages”…”�”}”(hj{Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´MÑhjxÄ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²hhjKòh³Nh´Nubj„)�”}”(hXµ**Parameters** ``void`` no arguments **Description** Maintain a certain amount of populated pages to satisfy atomic allocations. It is possible that this is called when physical memory is scarce causing OOM killer to be triggered. We should avoid doing so until an actual allocation causes the failure as it is possible that requests can be serviced from already backed regions. **Context** pcpu_lock (can be dropped temporarily)”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:141: ./mm/percpu.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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´Khj—ÄubjM)�”}”(hXFMaintain a certain amount of populated pages to satisfy atomic allocations. It is possible that this is called when physical memory is scarce causing OOM killer to be triggered. We should avoid doing so until an actual allocation causes the failure as it is possible that requests can be serviced from already backed regions.”h]”hXFMaintain a certain amount of populated pages to satisfy atomic allocations. It is possible that this is called when physical memory is scarce causing OOM killer to be triggered. We should avoid doing so until an actual allocation causes the failure as it is possible that requests can be serviced from already backed regions.”…”�”}”(hj Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.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:141: ./mm/percpu.c”h´MØhj—ÄubjM)�”}”(hŒ&pcpu_lock (can be dropped temporarily)”h]”hŒ&pcpu_lock (can be dropped temporarily)”…”�”}”(hj4Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´MÙhj—Äubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ#pcpu_reclaim_populated (C function)”Œc.pcpu_reclaim_populated”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ"void pcpu_reclaim_populated (void)”h]”hù)�”}”(hŒ!void pcpu_reclaim_populated(void)”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjcÅ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:141: ./mm/percpu.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Œpcpu_reclaim_populated”h]”j)�”}”(hŒpcpu_reclaim_populated”h]”hŒpcpu_reclaim_populated”…”�”}”(hj„Åh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj€Åubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj_Åh²hh³jqÅh´M+ubj8)�”}”(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&]”jjuh1j7hj_Åh²hh³jqÅh´M+ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj[Åh²hh³jqÅh´M+ubah}”(h]”jVÅah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jqÅh´M+hjXÅh²hubj4)�”}”(hhh]”jM)�”}”(hŒ3scan over to_depopulate chunks and free empty pages”h]”hŒ3scan over to_depopulate chunks and free empty pages”…”�”}”(hjÊÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M+hjÇÅh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjXÅh²hh³jqÅh´M+ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjâÅjHjâÅjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hXJ**Parameters** ``void`` no arguments **Description** Scan over chunks in the depopulate list and try to release unused populated pages back to the system. Depopulated chunks are sidelined to prevent repopulating these pages unless required. Fully free chunks are reintegrated and freed accordingly (1 is kept around). If we drop below the empty populated pages threshold, reintegrate the chunk if it has empty free pages. Each chunk is scanned in the reverse order to keep populated pages close to the beginning of the chunk. **Context** pcpu_lock (can be dropped temporarily)”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:141: ./mm/percpu.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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.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Ž)�”}”(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:141: ./mm/percpu.c”h´KhjæÅubjM)�”}”(hXÛScan over chunks in the depopulate list and try to release unused populated pages back to the system. Depopulated chunks are sidelined to prevent repopulating these pages unless required. Fully free chunks are reintegrated and freed accordingly (1 is kept around). If we drop below the empty populated pages threshold, reintegrate the chunk if it has empty free pages. Each chunk is scanned in the reverse order to keep populated pages close to the beginning of the chunk.”h]”hXÛScan over chunks in the depopulate list and try to release unused populated pages back to the system. Depopulated chunks are sidelined to prevent repopulating these pages unless required. Fully free chunks are reintegrated and freed accordingly (1 is kept around). If we drop below the empty populated pages threshold, reintegrate the chunk if it has empty free pages. Each chunk is scanned in the reverse order to keep populated pages close to the beginning of the chunk.”…”�”}”(hj\Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M,hjæÅubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hjmÆh]”hŒContext”…”�”}”(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:141: ./mm/percpu.c”h´M4hjæÅubjM)�”}”(hŒ&pcpu_lock (can be dropped temporarily)”h]”hŒ&pcpu_lock (can be dropped temporarily)”…”�”}”(hjƒÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M5hjæÅubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ pcpu_balance_workfn (C function)”Œc.pcpu_balance_workfn”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ3void pcpu_balance_workfn (struct work_struct *work)”h]”hù)�”}”(hŒ2void pcpu_balance_workfn(struct work_struct *work)”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:141: ./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_balance_workfn”h]”j)�”}”(hŒpcpu_balance_workfn”h]”hŒpcpu_balance_workfn”…”�”}”(hjÓÆh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÏÆubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj®Æh²hh³jÀÆh´M”ubj8)�”}”(hŒ(struct work_struct *work)”h]”j>)�”}”(hŒstruct work_struct *work”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjïÆh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjëÆubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüÆh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjëÆubh)�”}”(hhh]”j)�”}”(hŒ work_struct”h]”hŒ work_struct”…”�”}”(hj Çh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Çubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÇŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÕÆsbŒc.pcpu_balance_workfn”†”asbuh1hhjëÆubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-Çh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjëÆubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj;Çh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjëÆubj)�”}”(hŒwork”h]”hŒwork”…”�”}”(hjHÇ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&]”jjuh1j7hj®Æ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Œ4manage the amount of free chunks and populated pages”h]”hŒ4manage the amount of free chunks and populated pages”…”�”}”(hjrÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.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²hhjKòh³Nh´Nubj„)�”}”(hX **Parameters** ``struct work_struct *work`` unused **Description** For each chunk type, manage the number of fully free chunks and the number of populated pages. An important thing to consider is when pages are freed and how they contribute to the global counts.”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:141: ./mm/percpu.c”h´M˜hjŽÇubj¤)�”}”(hhh]”j©)�”}”(hŒ$``struct work_struct *work`` unused ”h]”(j¯)�”}”(hŒ``struct work_struct *work``”h]”jS)�”}”(hj³Çh]”hŒstruct work_struct *work”…”�”}”(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:141: ./mm/percpu.c”h´M•hj­ÇubjÉ)�”}”(hhh]”jM)�”}”(hŒunused”h]”hŒunused”…”�”}”(hjÌÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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:141: ./mm/percpu.c”h´M—hjŽÇubjM)�”}”(hŒÄFor each chunk type, manage the number of fully free chunks and the number of populated pages. An important thing to consider is when pages are freed and how they contribute to the global counts.”h]”hŒÄFor each chunk type, manage the number of fully free chunks and the number of populated pages. An important thing to consider is when pages are freed and how they contribute to the global counts.”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M–hjŽÇubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfree_percpu (C function)”Œ c.free_percpu”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ%void free_percpu (void __percpu *ptr)”h]”hù)�”}”(hŒ$void free_percpu(void __percpu *ptr)”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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:141: ./mm/percpu.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Œ free_percpu”h]”j)�”}”(hŒ free_percpu”h]”hŒ free_percpu”…”�”}”(hjTÈh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjPÈubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj/Èh²hh³jAÈh´M·ubj8)�”}”(hŒ(void __percpu *ptr)”h]”j>)�”}”(hŒvoid __percpu *ptr”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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ÈubhŒ__percpu”…”�”}”(hjlÈh²hh³Nh´Nubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Èh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjlÈubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjžÈh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjlÈubj)�”}”(hŒptr”h]”hŒptr”…”�”}”(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&]”jjuh1j7hj/È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Œfree percpu area”h]”hŒfree percpu area”…”�”}”(hjÕÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M·hjÒÈ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²hhjKòh³Nh´Nubj„)�”}”(hŒ�**Parameters** ``void __percpu *ptr`` pointer to area to free **Description** Free percpu area **ptr**. **Context** Can be called from atomic context.”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:141: ./mm/percpu.c”h´M»hjñÈubj¤)�”}”(hhh]”j©)�”}”(hŒ/``void __percpu *ptr`` pointer to area to free ”h]”(j¯)�”}”(hŒ``void __percpu *ptr``”h]”jS)�”}”(hjÉh]”hŒvoid __percpu *ptr”…”�”}”(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:141: ./mm/percpu.c”h´M¸hjÉubjÉ)�”}”(hhh]”jM)�”}”(hŒpointer to area to free”h]”hŒpointer to area 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 Éubah}”(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:141: ./mm/percpu.c”h´MºhjñÈubjM)�”}”(hŒFree percpu area **ptr**.”h]”(hŒFree percpu area ”…”�”}”(hjgÉh²hh³Nh´NubjŽ)�”}”(hŒ**ptr**”h]”hŒptr”…”�”}”(hjoÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjgÉubhŒ.”…”�”}”(hjgÉh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.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:141: ./mm/percpu.c”h´M»hjñÈubjM)�”}”(hŒ"Can be called from atomic context.”h]”hŒ"Can be called from atomic context.”…”�”}”(hj Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M¼hjñÈubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%is_kernel_percpu_address (C function)”Œc.is_kernel_percpu_address”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ2bool is_kernel_percpu_address (unsigned long addr)”h]”hù)�”}”(hŒ1bool is_kernel_percpu_address(unsigned long addr)”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:141: ./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Œis_kernel_percpu_address”h]”j)�”}”(hŒis_kernel_percpu_address”h]”hŒis_kernel_percpu_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 ubj8)�”}”(hŒ(unsigned long addr)”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Œ ”…”�”}”(hj5Êh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÊubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(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&]”jjuh1j7hjËÉ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 whether address is from static percpu area”h]”hŒ/test whether address is from static percpu area”…”�”}”(hjmÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M hjjÊ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²hhjKòh³Nh´Nubj„)�”}”(hXB**Parameters** ``unsigned long addr`` address to test **Description** Test whether **addr** belongs to in-kernel static percpu area. Module static percpu areas are not considered. For those, use is_module_percpu_address(). **Return** ``true`` if **addr** is from in-kernel static percpu area, ``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:141: ./mm/percpu.c”h´M hj‰Êubj¤)�”}”(hhh]”j©)�”}”(hŒ'``unsigned long addr`` address to test ”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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M hj¨ÊubjÉ)�”}”(hhh]”jM)�”}”(hŒaddress to test”h]”hŒaddress 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¥Ê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:141: ./mm/percpu.c”h´M hj‰ÊubjM)�”}”(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ÿÊh²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÿÊubhŒ… belongs to in-kernel static percpu area. Module static percpu areas are not considered. For those, use is_module_percpu_address().”…”�”}”(hjÿÊh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.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:141: ./mm/percpu.c”h´M hj‰ÊubjM)�”}”(hŒO``true`` if **addr** is from in-kernel static percpu area, ``false`` otherwise.”h]”(jS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj<Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj8ËubhŒ if ”…”�”}”(hj8Ëh²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hjNËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj8ËubhŒ' is from in-kernel static percpu area, ”…”�”}”(hj8Ëh²hh³Nh´NubjS)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj`Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj8ËubhŒ otherwise.”…”�”}”(hj8Ëh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M hj‰Êubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hjœËh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj™Ëubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jžËŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒper_cpu_ptr_to_phys”sbŒc.per_cpu_ptr_to_phys”†”asbuh1hhj•Ëh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./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Œper_cpu_ptr_to_phys”h]”j)�”}”(hjºËh]”hŒper_cpu_ptr_to_phys”…”�”}”(hjÐËh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÌËubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj•Ëh²hh³j½Ëh´M# ubj8)�”}”(hŒ (void *addr)”h]”j>)�”}”(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çËubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjçË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&]”jjuh1j7hj•Ë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Œ5convert translated percpu address to physical address”h]”hŒ5convert translated percpu address to physical address”…”�”}”(hj>Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./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&]”jFjAjGjVÌjHjVÌjI‰jJ‰jK‰uh1híh²hhjKò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`Ìh]”hŒ Parameters”…”�”}”(hjbÌ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:141: ./mm/percpu.c”h´M' hjZÌubj¤)�”}”(hhh]”j©)�”}”(hŒ?``void *addr`` the address to be converted to physical 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:141: ./mm/percpu.c”h´M$ hjyÌubjÉ)�”}”(hhh]”jM)�”}”(hŒ/the address to be converted to physical address”h]”hŒ/the address to be converted to physical address”…”�”}”(hj˜Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j”Ìh´M$ hj•Ìubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjyÌubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j”Ìh´M$ hjvÌubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hjZÌ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:141: ./mm/percpu.c”h´M& hjZÌubjM)�”}”(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 ”…”�”}”(hjÐÌh²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hjØÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÐÌubhŒ« 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 ”…”�”}”(hjÐÌh²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hjêÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÐÌubhŒ* stays valid until this function finishes.”…”�”}”(hjÐÌh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M% hjZÌubjM)�”}”(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Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M* hjZÌubjM)�”}”(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Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M/ hjZÌ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:141: ./mm/percpu.c”h´M5 hjZÌubjM)�”}”(hŒ"The physical address for **addr**.”h]”(hŒThe physical address for ”…”�”}”(hj9Íh²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hjAÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj9ÍubhŒ.”…”�”}”(hj9Íh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M6 hjZÌubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjzÍh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjvÍh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´Mf ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆÍh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjvÍh²hh³j‡Íh´Mf 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”jèŒ reftarget”j›ÍŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒpcpu_alloc_alloc_info”sbŒc.pcpu_alloc_alloc_info”†”asbuh1hhjvÍh²hh³j‡Íh´Mf ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºÍh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjvÍh²hh³j‡Íh´Mf ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÈÍh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjvÍh²hh³j‡Íh´Mf ubhÿ)�”}”(hŒpcpu_alloc_alloc_info”h]”j)�”}”(hj·Íh]”hŒpcpu_alloc_alloc_info”…”�”}”(hjÙÍh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÕÍubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjvÍh²hh³j‡Íh´Mf ubj8)�”}”(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Œ ”…”�”}”(hj7Îh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj%Îubj)�”}”(hŒnr_units”h]”hŒnr_units”…”�”}”(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&]”jjuh1j7hjvÍh²hh³j‡Íh´Mf ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjrÍh²hh³j‡Íh´Mf ubah}”(h]”jmÍah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j‡Íh´Mf hjoÍh²hubj4)�”}”(hhh]”jM)�”}”(hŒallocate percpu allocation info”h]”hŒallocate percpu allocation info”…”�”}”(hjoÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´Mf hjlÎh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjoÍh²hh³j‡Íh´Mf ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj‡ÎjHj‡ÎjI‰jJ‰jK‰uh1híh²hhjKò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:141: ./mm/percpu.c”h´Mj hj‹Îubj¤)�”}”(hhh]”(j©)�”}”(hŒ'``int nr_groups`` the number of groups ”h]”(j¯)�”}”(hŒ``int nr_groups``”h]”jS)�”}”(hj°Îh]”hŒ int nr_groups”…”�”}”(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:141: ./mm/percpu.c”h´Mg 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´Mg hjÆÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjªÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÅÎh´Mg 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:141: ./mm/percpu.c”h´Mh hjãÎ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´Mh hjÿÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjãÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jþÎh´Mh 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:141: ./mm/percpu.c”h´Mj 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”…”�”}”(hjBÏ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”…”�”}”(hjTÏ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”…”�”}”(hjfÏ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:141: ./mm/percpu.c”h´Mi 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:141: ./mm/percpu.c”h´Mo 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:141: ./mm/percpu.c”h´Mp hj‹Îubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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àhjÂÏh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./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_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&]”uh1jhjãÏubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÂÏh²hh³jÔÏh´M’ ubj8)�”}”(hŒ(struct pcpu_alloc_info *ai)”h]”j>)�”}”(hŒstruct pcpu_alloc_info *ai”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÿÏubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÿÏubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”j#ÐŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjéÏsbŒc.pcpu_free_alloc_info”†”asbuh1hhjÿÏubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAÐh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÿÏubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjOÐh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÿÏ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&]”jjuh1j7hjÂÏ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 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:141: ./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²hhjKò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:141: ./mm/percpu.c”h´M– hj¢Ð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:141: ./mm/percpu.c”h´M“ hjÁÐubjÉ)�”}”(hhh]”jM)�”}”(hŒpcpu_alloc_info to free”h]”hŒpcpu_alloc_info 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¾Ð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:141: ./mm/percpu.c”h´M• hj¢Ð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:141: ./mm/percpu.c”h´M” hj¢Ðubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hjYÑh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjUÑh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´M� ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhÑh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjUÑh²hh³jgÑh´M� ubhÿ)�”}”(hŒpcpu_dump_alloc_info”h]”j)�”}”(hŒpcpu_dump_alloc_info”h]”hŒpcpu_dump_alloc_info”…”�”}”(hjzÑh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjvÑubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjUÑh²hh³jgÑh´M� ubj8)�”}”(hŒ3(const char *lvl, const struct pcpu_alloc_info *ai)”h]”(j>)�”}”(hŒconst char *lvl”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œ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’Ñubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÍÑh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj’Ñubj)�”}”(hŒlvl”h]”hŒlvl”…”�”}”(hjÚÑh²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]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjïÑubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjïÑubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”j.ÒŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj|ÑsbŒc.pcpu_dump_alloc_info”†”asbuh1hhjïÑubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLÒh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjïÑubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjZÒh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjïÑubj)�”}”(hŒai”h]”hŒai”…”�”}”(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&]”jjuh1j7hjUÑh²hh³jgÑh´M� ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjQÑh²hh³jgÑh´M� ubah}”(h]”jLÑah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jgÑh´M� hjNÑ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:141: ./mm/percpu.c”h´M� hjŽÒh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjNÑh²hh³jgÑh´M� ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj©ÒjHj©ÒjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(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:141: ./mm/percpu.c”h´M¡ hj­Òubj¤)�”}”(hhh]”(j©)�”}”(hŒ``const char *lvl`` loglevel ”h]”(j¯)�”}”(hŒ``const char *lvl``”h]”jS)�”}”(hjÒÒh]”hŒconst char *lvl”…”�”}”(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:141: ./mm/percpu.c”h´Mž hjÌÒ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ÈhjÌÒ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:141: ./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£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:141: ./mm/percpu.c”h´M¡ hj­Ò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”…”�”}”(hjdÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj\ÓubhŒ using loglevel ”…”�”}”(hj\Óh²hh³Nh´NubjŽ)�”}”(hŒ**lvl**”h]”hŒlvl”…”�”}”(hjvÓ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:141: ./mm/percpu.c”h´M  hj­Òubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(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:141: ./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_setup_first_chunk”h]”j)�”}”(hŒpcpu_setup_first_chunk”h]”hŒpcpu_setup_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Ö ubj8)�”}”(hŒ3(const struct pcpu_alloc_info *ai, void *base_addr)”h]”(j>)�”}”(hŒ const struct pcpu_alloc_info *ai”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjèÓubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjèÓubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”j'ÔŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÒÓsbŒc.pcpu_setup_first_chunk”†”asbuh1hhjèÓubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEÔh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjèÓubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjSÔh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjèÓ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äÓubj>)�”}”(hŒvoid *base_addr”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjyÔh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjuÔubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡Ôh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjuÔubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj•Ôh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjuÔubj)�”}”(hŒ base_addr”h]”hŒ base_addr”…”�”}”(hj¢Ôh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjuÔubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjäÓubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj«Ó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Œ!initialize the first percpu chunk”h]”hŒ!initialize the first percpu chunk”…”�”}”(hjÌÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./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²hhjKò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:141: ./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:141: ./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)�”}”(hjFÕh]”hŒvoid *base_addr”…”�”}”(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:141: ./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:141: ./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:141: ./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:141: ./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�hjÃÕubhŒ# is the size of static percpu area.”…”�”}”(hjÃÕh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./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”…”�”}”(hjäÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjàÕ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.”…”�”}”(hjàÕh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./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”…”�”}”(hj7Ö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”…”�”}”(hjIÖ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:141: ./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”…”�”}”(hjfÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjbÖubhŒR specifies unit size and must be aligned to PAGE_SIZE and equal to or larger than ”…”�”}”(hjbÖh²hh³Nh´NubjŽ)�”}”(hŒ**ai->static_size**”h]”hŒai->static_size”…”�”}”(hjxÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjbÖubhŒ + ”…”�”}”(hjbÖh²hh³Nh´NubjŽ)�”}”(hŒ**ai->reserved_size**”h]”hŒai->reserved_size”…”�”}”(hjŠÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjbÖubhŒ + ”…”�”}”(hjbÖh²hh³Nh´NubjŽ)�”}”(hŒ**ai->dyn_size**”h]”hŒ ai->dyn_size”…”�”}”(hjœÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjbÖubhŒ.”…”�”}”(hjbÖh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./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”…”�”}”(hj¹Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjµÖubhŒ@ is the allocation atom size and used as alignment for vm areas.”…”�”}”(hjµÖh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./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”…”�”}”(hjÖÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÒÖubhŒ/ is the allocation size and always multiple of ”…”�”}”(hjÒÖh²hh³Nh´NubjŽ)�”}”(hŒ**ai->atom_size**”h]”hŒ ai->atom_size”…”�”}”(hjèÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÒÖubhŒ. This is larger than ”…”�”}”(hjÒÖh²hh³Nh´NubjŽ)�”}”(hŒ**ai->atom_size**”h]”hŒ ai->atom_size”…”�”}”(hjúÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÒÖubhŒ if ”…”�”}”(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 larger than ”…”�”}”(hjÒÖh²hh³Nh´NubjŽ)�”}”(hŒ**ai->atom_size**”h]”hŒ ai->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:141: ./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�hj7×ubhŒ and ”…”�”}”(hj7×h²hh³Nh´NubjŽ)�”}”(hŒ**ai->groups**”h]”hŒ ai->groups”…”�”}”(hjM×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj7×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 ”…”�”}”(hj7×h²hh³Nh´NubjŽ)�”}”(hŒ**ai->nr_groups**”h]”hŒ ai->nr_groups”…”�”}”(hj_×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj7×ubhŒ9 is zero, a single group containing all units is assumed.”…”�”}”(hj7×h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./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 ”…”�”}”(hjx×h²hh³Nh´NubjŽ)�”}”(hŒ **base_addr**”h]”hŒ base_addr”…”�”}”(hj€×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjx×ubhŒ% and copied static data to each unit.”…”�”}”(hjx×h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./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:141: ./mm/percpu.c”h´M hjèÔubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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:141: ./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)�”}”(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”jèŒ reftarget”jé׌modname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒpcpu_build_alloc_info”sbŒc.pcpu_build_alloc_info”†”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è ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÄ×h²hh³jÕ×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þhjÄ×h²hh³jÕ×h´Mè ubj8)�”}”(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”…”�”}”(hjEØh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjBØubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jGØŒmodname”NŒ classname”Njìjï)�”}”jò]”jØŒc.pcpu_build_alloc_info”†”asbuh1hhj>Øubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcØh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj>Øubj)�”}”(hŒ reserved_size”h]”hŒ reserved_size”…”�”}”(hjqØ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”jèŒ reftarget”j�ØŒmodname”NŒ classname”Njìjï)�”}”jò]”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Œdyn_size”h]”hŒdyn_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 atom_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”jèŒ reftarget”jרŒmodname”NŒ classname”Njìjï)�”}”jò]”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Œ atom_size”h]”hŒ atom_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_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”jèŒ reftarget”jÙŒmodname”NŒ classname”Njìjï)�”}”jò]”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”…”�”}”(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&]”jjuh1j7hjÄ×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Œ3build alloc_info considering distances between CPUs”h]”hŒ3build alloc_info considering distances between CPUs”…”�”}”(hjsÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.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²hhjKò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:141: ./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:141: ./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:141: ./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:141: ./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)�”}”(hj_Úh]”hŒ)pcpu_fc_cpu_distance_fn_t cpu_distance_fn”…”�”}”(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:141: ./mm/percpu.c”h´Mì hjYÚubjÉ)�”}”(hhh]”jM)�”}”(hŒ5callback to determine distance between cpus, optional”h]”hŒ5callback to determine distance between cpus, optional”…”�”}”(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«Ù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:141: ./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.”…”�”}”(hj°Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./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.”…”�”}”(hj¿Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.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:141: ./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:141: ./mm/percpu.c”h´Mø hj�Ùubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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:141: ./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”…”�”}”(hj6Ûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2Ûubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjÛh²hh³j#Ûh´M° ubj8)�”}”(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”…”�”}”(hjUÛh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjRÛubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jWÛŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj8ÛsbŒc.pcpu_embed_first_chunk”†”asbuh1hhjNÛubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuÛh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjNÛubj)�”}”(hŒ reserved_size”h]”hŒ reserved_size”…”�”}”(hjƒÛh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjNÛubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjJÛ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”jèŒ reftarget”j¡ÛŒmodname”NŒ classname”Njìjï)�”}”jò]”jqÛŒ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Œdyn_size”h]”hŒdyn_size”…”�”}”(hjËÛh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj˜Ûubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjJÛ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&]”uh1jhjäÛubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jéÛŒmodname”NŒ classname”Njìjï)�”}”jò]”jqÛŒ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Œ atom_size”h]”hŒ atom_size”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjàÛubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjJÛ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”jèŒ reftarget”j1ÜŒmodname”NŒ classname”Njìjï)�”}”jò]”jqÛŒc.pcpu_embed_first_chunk”†”asbuh1hhj(Üubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMÜ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=hjJÛ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”…”�”}”(hjwÜh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjtÜubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jyÜŒmodname”NŒ classname”Njìjï)�”}”jò]”jqÛŒc.pcpu_embed_first_chunk”†”asbuh1hhjpÜubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•Üh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjpÜubj)�”}”(hŒ cpu_to_nd_fn”h]”hŒ cpu_to_nd_fn”…”�”}”(hj£Üh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjpÜubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjJÛubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÛ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”…”�”}”(hjÍÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./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²hhjKò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:141: ./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:141: ./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)�”}”(hjGÝh]”hŒsize_t dyn_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:141: ./mm/percpu.c”h´M² hjAÝ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ÈhjAÝ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:141: ./mm/percpu.c”h´M³ hjzÝ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ÈhjzÝ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)�”}”(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:141: ./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´ 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:141: ./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:141: ./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.”…”�”}”(hjCÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./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 ”…”�”}”(hjRÞh²hh³Nh´NubjŽ)�”}”(hŒ **atom_size**”h]”hŒ atom_size”…”�”}”(hjZÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjRÞubhŒ aligned to ”…”�”}”(hjRÞh²hh³Nh´NubjŽ)�”}”(hŒ **atom_size**”h]”hŒ atom_size”…”�”}”(hjlÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjRÞubhŒ.”…”�”}”(hjRÞh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./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:141: ./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:141: ./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.”…”�”}”(hj±Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.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:141: ./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:141: ./mm/percpu.c”h´MË hjéÜubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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:141: ./mm/percpu.c”h´Mq ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjßh²hh³jßh´Mq 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´Mq ubj8)�”}”(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”…”�”}”(hjGßh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjDßubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jIߌmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj*ßsbŒc.pcpu_page_first_chunk”†”asbuh1hhj@ßubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgßh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj@ßubj)�”}”(hŒ reserved_size”h]”hŒ reserved_size”…”�”}”(hjuß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”jèŒ reftarget”j“ߌmodname”NŒ classname”Njìjï)�”}”jò]”jcߌ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Œ cpu_to_nd_fn”h]”hŒ cpu_to_nd_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&]”jjuh1j7hjßh²hh³jßh´Mq ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÿÞh²hh³jßh´Mq ubah}”(h]”júÞah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jßh´Mq 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:141: ./mm/percpu.c”h´Mq hjäßh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjüÞh²hh³jßh´Mq ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÿßjHjÿßjI‰jJ‰jK‰uh1híh²hhjKò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:141: ./mm/percpu.c”h´Mu 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:141: ./mm/percpu.c”h´Mr hj"àubjÉ)�”}”(hhh]”jM)�”}”(hŒ)the size of reserved percpu area in bytes”h]”hŒ)the size of reserved percpu area in bytes”…”�”}”(hjAàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j=àh´Mr hj>àubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj"àubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j=àh´Mr 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)�”}”(hjaàh]”hŒ%pcpu_fc_cpu_to_node_fn_t cpu_to_nd_fn”…”�”}”(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:141: ./mm/percpu.c”h´Ms 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”…”�”}”(hjzàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jvàh´Ms hjwàubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj[àubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jvàh´Ms 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:141: ./mm/percpu.c”h´Mu 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.”…”�”}”(hj²àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´Mt 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.”…”�”}”(hjÁàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:141: ./mm/percpu.c”h´Mw 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:141: ./mm/percpu.c”h´Mz 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:141: ./mm/percpu.c”h´M{ hjàubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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:142: ./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”…”�”}”(hj8áh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj4áubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjáh²hh³j%áh´Kpubj8)�”}”(hŒ0(void *dst, const void __user *src, size_t size)”h]”(j>)�”}”(hŒ void *dst”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(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áubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjpáh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjPáubj)�”}”(hŒdst”h]”hŒdst”…”�”}”(hj}áh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjPáubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjLáubj>)�”}”(hŒconst void __user *src”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œ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’áubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjßáh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj’á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=hjLá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”jèŒ reftarget”j âŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj:á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”…”�”}”(hj6â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&]”jjuh1j7hjá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:142: ./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&]”jFjAjGjxâjHjxâjI‰jJ‰jK‰uh1híh²hhjKò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:142: ./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)�”}”(hj¡âh]”hŒ void *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:142: ./mm/maccess.c”h´Kqhj›âubjÉ)�”}”(hhh]”jM)�”}”(hŒ.pointer to the buffer that shall take the data”h]”hŒ.pointer to the buffer that shall take the data”…”�”}”(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˜â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)�”}”(hjÚâh]”hŒconst void __user *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:142: ./mm/maccess.c”h´KrhjÔâ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ÈhjÔâ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:142: ./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Ž)�”}”(hjNãh]”hŒ Description”…”�”}”(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:142: ./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 ”…”�”}”(hjdãh²hh³Nh´NubjŽ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hjlãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjdãubhŒ to the buffer at ”…”�”}”(hjdãh²hh³Nh´NubjŽ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hj~ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjdãubhŒ<. If a kernel fault happens, handle that and return -EFAULT.”…”�”}”(hjdãh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/maccess.c”h´Kthj|âubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(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:142: ./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Œcopy_to_user_nofault”h]”j)�”}”(hŒcopy_to_user_nofault”h]”hŒcopy_to_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�ubj8)�”}”(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ðãubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj"äh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjðã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]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjHäh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjDäubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUäh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjDäubjá)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjcäh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjDäubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqäh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjDäubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjDäubj)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(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”jèŒ reftarget”jªäŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÚãsbŒc.copy_to_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&]”jjuh1j7hj³ã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Œ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:142: ./mm/maccess.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²hhjKò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:142: ./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)�”}”(hjAåh]”hŒvoid __user *dst”…”�”}”(hjCå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:142: ./mm/maccess.c”h´KŽhj;åubjÉ)�”}”(hhh]”jM)�”}”(hŒaddress to write to”h]”hŒaddress to write to”…”�”}”(hjZåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jVåh´KŽhjWåubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj;åubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jVåh´KŽhj8åubj©)�”}”(hŒ>``const void *src`` pointer to the data that shall be written ”h]”(j¯)�”}”(hŒ``const void *src``”h]”jS)�”}”(hjzåh]”hŒconst void *src”…”�”}”(hj|åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjxåubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/maccess.c”h´K�hjtå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Èhjtåubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�åh´K�hj8å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:142: ./mm/maccess.c”h´K�hj­å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´K�hjÉåubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj­åubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÈåh´K�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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./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:142: ./mm/maccess.c”h´K‘hjåubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hjWæh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjSæh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/maccess.c”h´K¦ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfæh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjSæh²hh³jeæh´K¦ubhÿ)�”}”(hŒstrncpy_from_user_nofault”h]”j)�”}”(hŒstrncpy_from_user_nofault”h]”hŒstrncpy_from_user_nofault”…”�”}”(hjxæh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjtæubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjSæh²hh³jeæh´K¦ubj8)�”}”(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Œ ”…”�”}”(hj¢æh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�æubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj°æh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj�æ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 *unsafe_addr”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œ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Òæubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÒæubj)�”}”(hŒ unsafe_addr”h]”hŒ unsafe_addr”…”�”}”(hj,çh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÒæubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjŒæubj>)�”}”(hŒ long count”h]”(já)�”}”(hŒlong”h]”hŒlong”…”�”}”(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Œcount”h]”hŒcount”…”�”}”(hjaç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&]”jjuh1j7hjSæh²hh³jeæh´K¦ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjOæh²hh³jeæh´K¦ubah}”(h]”jJæah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jeæh´K¦hjLæh²hubj4)�”}”(hhh]”j^)�”}”(hhh]”jc)�”}”(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:142: ./mm/maccess.c”h´K¦hjŽçubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhj‹çh²hh³jŸçh´Nubah}”(h]”h ]”h"]”h$]”h&]”j‚jƒuh1j]h³jŸçh´K¦hjˆçh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjLæh²hh³jeæh´K¦ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjµçjHjµçjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(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:142: ./mm/maccess.c”h´Kªhj¹ç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)�”}”(hjÞçh]”hŒ char *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:142: ./mm/maccess.c”h´K©hjØç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:142: ./mm/maccess.c”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Œ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:142: ./mm/maccess.c”h´Kªhj$èubjÉ)�”}”(hhh]”jM)�”}”(hŒUnsafe user address.”h]”hŒUnsafe user address.”…”�”}”(hjCè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ŒL``long count`` Maximum number of bytes to copy, including the trailing NUL. ”h]”(j¯)�”}”(hŒ``long count``”h]”jS)�”}”(hjcèh]”hŒ long count”…”�”}”(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:142: ./mm/maccess.c”h´K«hj]èubjÉ)�”}”(hhh]”jM)�”}”(hŒ)�”}”(hŒconst void __user *unsafe_addr”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œ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‘éubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÞéh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj‘éubj)�”}”(hŒ unsafe_addr”h]”hŒ unsafe_addr”…”�”}”(hjëéh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj‘é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&]”jjuh1j7hjTéh²hh³jféh´KÎubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjPéh²hh³jféh´KÎubah}”(h]”jKéah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jféh´KÎhjMéh²hubj4)�”}”(hhh]”j^)�”}”(hhh]”jc)�”}”(hŒ2Get the size of a user string INCLUDING final NUL.”h]”jM)�”}”(hjOêh]”hŒ2Get the size of a user string INCLUDING final NUL.”…”�”}”(hjQêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/maccess.c”h´KÎhjMêubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjJêh²hh³j^êh´Nubah}”(h]”h ]”h"]”h$]”h&]”j‚jƒuh1j]h³j^êh´KÎhjGêh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjMéh²hh³jféh´KÎubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjtêjHjtêjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hX**Parameters** ``const void __user *unsafe_addr`` The string to measure. ``long count`` Maximum count (including NUL) **Description** Get the size of a NUL-terminated string in user space without pagefault. Returns the size of the string INCLUDING the terminating NUL. 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. 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:142: ./mm/maccess.c”h´KÒhjxêubj¤)�”}”(hhh]”(j©)�”}”(hŒ:``const void __user *unsafe_addr`` The string to measure. ”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:142: ./mm/maccess.c”h´KÏhj—êubjÉ)�”}”(hhh]”jM)�”}”(hŒThe string to measure.”h]”hŒThe string to measure.”…”�”}”(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Œ-``long count`` Maximum count (including 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:142: ./mm/maccess.c”h´KÐhjÐê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ÈhjÐêubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jëêh´KÐhj”ê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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/maccess.c”h´KÒhjxê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:142: ./mm/maccess.c”h´KÑhjxêubjM)�”}”(hŒ=Returns the size of the string INCLUDING the terminating NUL.”h]”hŒ=Returns the size of the string INCLUDING the terminating NUL.”…”�”}”(hj6ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/maccess.c”h´KÓhjxê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 ”…”�”}”(hjEëh²hh³Nh´NubjŽ)�”}”(hŒ **count**”h]”hŒcount”…”�”}”(hjMëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjEëubhŒg. User has to check the return value against “> countâ€�. On exception (or invalid count), returns 0.”…”�”}”(hjEëh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/maccess.c”h´KÕhjxê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.”…”�”}”(hjfëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:142: ./mm/maccess.c”h´KÙhjxêubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ&writeback_throttling_sane (C function)”Œc.writeback_throttling_sane”hNt”auh1hÜhjKò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:143: ./mm/vmscan.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Œwriteback_throttling_sane”h]”j)�”}”(hŒwriteback_throttling_sane”h]”hŒwriteback_throttling_sane”…”�”}”(hjµëh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj±ëubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj‘ëh²hh³j¢ëh´Køubj8)�”}”(hŒ(struct scan_control *sc)”h]”j>)�”}”(hŒstruct scan_control *sc”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÑëh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÍëubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞëh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÍëubh)�”}”(hhh]”j)�”}”(hŒ scan_control”h]”hŒ scan_control”…”�”}”(hjïëh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjìëubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jñëŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj·ësbŒc.writeback_throttling_sane”†”asbuh1hhjÍëubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÍëubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÍëubj)�”}”(hŒsc”h]”hŒsc”…”�”}”(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&]”jjuh1j7hj‘ë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Œ2is the usual dirty throttling mechanism available?”h]”hŒ2is the usual dirty throttling mechanism available?”…”�”}”(hjTìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:143: ./mm/vmscan.c”h´KøhjQìh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjŠëh²hh³j¢ëh´Køubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjlìjHjlìjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjvìh]”hŒ Parameters”…”�”}”(hjxìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjtìubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:143: ./mm/vmscan.c”h´Kühjpì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:143: ./mm/vmscan.c”h´Kùhj�ìubjÉ)�”}”(hhh]”jM)�”}”(hŒscan_control in question”h]”hŒscan_control in question”…”�”}”(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£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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:143: ./mm/vmscan.c”h´Kûhjpì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:143: ./mm/vmscan.c”h´Kúhjpì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:143: ./mm/vmscan.c”h´Mhjpìubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒlruvec_lru_size (C function)”Œc.lruvec_lru_size”hNt”auh1hÜhjKò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:143: ./mm/vmscan.c”h´MÍubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3íh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj íh²hh³j2íh´MÍubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjAíh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj íh²hh³j2íh´MÍubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOíh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj íh²hh³j2íh´MÍubhÿ)�”}”(hŒlruvec_lru_size”h]”j)�”}”(hŒlruvec_lru_size”h]”hŒlruvec_lru_size”…”�”}”(hjaíh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj]íubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj íh²hh³j2íh´MÍubj8)�”}”(hŒ8(struct lruvec *lruvec, enum lru_list lru, int zone_idx)”h]”(j>)�”}”(hŒstruct lruvec *lruvec”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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í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”jèŒ reftarget”j�íŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjcísbŒc.lruvec_lru_size”†”asbuh1hhjyíubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»íh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjyíubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÉíh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjyíubj)�”}”(hŒlruvec”h]”hŒlruvec”…”�”}”(hjÖíh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjyíubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjuíubj>)�”}”(hŒenum lru_list lru”h]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(hjïíh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjëíubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüíh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjëíubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jîŒmodname”NŒ classname”Njìjï)�”}”jò]”j·íŒ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”…”�”}”(hj9îh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjëíubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjuíubj>)�”}”(hŒ int zone_idx”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjRîh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjNîubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`îh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjNîubj)�”}”(hŒzone_idx”h]”hŒzone_idx”…”�”}”(hjnîh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjNîubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjuíubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj í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Œ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:143: ./mm/vmscan.c”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²hhjKò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Ž)�”}”(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:143: ./mm/vmscan.c”h´MÑhj´îubj¤)�”}”(hhh]”(j©)�”}”(hŒ%``struct lruvec *lruvec`` 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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:143: ./mm/vmscan.c”h´MÎhjÓî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ÈhjÓîubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jîîh´MÎhjÐî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:143: ./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ÏhjÐî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)�”}”(hjKïh]”hŒ int zone_idx”…”�”}”(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:143: ./mm/vmscan.c”h´MÑhjEï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)”…”�”}”(hjdïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:143: ./mm/vmscan.c”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´îubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒremove_mapping (C function)”Œc.remove_mapping”hNt”auh1hÜhjKò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àhj¡ïh²hh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:143: ./mm/vmscan.c”h´Mjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´ïh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¡ïh²hh³j³ïh´Mjubhÿ)�”}”(hŒremove_mapping”h]”j)�”}”(hŒremove_mapping”h]”hŒremove_mapping”…”�”}”(hjÆïh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÂïubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¡ïh²hh³j³ïh´Mjubj8)�”}”(hŒ4(struct address_space *mapping, struct folio *folio)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjâïh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÞïubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïïh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÞïubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jðŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÈïsbŒc.remove_mapping”†”asbuh1hhjÞïubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ðh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÞïubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj.ðh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÞï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 folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjTðh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjPðubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjaðh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjPðubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjrðh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjoðubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jtðŒmodname”NŒ classname”Njìjï)�”}”jò]”jðŒc.remove_mapping”†”asbuh1hhjPðubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�ðh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjPðubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjžðh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjPðubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj«ðh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjPðubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÚïubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj¡ï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Œ+Attempt to remove a folio from its mapping.”h]”hŒ+Attempt to remove a folio from its mapping.”…”�”}”(hjÕðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:143: ./mm/vmscan.c”h´MjhjÒð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²hhjKò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:143: ./mm/vmscan.c”h´Mnhjñð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:143: ./mm/vmscan.c”h´Mkhjñ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´Mkhj,ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjñubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j+ñh´Mkhj ñubj©)�”}”(hŒ-``struct folio *folio`` The folio to remove. ”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:143: ./mm/vmscan.c”h´MlhjIñubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to remove.”h]”hŒThe folio to remove.”…”�”}”(hjhñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jdñh´Mlhjeñubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjIñubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jdñh´Mlhj ñ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:143: ./mm/vmscan.c”h´Mnhjñð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.”…”�”}”(hj ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:143: ./mm/vmscan.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:143: ./mm/vmscan.c”h´Mphjñð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:143: ./mm/vmscan.c”h´Mphjñð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:143: ./mm/vmscan.c”h´Mshjñð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:143: ./mm/vmscan.c”h´Mrhjñðubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´Nube(hÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ&remove_mapping_set_shadow (C function)”Œc.remove_mapping_set_shadow”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒtlong remove_mapping_set_shadow (struct address_space *mapping, struct folio *folio, struct mem_cgroup *target_memcg)”h]”hù)�”}”(hŒslong remove_mapping_set_shadow(struct address_space *mapping, struct folio *folio, struct mem_cgroup *target_memcg)”h]”(já)�”}”(hŒlong”h]”hŒlong”…”�”}”(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:143: ./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Œremove_mapping_set_shadow”h]”j)�”}”(hŒremove_mapping_set_shadow”h]”hŒremove_mapping_set_shadow”…”�”}”(hj>òh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj:òubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjòh²hh³j+òh´M{ubj8)�”}”(hŒU(struct address_space *mapping, struct folio *folio, struct mem_cgroup *target_memcg)”h]”(j>)�”}”(hŒstruct address_space *mapping”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjZòh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjVòubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgòh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjVòubh)�”}”(hhh]”j)�”}”(hŒ address_space”h]”hŒ address_space”…”�”}”(hjxòh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjuòubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jzòŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj@òsbŒc.remove_mapping_set_shadow”†”asbuh1hhjVòubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜òh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjVòubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¦òh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjVòubj)�”}”(hŒmapping”h]”hŒmapping”…”�”}”(hj³òh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjVòubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjRòubj>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÌòh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÈòubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙòh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÈòubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjêòh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjçòubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jìòŒmodname”NŒ classname”Njìjï)�”}”jò]”j”òŒc.remove_mapping_set_shadow”†”asbuh1hhjÈòubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÈòubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÈò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=hjRòubj>)�”}”(hŒstruct mem_cgroup *target_memcg”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj<óh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj8óubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIóh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj8óubh)�”}”(hhh]”j)�”}”(hŒ mem_cgroup”h]”hŒ mem_cgroup”…”�”}”(hjZóh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjWóubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j\óŒmodname”NŒ classname”Njìjï)�”}”jò]”j”òŒc.remove_mapping_set_shadow”†”asbuh1hhj8óubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxóh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj8óubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj†óh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj8óubj)�”}”(hŒ target_memcg”h]”hŒ target_memcg”…”�”}”(hj“óh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj8óubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjRòubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjò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 a folio and record an eviction shadow.”h]”hŒ-Remove a folio and record an eviction shadow.”…”�”}”(hj½óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:143: ./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&]”jFjAjGjÕójHjÕójI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hXb**Parameters** ``struct address_space *mapping`` The address space. ``struct folio *folio`` The folio to remove. ``struct mem_cgroup *target_memcg`` The memcg to charge the eviction shadow to; the caller must keep it alive across the call. **Description** Like remove_mapping(), but stores a workingset eviction shadow the way page reclaim does, so that a later refault can be detected and the folio re-activated. **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:143: ./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:143: ./mm/vmscan.c”h´M|hjøó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´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 to remove. ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj7ôh]”hŒstruct folio *folio”…”�”}”(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:143: ./mm/vmscan.c”h´M}hj1ôubjÉ)�”}”(hhh]”jM)�”}”(hŒThe folio to remove.”h]”hŒThe folio to remove.”…”�”}”(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Œ``struct mem_cgroup *target_memcg`` The memcg to charge the eviction shadow to; the caller must keep it alive across the call. ”h]”(j¯)�”}”(hŒ#``struct mem_cgroup *target_memcg``”h]”jS)�”}”(hjpôh]”hŒstruct mem_cgroup *target_memcg”…”�”}”(hjrôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjnôubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:143: ./mm/vmscan.c”h´MhjjôubjÉ)�”}”(hhh]”jM)�”}”(hŒZThe memcg to charge the eviction shadow to; the caller must keep it alive across the call.”h]”hŒZThe memcg to charge the eviction shadow to; the caller must keep it alive across the call.”…”�”}”(hj‰ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:143: ./mm/vmscan.c”h´M~hj†ô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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:143: ./mm/vmscan.c”h´M�hjÙóubjM)�”}”(hŒ�Like remove_mapping(), but stores a workingset eviction shadow the way page reclaim does, so that a later refault can be detected and the folio re-activated.”h]”hŒ�Like remove_mapping(), but stores a workingset eviction shadow the way page reclaim does, so that a later refault can be detected and the folio re-activated.”…”�”}”(hjÂôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:143: ./mm/vmscan.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:143: ./mm/vmscan.c”h´M„hjÙó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:143: ./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:143: ./mm/vmscan.c”h´M‡hjÙó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:143: ./mm/vmscan.c”h´M†hjÙóubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_putback_lru (C function)”Œc.folio_putback_lru”hNt”auh1hÜhjKò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:143: ./mm/vmscan.c”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_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³jMõh´M‘ubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj|õh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjxõ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”jèŒ reftarget”jœõŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjbõsbŒc.folio_putback_lru”†”asbuh1hhjxõubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºõh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjxõubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÈõh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjxõ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&]”jjuh1j7hj;õh²hh³jMõh´M‘ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj7õh²hh³jMõh´M‘ubah}”(h]”j2õah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jMõh´M‘hj4õh²hubj4)�”}”(hhh]”jM)�”}”(hŒ8Put previously isolated folio onto appropriate LRU list.”h]”hŒ8Put previously isolated folio onto appropriate LRU list.”…”�”}”(hjÿõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:143: ./mm/vmscan.c”h´M‘hjüõh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj4õh²hh³jMõh´M‘ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjöjHjöjI‰jJ‰jK‰uh1híh²hhjKò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:143: ./mm/vmscan.c”h´M•hjö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”…”�”}”(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:143: ./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.”…”�”}”(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Œ**Description**”h]”jŽ)�”}”(hj{öh]”hŒ Description”…”�”}”(hj}öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjyöubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:143: ./mm/vmscan.c”h´M”hjö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:143: ./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:143: ./mm/vmscan.c”h´M–hjö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:143: ./mm/vmscan.c”h´M—hjöubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_isolate_lru (C function)”Œc.folio_isolate_lru”hNt”auh1hÜhjKò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”…”�”}”(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:143: ./mm/vmscan.c”h´MZubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjõöh²hh³j÷h´MZubhÿ)�”}”(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þhjõöh²hh³j÷h´MZubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj5÷h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj1÷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”jèŒ reftarget”jU÷Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj÷sbŒc.folio_isolate_lru”†”asbuh1hhj1÷ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs÷h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj1÷ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj�÷h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj1÷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&]”jjuh1j7hjõöh²hh³j÷h´MZubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjñöh²hh³j÷h´MZubah}”(h]”jìöah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j÷h´MZhjîö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:143: ./mm/vmscan.c”h´MZhjµ÷h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjîöh²hh³j÷h´MZubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjÐ÷jHjÐ÷jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(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:143: ./mm/vmscan.c”h´M^hjÔ÷ubj¤)�”}”(hhh]”j©)�”}”(hŒ<``struct folio *folio`` Folio to isolate from its 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:143: ./mm/vmscan.c”h´M[hjó÷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È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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:143: ./mm/vmscan.c”h´M]hjÔ÷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 ”…”�”}”(hjJøh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjRøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjJøubhŒf from an LRU list and adjust the vmstat statistic corresponding to whatever LRU list the folio was on.”…”�”}”(hjJøh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:143: ./mm/vmscan.c”h´M\hjÔ÷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.”…”�”}”(hjkøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:143: ./mm/vmscan.c”h´M_hjÔ÷ubjÓM)�”}”(hhh]”(jc)�”}”(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:143: ./mm/vmscan.c”h´Mehj}øubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjzøubjc)�”}”(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:143: ./mm/vmscan.c”h´Mhhj–øubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjzøubjc)�”}”(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:143: ./mm/vmscan.c”h´Mihj®øubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjzøubeh}”(h]”h ]”h"]”h$]”h&]”j?Nj@NjANj�?jBNjÆ?uh1jÒMhjÔ÷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:143: ./mm/vmscan.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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:143: ./mm/vmscan.c”h´MghjÔ÷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.”…”�”}”(hjýøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:143: ./mm/vmscan.c”h´MmhjÔ÷ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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:143: ./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”…”�”}”(hjMùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjIùubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj(ùh²hh³j:ùh´M ubj8)�”}”(hŒ(struct folio_batch *fbatch)”h]”j>)�”}”(hŒstruct folio_batch *fbatch”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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ù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”jèŒ reftarget”j‰ùŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjOùsbŒc.check_move_unevictable_folios”†”asbuh1hhjeùubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§ùh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjeùubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjµùh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjeùubj)�”}”(hŒfbatch”h]”hŒfbatch”…”�”}”(hjÂùh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjeùubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjaùubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj(ù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:143: ./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&]”jFjAjGjújHjújI‰jJ‰jK‰uh1híh²hhjKò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:143: ./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:143: ./mm/vmscan.c”h´M hj'úubjÉ)�”}”(hhh]”jM)�”}”(hŒBatch of lru folios to check.”h]”hŒBatch of lru folios to check.”…”�”}”(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$ú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³ŒL/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:143: ./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:143: ./mm/vmscan.c”h´M hjúubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ__remove_pages (C function)”Œc.__remove_pages”hNt”auh1hÜhjKò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:144: ./mm/memory_hotplug.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Œ__remove_pages”h]”j)�”}”(hŒ__remove_pages”h]”hŒ__remove_pages”…”�”}”(hjÎúh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÊúubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj©úh²hh³j»úh´M3ubj8)�”}”(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à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 nr_pages”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj;ûh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj7ûubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIûh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj7ûubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjWûh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj7ûubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeûh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj7ûubj)�”}”(hŒnr_pages”h]”hŒnr_pages”…”�”}”(hjsûh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj7ûubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjâúubj>)�”}”(hŒstruct vmem_altmap *altmap”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjŒûh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjˆûubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™ûh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjˆûubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j¬ûŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÐúsbŒc.__remove_pages”†”asbuh1hhjˆûubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊûh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjˆûubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjØûh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjˆûubj)�”}”(hŒaltmap”h]”hŒaltmap”…”�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjþûh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjúûubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj üh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjúûubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jüŒmodname”NŒ classname”Njìjï)�”}”jò]”jÆûŒc.__remove_pages”†”asbuh1hhjúûubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:üh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjúûubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjHüh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjúûubj)�”}”(hŒpgmap”h]”hŒpgmap”…”�”}”(hjUü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&]”jjuh1j7hj©ú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Œ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:144: ./mm/memory_hotplug.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²hhjKò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:144: ./mm/memory_hotplug.c”h´M7hj›ü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)�”}”(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³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:144: ./mm/memory_hotplug.c”h´M4hjºü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)”…”�”}”(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Œ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)�”}”(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³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:144: ./mm/memory_hotplug.c”h´M5hjóüubjÉ)�”}”(hhh]”jM)�”}”(hŒ)�”}”(hŒint nid”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjLþh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjHþubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZþh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjHþubj)�”}”(hŒnid”h]”hŒnid”…”�”}”(hjhþh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjHþubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjDþ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”jèŒ reftarget”j†þŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj2þ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=hjDþ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”jèŒ reftarget”jÐþŒmodname”NŒ classname”Njìjï)�”}”jò]”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=hjDþubj>)�”}”(hŒconst char *resource_name”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œ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ÿubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjJÿh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÿubj)�”}”(hŒ resource_name”h]”hŒ resource_name”…”�”}”(hjWÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjDþubj>)�”}”(hŒmhp_t mhp_flags”h]”(h)�”}”(hhh]”j)�”}”(hŒmhp_t”h]”hŒmhp_t”…”�”}”(hjsÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjpÿubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”juÿŒmodname”NŒ classname”Njìjï)�”}”jò]”j þŒc.__add_memory_driver_managed”†”asbuh1hhjlÿubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘ÿh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjlÿubj)�”}”(hŒ mhp_flags”h]”hŒ mhp_flags”…”�”}”(hjŸÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjlÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjDþubj>)�”}”(hŒenum mmop online_type”h]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(hj¸ÿh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj´ÿubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅÿh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj´ÿubh)�”}”(hhh]”j)�”}”(hŒmmop”h]”hŒmmop”…”�”}”(hjÖÿh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÓÿubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jØÿŒmodname”NŒ classname”Njìjï)�”}”jò]”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Œ online_type”h]”hŒ online_type”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj´ÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjDþubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj þh²hh³jþh´MZubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjþh²hh³jþh´MZubah}”(h]”jþah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jþh´MZhjþ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:144: ./mm/memory_hotplug.c”h´MZhj)h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjþh²hh³jþh´MZubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjDjHjDjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjNh]”hŒ Parameters”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjLubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:144: ./mm/memory_hotplug.c”h´M^hjHubj¤)�”}”(hhh]”(j©)�”}”(hŒ8``int nid`` NUMA node ID where the memory will be added ”h]”(j¯)�”}”(hŒ ``int nid``”h]”jS)�”}”(hjmh]”hŒint nid”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjkubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:144: ./mm/memory_hotplug.c”h´M[hjgubjÉ)�”}”(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Èhjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‚h´M[hjdubj©)�”}”(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:144: ./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”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j»h´M\hj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j»h´M\hjdubj©)�”}”(hŒ/``u64 size`` Size of the memory range in bytes ”h]”(j¯)�”}”(hŒ ``u64 size``”h]”jS)�”}”(hjßh]”hŒu64 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:144: ./mm/memory_hotplug.c”h´M]hjÙ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ÈhjÙubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jôh´M]hjdubj©)�”}”(hŒM``const char *resource_name`` Resource name in format "System RAM ($DRIVER)" ”h]”(j¯)�”}”(hŒ``const char *resource_name``”h]”jS)�”}”(hjh]”hŒconst char *resource_name”…”�”}”(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:144: ./mm/memory_hotplug.c”h´M^hjubjÉ)�”}”(hhh]”jM)�”}”(hŒ.Resource name in format "System RAM ($DRIVER)"”h]”hŒ2Resource name in format “System RAM ($DRIVER)â€�”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j-h´M^hj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j-h´M^hjdubj©)�”}”(hŒ)``mhp_t mhp_flags`` Memory hotplug flags ”h]”(j¯)�”}”(hŒ``mhp_t mhp_flags``”h]”jS)�”}”(hjQh]”hŒmhp_t mhp_flags”…”�”}”(hjSh²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:144: ./mm/memory_hotplug.c”h´M_hjKubjÉ)�”}”(hhh]”jM)�”}”(hŒMemory hotplug flags”h]”hŒMemory hotplug flags”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jfh´M_hjgubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjKubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jfh´M_hjdubj©)�”}”(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:144: ./mm/memory_hotplug.c”h´M`hj„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´M`hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŸh´M`hjdubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjHubjM)�”}”(hŒ**Description**”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:144: ./mm/memory_hotplug.c”h´MbhjHubjM)�”}”(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.”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:144: ./mm/memory_hotplug.c”h´MahjHubjM)�”}”(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:144: ./mm/memory_hotplug.c”h´MfhjHubj^)�”}”(hhh]”(jc)�”}”(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)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:144: ./mm/memory_hotplug.c”h´Mihjüubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjùubjc)�”}”(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).”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:144: ./mm/memory_hotplug.c”h´Mkhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjùubeh}”(h]”h ]”h"]”h$]”h&]”j‚jƒuh1j]h³jh´MihjHubjM)�”}”(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).”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:144: ./mm/memory_hotplug.c”h´MnhjHubjM)�”}”(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)â€�.”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:144: ./mm/memory_hotplug.c”h´MshjHubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjTh]”hŒReturn”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjRubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:144: ./mm/memory_hotplug.c”h´MvhjHubjM)�”}”(hŒ-0 on success, negative error code on failure.”h]”hŒ-0 on success, negative error code on failure.”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:144: ./mm/memory_hotplug.c”h´MwhjHubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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:144: ./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›ubj8)�”}”(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”…”�”}”(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”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj¼sbŒc.add_memory_driver_managed”†”asbuh1hhjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÎubj>)�”}”(hŒu64 size”h]”(h)�”}”(hhh]”j)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjUubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jZŒmodname”NŒ classname”Njìjï)�”}”jò]”j*Œc.add_memory_driver_managed”†”asbuh1hhjQubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjQubj)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjQubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÎubj>)�”}”(hŒconst char *resource_name”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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Œ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™ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj™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”jèŒ reftarget”jÿŒmodname”NŒ classname”Njìjï)�”}”jò]”j*Œc.add_memory_driver_managed”†”asbuh1hhjöubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²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Îubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj•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”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:144: ./mm/memory_hotplug.c”h´M›hjPh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjŽh²hh³j§h´M›ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjkjHjkjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjuh]”hŒ Parameters”…”�”}”(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:144: ./mm/memory_hotplug.c”h´MŸhjoubj¤)�”}”(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:144: ./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)�”}”(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:144: ./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”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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Œ/``u64 size`` Size of the memory range in bytes ”h]”(j¯)�”}”(hŒ ``u64 size``”h]”jS)�”}”(hjh]”hŒu64 size”…”�”}”(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:144: ./mm/memory_hotplug.c”h´MžhjubjÉ)�”}”(hhh]”jM)�”}”(hŒ!Size of the memory range in bytes”h]”hŒ!Size of the memory range in bytes”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jh´Mžhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jh´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”…”�”}”(hjAh²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:144: ./mm/memory_hotplug.c”h´MŸhj9ubjÉ)�”}”(hhh]”jM)�”}”(hŒ.Resource name in format "System RAM ($DRIVER)"”h]”hŒ2Resource name in format “System RAM ($DRIVER)â€�”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jTh´MŸhjUubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jTh´MŸhj‹ubj©)�”}”(hŒ)``mhp_t mhp_flags`` Memory hotplug flags ”h]”(j¯)�”}”(hŒ``mhp_t mhp_flags``”h]”jS)�”}”(hjxh]”hŒmhp_t mhp_flags”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjvubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:144: ./mm/memory_hotplug.c”h´M hjrubjÉ)�”}”(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Èhjrubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j�h´M hj‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjoubjM)�”}”(hŒ**Description**”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:144: ./mm/memory_hotplug.c”h´M¢hjoubjM)�”}”(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:144: ./mm/memory_hotplug.c”h´M¡hjoubjM)�”}”(hŒ1See __add_memory_driver_managed for more details.”h]”hŒ1See __add_memory_driver_managed for more details.”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:144: ./mm/memory_hotplug.c”h´M¤hjoubjM)�”}”(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:144: ./mm/memory_hotplug.c”h´M¦hjoubjM)�”}”(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:144: ./mm/memory_hotplug.c”h´M§hjoubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒtry_offline_node (C function)”Œc.try_offline_node”hNt”auh1hÜhjKò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:144: ./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”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjKubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj*h²hh³j<h´M·ubj8)�”}”(hŒ (int nid)”h]”j>)�”}”(hŒint nid”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjgubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjgubj)�”}”(hŒnid”h]”hŒnid”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjgubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjcubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj*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²hhjKò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Ž)�”}”(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:144: ./mm/memory_hotplug.c”h´M»hj¾ubj¤)�”}”(hhh]”j©)�”}”(hŒ``int nid`` the node ID ”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:144: ./mm/memory_hotplug.c”h´M¸hjÝubjÉ)�”}”(hhh]”jM)�”}”(hŒ the node ID”h]”hŒ the node ID”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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”…”�”}”(hj h²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:144: ./mm/memory_hotplug.c”h´Mºhj¾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.”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:144: ./mm/memory_hotplug.c”h´M¹hj¾ubjM)�”}”(hŒ**NOTE**”h]”jŽ)�”}”(hjEh]”hŒNOTE”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjCubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:144: ./mm/memory_hotplug.c”h´M»hj¾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:144: ./mm/memory_hotplug.c”h´M¼hj¾ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ__remove_memory (C function)”Œc.__remove_memory”hNt”auh1hÜhjKò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:144: ./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 ubj8)�”}”(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”jèŒ reftarget”jÌŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj­sbŒc.__remove_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Œu64 size”h]”(h)�”}”(hhh]”j)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jŒmodname”NŒ classname”Njìjï)�”}”jò]”jæŒc.__remove_memory”†”asbuh1hhj ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2h²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&]”jjuh1j7hj†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 hjh²hubj4)�”}”(hhh]”jM)�”}”(hŒ.Remove memory if every memory block is offline”h]”hŒ.Remove memory if every memory block is offline”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:144: ./mm/memory_hotplug.c”h´M hjgh²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²hhjKò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:144: ./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:144: ./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”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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Œ*``u64 size`` size of the region to remove ”h]”(j¯)�”}”(hŒ ``u64 size``”h]”jS)�”}”(hjäh]”hŒu64 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:144: ./mm/memory_hotplug.c”h´M hjÞubjÉ)�”}”(hhh]”jM)�”}”(hŒsize of the region to remove”h]”hŒsize of the region to remove”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:144: ./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().”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:144: ./mm/memory_hotplug.c”h´M hj†ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hjd 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:144: ./mm/memory_hotplug.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Œ 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³jr h´M~ ubj8)�”}”(hŒ4(const struct range *ranges, unsigned int nr_ranges)”h]”(j>)�”}”(hŒconst struct range *ranges”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(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œ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¼ h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj� ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉ h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj� ubh)�”}”(hhh]”j)�”}”(hŒrange”h]”hŒrange”…”�”}”(hjÚ h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj× ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÜ Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj‡ sbŒ"c.offline_and_remove_memory_ranges”†”asbuh1hhj� ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj� ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj� 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”…”�”}”(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Œ nr_ranges”h]”hŒ nr_ranges”…”�”}”(hjf 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&]”jjuh1j7hj` 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Œ)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:144: ./mm/memory_hotplug.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&]”jFjAjGj¨ jHj¨ jI‰jJ‰jK‰uh1híh²hhjKò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:144: ./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)�”}”(hjÑ h]”hŒconst struct range *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:144: ./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³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_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:144: ./mm/memory_hotplug.c”h´M€ hj 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È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Ž)�”}”(hjS h]”hŒ Description”…”�”}”(hjU h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjQ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:144: ./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().”…”�”}”(hji h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:144: ./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.”…”�”}”(hjx h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:144: ./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:144: ./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:144: ./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:144: ./mm/memory_hotplug.c”h´M‹ hj¬ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(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:145: ./mm/mmu_notifier.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©ubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÙ 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©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þhjÙ h²hh³jë h´K©ubj8)�”}”(hŒ,(struct mmu_interval_notifier *interval_sub)”h]”j>)�”}”(hŒ*struct mmu_interval_notifier *interval_sub”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj6 h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj2 ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjC h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj2 ubh)�”}”(hhh]”j)�”}”(hŒmmu_interval_notifier”h]”hŒmmu_interval_notifier”…”�”}”(hjT h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjQ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jV Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj sbŒc.mmu_interval_read_begin”†”asbuh1hhj2 ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjt h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj2 ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj‚ h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj2 ubj)�”}”(hŒ interval_sub”h]”hŒ interval_sub”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2 ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj. ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjÙ 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Œ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:145: ./mm/mmu_notifier.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²hhjKò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Ž)�”}”(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:145: ./mm/mmu_notifier.c”h´K­hjÕ 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)�”}”(hjú h]”hŒ*struct mmu_interval_notifier *interval_sub”…”�”}”(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:145: ./mm/mmu_notifier.c”h´K«hjô 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È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Ž)�”}”(hj5 h]”hŒ Description”…”�”}”(hj7 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj3 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´K­hjÕ 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.”…”�”}”(hjK h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´K¬hjÕ 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.”…”�”}”(hjZ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´K±hjÕ 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.”…”�”}”(hji h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´KµhjÕ 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().”…”�”}”(hjx h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´K¸hjÕ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"mmu_notifier_register (C function)”Œc.mmu_notifier_register”hNt”auh1hÜhjKò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:145: ./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&]”uh1jhjÄ ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj£ h²hh³jµ h´M×ubj8)�”}”(hŒ9(struct mmu_notifier *subscription, struct mm_struct *mm)”h]”(j>)�”}”(hŒ!struct mmu_notifier *subscription”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjä h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjà ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñ h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjà ubh)�”}”(hhh]”j)�”}”(hŒ mmu_notifier”h]”hŒ mmu_notifier”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÿ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjÊ sbŒc.mmu_notifier_register”†”asbuh1hhjà ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjà ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjà 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=hjÜ ubj>)�”}”(hŒstruct mm_struct *mm”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjRubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjRubh)�”}”(hhh]”j)�”}”(hŒ mm_struct”h]”hŒ mm_struct”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjqubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jvŒmodname”NŒ classname”Njìjï)�”}”jò]”jŒc.mmu_notifier_register”†”asbuh1hhjRubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjRubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjRubj)�”}”(hŒmm”h]”hŒmm”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjÜ ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj£ 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”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./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²hhjKò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Ž)�”}”(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:145: ./mm/mmu_notifier.c”h´MÛhjóubj¤)�”}”(hhh]”(j©)�”}”(hŒ=``struct mmu_notifier *subscription`` The notifier to attach ”h]”(j¯)�”}”(hŒ%``struct mmu_notifier *subscription``”h]”jS)�”}”(hjh]”hŒ!struct mmu_notifier *subscription”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´MØhjubjÉ)�”}”(hhh]”jM)�”}”(hŒThe notifier to attach”h]”hŒThe notifier to attach”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j-h´MØhj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j-h´MØhjubj©)�”}”(hŒ:``struct mm_struct *mm`` The mm to attach the notifier to ”h]”(j¯)�”}”(hŒ``struct mm_struct *mm``”h]”jS)�”}”(hjQh]”hŒstruct mm_struct *mm”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjOubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´MÙhjKubjÉ)�”}”(hhh]”jM)�”}”(hŒ The mm to attach the notifier to”h]”hŒ The mm to attach the notifier to”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jfh´MÙhjgubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjKubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jfh´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³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´MÛhjó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:145: ./mm/mmu_notifier.c”h´MÚhjó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:145: ./mm/mmu_notifier.c”h´Mâhjó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().”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´Måhjóubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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:145: ./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)�”}”(hhh]”j)�”}”(hŒ mmu_notifier”h]”hŒ mmu_notifier”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒmmu_notifier_get_locked”sbŒc.mmu_notifier_get_locked”†”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 ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjëh²hh³jüh´M ubhÿ)�”}”(hŒmmu_notifier_get_locked”h]”j)�”}”(hj,h]”hŒmmu_notifier_get_locked”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjJubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjëh²hh³jüh´M ubj8)�”}”(hŒ:(const struct mmu_notifier_ops *ops, struct mm_struct *mm)”h]”(j>)�”}”(hŒ"const struct mmu_notifier_ops *ops”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjeubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjeubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjeubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjeubh)�”}”(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”jèŒ reftarget”j¤Œmodname”NŒ classname”Njìjï)�”}”jò]”j*Œc.mmu_notifier_get_locked”†”asbuh1hhjeubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjeubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjeubj)�”}”(hŒops”h]”hŒops”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjaubj>)�”}”(hŒstruct mm_struct *mm”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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ðubh)�”}”(hhh]”j)�”}”(hŒ mm_struct”h]”hŒ mm_struct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jŒmodname”NŒ classname”Njìjï)�”}”jò]”j*Œc.mmu_notifier_get_locked”†”asbuh1hhjðubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjðubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjðubj)�”}”(hŒmm”h]”hŒmm”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjðubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjaubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjë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Œ6Return the single struct mmu_notifier for the mm & ops”h]”hŒ6Return the single struct mmu_notifier for the mm & ops”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´M hjrh²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²hhjKò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:145: ./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:145: ./mm/mmu_notifier.c”h´Mhj°ubjÉ)�”}”(hhh]”jM)�”}”(hŒ*The operations struct being subscribe with”h]”hŒ*The operations struct being subscribe with”…”�”}”(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©•T)�”}”(hŒ8``struct mm_struct *mm`` The mm to attach notifiers too ”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:145: ./mm/mmu_notifier.c”h´MhjéubjÉ)�”}”(hhh]”jM)�”}”(hŒThe mm to attach notifiers too”h]”hŒThe mm to attach notifiers too”…”�”}”(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£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:145: ./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:145: ./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.”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./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:145: ./mm/mmu_notifier.c”h´Mhj‘ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒmmu_notifier_put (C function)”Œc.mmu_notifier_put”hNt”auh1hÜhjKò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:145: ./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�ubj8)�”}”(hŒ#(struct mmu_notifier *subscription)”h]”j>)�”}”(hŒ!struct mmu_notifier *subscription”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÆubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÆubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jêŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj°sbŒc.mmu_notifier_put”†”asbuh1hhjÆubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÆubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÆ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=hjÂubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj‰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”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´M�hjJh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj‚h²hh³j›h´M�ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjejHjejI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjoh]”hŒ Parameters”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjmubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´M…hjiubj¤)�”}”(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:145: ./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£hjiubjM)�”}”(hŒ**Description**”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:145: ./mm/mmu_notifier.c”h´M„hjiubjM)�”}”(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.”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´MƒhjiubjM)�”}”(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.”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´M‡hjiubjM)�”}”(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.”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´M‹hjiubjM)�”}”(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:145: ./mm/mmu_notifier.c”h´M�hjiubjM)�”}”(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.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´M’hjiubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjFh²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´Mëubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjFh²hh³jXh´Mëubhÿ)�”}”(hŒmmu_interval_notifier_insert”h]”j)�”}”(hŒmmu_interval_notifier_insert”h]”hŒmmu_interval_notifier_insert”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjgubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjFh²hh³jXh´Mëubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjƒubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjƒubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”j§Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjmsbŒc.mmu_interval_notifier_insert”†”asbuh1hhjƒubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjƒubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjƒ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=hjubj>)�”}”(hŒstruct mm_struct *mm”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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õubh)�”}”(hhh]”j)�”}”(hŒ mm_struct”h]”hŒ mm_struct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jŒmodname”NŒ classname”Njìjï)�”}”jò]”jÁŒc.mmu_interval_notifier_insert”†”asbuh1hhjõubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjõubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjõubj)�”}”(hŒmm”h]”hŒmm”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjõubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjubj>)�”}”(hŒunsigned long start”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjeubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjeubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjeubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjeubj)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjubj>)�”}”(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”…”�”}”(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Œlength”h]”hŒlength”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¶ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjubj>)�”}”(hŒ+const struct mmu_interval_notifier_ops *ops”h]”(jœ)�”}”(hjŸh]”hŒconst”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjubjœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjubh)�”}”(hhh]”j)�”}”(hŒmmu_interval_notifier_ops”h]”hŒmmu_interval_notifier_ops”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjAubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jFŒmodname”NŒ classname”Njìjï)�”}”jò]”jÁŒc.mmu_interval_notifier_insert”†”asbuh1hhjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjubj)�”}”(hŒops”h]”hŒops”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjFh²hh³jXh´Mëubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjBh²hh³jXh´Mëubah}”(h]”j=ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jXh´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:145: ./mm/mmu_notifier.c”h´Mëhj¤h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj?h²hh³jXh´Mëubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¿jHj¿jI‰jJ‰jK‰uh1híh²hhjKò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:145: ./mm/mmu_notifier.c”h´MïhjÃ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&]”uh1jRhjæubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´MìhjâubjÉ)�”}”(hhh]”jM)�”}”(hŒ!Interval subscription to register”h]”hŒ!Interval subscription to register”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”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``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&]”uh1jRhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´MïhjubjÉ)�”}”(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³j6h´Mïhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j6h´Mïhjßubj©)�”}”(hŒ<``unsigned long start`` Starting virtual address to monitor ”h]”(j¯)�”}”(hŒ``unsigned long start``”h]”jS)�”}”(hjZh]”hŒunsigned long start”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjXubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´MíhjTubjÉ)�”}”(hhh]”jM)�”}”(hŒ#Starting virtual address to monitor”h]”hŒ#Starting virtual address to monitor”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³joh´Míhjpubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjTubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³joh´Míhjß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:145: ./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îhjß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”…”�”}”(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:145: ./mm/mmu_notifier.c”h´MðhjÆubjÉ)�”}”(hhh]”jM)�”}”(hŒ)�”}”(hŒ*struct mmu_interval_notifier *interval_sub”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj”ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj”ubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”j¸Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj~sbŒc.mmu_interval_notifier_remove”†”asbuh1hhj”ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj”ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj”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&]”jjuh1j7hjWh²hh³jih´M4ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjSh²hh³jih´M4ubah}”(h]”jNah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jih´M4hjPh²hubj4)�”}”(hhh]”jM)�”}”(hŒRemove a interval notifier”h]”hŒRemove a interval notifier”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´M4hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjPh²hh³jih´M4ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj3jHj3jI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hXJ**Parameters** ``struct mmu_interval_notifier *interval_sub`` Interval subscription to unregister **Description** This function must be paired with mmu_interval_notifier_insert(). It cannot be called from any ops callback. Once this returns ops callbacks are no longer running on other CPUs and will not be called in future.”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:145: ./mm/mmu_notifier.c”h´M8hj7ubj¤)�”}”(hhh]”j©)�”}”(hŒS``struct mmu_interval_notifier *interval_sub`` Interval subscription to unregister ”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&]”uh1jRhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´M5hjVubjÉ)�”}”(hhh]”jM)�”}”(hŒ#Interval subscription to unregister”h]”hŒ#Interval subscription to unregister”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jqh´M5hjrubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjVubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jqh´M5hjSubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj7ubjM)�”}”(hŒ**Description**”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:145: ./mm/mmu_notifier.c”h´M7hj7ubjM)�”}”(hŒlThis function must be paired with mmu_interval_notifier_insert(). It cannot be called from any ops callback.”h]”hŒlThis function must be paired with mmu_interval_notifier_insert(). It cannot be called from any ops callback.”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´M6hj7ubjM)�”}”(hŒeOnce this returns ops callbacks are no longer running on other CPUs and will not be called in future.”h]”hŒeOnce this returns ops callbacks are no longer running on other CPUs and will not be called in future.”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´M9hj7ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ%mmu_notifier_synchronize (C function)”Œc.mmu_notifier_synchronize”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ$void mmu_notifier_synchronize (void)”h]”hù)�”}”(hŒ#void mmu_notifier_synchronize(void)”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:145: ./mm/mmu_notifier.c”h´Mjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjçh²hh³jùh´Mjubhÿ)�”}”(hŒmmu_notifier_synchronize”h]”j)�”}”(hŒmmu_notifier_synchronize”h]”hŒmmu_notifier_synchronize”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjçh²hh³jùh´Mjubj8)�”}”(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&]”jjuh1j7hjç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Œ"Ensure all mmu_notifiers are freed”h]”hŒ"Ensure all mmu_notifiers are freed”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´MjhjOh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjàh²hh³jùh´Mjubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjjjHjjjI‰jJ‰jK‰uh1híh²hhjKòh³Nh´Nubj„)�”}”(hXé**Parameters** ``void`` no arguments **Description** This function ensures that all outstanding async SRU work from mmu_notifier_put() is completed. After it returns any mmu_notifier_ops associated with an unused mmu_notifier will no longer be called. Before using the caller must ensure that all of its mmu_notifiers have been fully released via mmu_notifier_put(). Modules using the mmu_notifier_put() API should call this in their __exit function to avoid module unloading races.”h]”(jM)�”}”(hŒ**Parameters**”h]”jŽ)�”}”(hjth]”hŒ Parameters”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjrubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´Mnhjnubj¤)�”}”(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³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.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£hjnubjM)�”}”(hŒ**Description**”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:145: ./mm/mmu_notifier.c”h´KhjnubjM)�”}”(hŒÆThis function ensures that all outstanding async SRU work from mmu_notifier_put() is completed. After it returns any mmu_notifier_ops associated with an unused mmu_notifier will no longer be called.”h]”hŒÆThis function ensures that all outstanding async SRU work from mmu_notifier_put() is completed. After it returns any mmu_notifier_ops associated with an unused mmu_notifier will no longer be called.”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´MkhjnubjM)�”}”(hŒrBefore using the caller must ensure that all of its mmu_notifiers have been fully released via mmu_notifier_put().”h]”hŒrBefore using the caller must ensure that all of its mmu_notifiers have been fully released via mmu_notifier_put().”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´MohjnubjM)�”}”(hŒsModules using the mmu_notifier_put() API should call this in their __exit function to avoid module unloading races.”h]”hŒsModules using the mmu_notifier_put() API should call this in their __exit function to avoid module unloading races.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:145: ./mm/mmu_notifier.c”h´Mrhjnubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ balloon_page_insert (C function)”Œc.balloon_page_insert”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒNvoid balloon_page_insert (struct balloon_dev_info *balloon, struct page *page)”h]”hù)�”}”(hŒMvoid balloon_page_insert(struct balloon_dev_info *balloon, struct page *page)”h]”(já)�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj-h²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:146: ./mm/balloon.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Œballoon_page_insert”h]”j)�”}”(hŒballoon_page_insert”h]”hŒballoon_page_insert”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjNubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj-h²hh³j?h´Kubj8)�”}”(hŒ5(struct balloon_dev_info *balloon, struct page *page)”h]”(j>)�”}”(hŒ struct balloon_dev_info *balloon”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjjubh)�”}”(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”jèŒ reftarget”jŽŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjTsbŒc.balloon_page_insert”†”asbuh1hhjjubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjjubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjjubj)�”}”(hŒballoon”h]”hŒballoon”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjfubj>)�”}”(hŒstruct page *page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjÜubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÜubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjûubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jŒmodname”NŒ classname”Njìjï)�”}”jò]”j¨Œc.balloon_page_insert”†”asbuh1hhjÜubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÜubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjÜubj)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÜubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjfubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj-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Œ]insert a page into the balloon's page list and make the page->private assignment accordingly.”h]”hŒ_insert a page into the balloon’s page list and make the page->private assignment accordingly.”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:146: ./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&]”jFjAjGjyjHjyjI‰jJ‰jK‰uh1híh²hhjKò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:146: ./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:146: ./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)�”}”(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:146: ./mm/balloon.c”h´KhjÕubjÉ)�”}”(hhh]”jM)�”}”(hŒ'page to be assigned as a 'balloon page'”h]”hŒ+page to be assigned as a ‘balloon page’”…”�”}”(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Ž)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:146: ./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:146: ./mm/balloon.c”h´Khj}ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ"balloon_page_finalize (C function)”Œc.balloon_page_finalize”hNt”auh1hÜhjKò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àhjWh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:146: ./mm/balloon.c”h´K(ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjWh²hh³jih´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&]”uh1jhjxubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjWh²hh³jih´K(ubj8)�”}”(hŒ(struct page *page)”h]”j>)�”}”(hŒstruct page *page”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj”ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj”ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj³ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j¸Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj~sbŒc.balloon_page_finalize”†”asbuh1hhj”ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj”ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj”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&]”jjuh1j7hjWh²hh³jih´K(ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjSh²hh³jih´K(ubah}”(h]”jNah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jih´K(hjPh²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”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:146: ./mm/balloon.c”h´K(hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjPh²hh³jih´K(ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj3jHj3jI‰jJ‰jK‰uh1híh²hhjKò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:146: ./mm/balloon.c”h´K,hj7ubj¤)�”}”(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&]”uh1jRhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:146: ./mm/balloon.c”h´K*hjVubjÉ)�”}”(hhh]”jM)�”}”(hŒ)page to be released to the page allocator”h]”hŒ)page to be released to the page allocator”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jqh´K*hjrubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjVubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jqh´K*hjSubah}”(h]”h ]”h"]”h$]”h&]”uh1j£hj7ubjM)�”}”(hŒ**Description**”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:146: ./mm/balloon.c”h´K,hj7ubjM)�”}”(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:146: ./mm/balloon.c”h´K+hj7ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÜubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jáŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒballoon_page_list_enqueue”sbŒc.balloon_page_list_enqueue”†”asbuh1hhjØh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:146: ./mm/balloon.c”h´KAubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjØh²hh³jh´KAubhÿ)�”}”(hŒballoon_page_list_enqueue”h]”j)�”}”(hjýh]”hŒballoon_page_list_enqueue”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjØh²hh³jh´KAubj8)�”}”(hŒ>(struct balloon_dev_info *b_dev_info, struct list_head *pages)”h]”(j>)�”}”(hŒ#struct balloon_dev_info *b_dev_info”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj*ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj*ubh)�”}”(hhh]”j)�”}”(hŒballoon_dev_info”h]”hŒballoon_dev_info”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjIubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jNŒmodname”NŒ classname”Njìjï)�”}”jò]”jûŒc.balloon_page_list_enqueue”†”asbuh1hhj*ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj*ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj*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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjšubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjšubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j¾Œmodname”NŒ classname”Njìjï)�”}”jò]”jûŒc.balloon_page_list_enqueue”†”asbuh1hhjšubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjšubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjš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&ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjØh²hh³jh´KAubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÔh²hh³jh´KAubah}”(h]”jÏah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jh´KAhjÑ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:146: ./mm/balloon.c”h´KAhj h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÑh²hh³jh´KAubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj7 jHj7 jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjA h]”hŒ Parameters”…”�”}”(hjC 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:146: ./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”…”�”}”(hjb 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:146: ./mm/balloon.c”h´KChjZ ubjÉ)�”}”(hhh]”jM)�”}”(hŒ)�”}”(hŒ#struct balloon_dev_info *b_dev_info”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj’!h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjŽ!ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ!h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjŽ!ubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”j²!Œmodname”NŒ classname”Njìjï)�”}”jò]”j_!Œc.balloon_page_list_dequeue”†”asbuh1hhjŽ!ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎ!h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjŽ!ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÜ!h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjŽ!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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjþ!ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjþ!ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j""Œmodname”NŒ classname”Njìjï)�”}”jò]”j_!Œc.balloon_page_list_dequeue”†”asbuh1hhjþ!ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>"h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjþ!ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjL"h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjþ!ubj)�”}”(hŒpages”h]”hŒpages”…”�”}”(hjY"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjþ!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjŠ!ubj>)�”}”(hŒsize_t n_req_pages”h]”(h)�”}”(hhh]”j)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hju"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjr"ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jw"Œmodname”NŒ classname”Njìjï)�”}”jò]”j_!Œc.balloon_page_list_dequeue”†”asbuh1hhjn"ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“"h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjn"ubj)�”}”(hŒ n_req_pages”h]”hŒ n_req_pages”…”�”}”(hj¡"h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjn"ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjŠ!ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj)�”}”(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&]”jjuh1j7hjf$h²hh³jw$h´KŠubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjb$h²hh³jw$h´KŠubah}”(h]”j]$ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jw$h´KŠhj_$h²hubj4)�”}”(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:146: ./mm/balloon.c”h´KŠhj %h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj_$h²hh³jw$h´KŠubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj&%jHj&%jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hj0%h]”hŒ Parameters”…”�”}”(hj2%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:146: ./mm/balloon.c”h´KŽhj*%ubj¤)�”}”(hhh]”j©)�”}”(hŒ``void`` no arguments ”h]”(j¯)�”}”(hŒ``void``”h]”jS)�”}”(hjO%h]”hŒvoid”…”�”}”(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:146: ./mm/balloon.c”h´KhjI%ubjÉ)�”}”(hhh]”jM)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(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´KhjF%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:146: ./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:146: ./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:146: ./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:146: ./mm/balloon.c”h´K‘hj*%ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!balloon_page_enqueue (C function)”Œc.balloon_page_enqueue”hNt”auh1hÜhjKò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”…”�”}”(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:146: ./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_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þhjò%h²hh³j&h´K¡ubj8)�”}”(hŒ8(struct balloon_dev_info *b_dev_info, struct page *page)”h]”(j>)�”}”(hŒ#struct balloon_dev_info *b_dev_info”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj3&h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj/&ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@&h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj/&ubh)�”}”(hhh]”j)�”}”(hŒballoon_dev_info”h]”hŒballoon_dev_info”…”�”}”(hjQ&h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjN&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jS&Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj&sbŒc.balloon_page_enqueue”†”asbuh1hhj/&ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjq&h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj/&ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj/&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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj¥&h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¡&ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²&h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¡&ubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjÃ&h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÀ&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÅ&Œmodname”NŒ classname”Njìjï)�”}”jò]”jm&Œc.balloon_page_enqueue”†”asbuh1hhj¡&ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjá&h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¡&ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjï&h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¡&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+&ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjò%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Œ.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:146: ./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²hhjKò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Ž)�”}”(hjH'h]”hŒ Parameters”…”�”}”(hjJ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjF'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:146: ./mm/balloon.c”h´K¥hjB'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)�”}”(hjg'h]”hŒ#struct balloon_dev_info *b_dev_info”…”�”}”(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:146: ./mm/balloon.c”h´K£hja'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Èhja'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:146: ./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£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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:146: ./mm/balloon.c”h´K¦hjB'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.”…”�”}”(hjñ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:146: ./mm/balloon.c”h´K¥hjB'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.”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:146: ./mm/balloon.c”h´K¨hjB'ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!balloon_page_dequeue (C function)”Œc.balloon_page_dequeue”hNt”auh1hÜhjKò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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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:146: ./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”…”�”}”(hjN(h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjK(ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jP(Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒballoon_page_dequeue”sbŒc.balloon_page_dequeue”†”asbuh1hhj+(h²hh³j<(h´K¸ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjo(h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj+(h²hh³j<(h´K¸ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj}(h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj+(h²hh³j<(h´K¸ubhÿ)�”}”(hŒballoon_page_dequeue”h]”j)�”}”(hjl(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¸ubj8)�”}”(hŒ%(struct balloon_dev_info *b_dev_info)”h]”j>)�”}”(hŒ#struct balloon_dev_info *b_dev_info”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj©(h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¥(ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶(h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¥(ubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”jÉ(Œmodname”NŒ classname”Njìjï)�”}”jò]”jj(Œc.balloon_page_dequeue”†”asbuh1hhj¥(ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjå(h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¥(ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjó(h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¥(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¡(ubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj+(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:146: ./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&]”jFjAjGjB)jHjB)jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjL)h]”hŒ Parameters”…”�”}”(hjN)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjJ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:146: ./mm/balloon.c”h´K¼hjF)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)�”}”(hjk)h]”hŒ#struct balloon_dev_info *b_dev_info”…”�”}”(hjm)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhji)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:146: ./mm/balloon.c”h´Kºhje)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Èhje)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j€)h´Kºhjb)ubah}”(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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:146: ./mm/balloon.c”h´K¼hjF)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.”…”�”}”(hj¼)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:146: ./mm/balloon.c”h´K»hjF)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:146: ./mm/balloon.c”h´K¾hjF)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.”…”�”}”(hjÚ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:146: ./mm/balloon.c”h´KÁhjF)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:146: ./mm/balloon.c”h´KÅ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³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:146: ./mm/balloon.c”h´KÈhjF)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:146: ./mm/balloon.c”h´KÉhjF)ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hjB*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj?*ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jD*Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒvmf_insert_pfn_pmd”sbŒc.vmf_insert_pfn_pmd”†”asbuh1hhj;*h²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MŸubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjd*h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj;*h²hh³jc*h´MŸubhÿ)�”}”(hŒvmf_insert_pfn_pmd”h]”j)�”}”(hj`*h]”hŒvmf_insert_pfn_pmd”…”�”}”(hjv*h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjr*ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj;*h²hh³jc*h´MŸubj8)�”}”(hŒ5(struct vm_fault *vmf, unsigned long pfn, bool write)”h]”(j>)�”}”(hŒstruct vm_fault *vmf”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj‘*h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj�*ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjž*h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�*ubh)�”}”(hhh]”j)�”}”(hŒ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”jèŒ reftarget”j±*Œmodname”NŒ classname”Njìjï)�”}”jò]”j^*Œc.vmf_insert_pfn_pmd”†”asbuh1hhj�*ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍ*h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�*ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÛ*h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj�*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Œ ”…”�”}”(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”…”�”}”(hj9+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”…”�”}”(hjR+h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjN+ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_+h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjN+ubj)�”}”(hŒwrite”h]”hŒwrite”…”�”}”(hjm+h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjN+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj‰*ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj;*h²hh³jc*h´MŸubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj7*h²hh³jc*h´MŸubah}”(h]”j2*ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jc*h´MŸhj4*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:147: ./mm/huge_memory.c”h´MŸhj”+h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj4*h²hh³jc*h´MŸubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj¯+jHj¯+jI‰jJ‰jK‰uh1híh²hhjKò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:147: ./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)�”}”(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:147: ./mm/huge_memory.c”h´M hjÒ+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´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`` 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:147: ./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¡hjÏ+ubj©)�”}”(hŒ*``bool write`` whether it's a write fault ”h]”(j¯)�”}”(hŒ``bool write``”h]”jS)�”}”(hjJ,h]”hŒ bool write”…”�”}”(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:147: ./mm/huge_memory.c”h´M¢hjD,ubjÉ)�”}”(hhh]”jM)�”}”(hŒwhether it's a write fault”h]”hŒwhether it’s a write fault”…”�”}”(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¢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:147: ./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:147: ./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:147: ./mm/huge_memory.c”h´M¥hj³+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:147: ./mm/huge_memory.c”h´M¦hj³+ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hjô,h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñ,ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jö,Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒvmf_insert_pfn_pud”sbŒc.vmf_insert_pfn_pud”†”asbuh1hhjí,h²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.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Œ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þhjí,h²hh³j-h´Mubj8)�”}”(hŒ5(struct vm_fault *vmf, unsigned long pfn, bool write)”h]”(j>)�”}”(hŒstruct vm_fault *vmf”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjC-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?-ubh)�”}”(hhh]”j)�”}”(hŒvm_fault”h]”hŒvm_fault”…”�”}”(hja-h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj^-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jc-Œmodname”NŒ classname”Njìjï)�”}”jò]”j-Œc.vmf_insert_pfn_pud”†”asbuh1hhj?-ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj?-ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj�-h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj?-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Œ ”…”�”}”(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Œ 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&]”jjuh1j7hjí,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Œinsert a pud size pfn”h]”hŒinsert a pud size pfn”…”�”}”(hjI.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MhjF.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²hhjKò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Ž)�”}”(hjk.h]”hŒ Parameters”…”�”}”(hjm.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hji.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mhje.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:147: ./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)�”}”(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:147: ./mm/huge_memory.c”h´Mhj½.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´MhjÙ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj½.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jØ.h´Mhj�.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:147: ./mm/huge_memory.c”h´Mhjö.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Èhjö.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j/h´Mhj�.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hje.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³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mhje.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.”…”�”}”(hjM/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mhje.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:147: ./mm/huge_memory.c”h´Mhje.ubjM)�”}”(hŒvm_fault_t value.”h]”hŒvm_fault_t value.”…”�”}”(hjt/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mhje.ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”jèŒ reftarget”j¨/Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèŒvmf_insert_folio_pud”sbŒc.vmf_insert_folio_pud”†”asbuh1hhjŸ/h²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M2ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈ/h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjŸ/h²hh³jÇ/h´M2ubhÿ)�”}”(hŒvmf_insert_folio_pud”h]”j)�”}”(hjÄ/h]”hŒvmf_insert_folio_pud”…”�”}”(hjÚ/h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÖ/ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjŸ/h²hh³jÇ/h´M2ubj8)�”}”(hŒ7(struct vm_fault *vmf, struct folio *folio, bool write)”h]”(j>)�”}”(hŒstruct vm_fault *vmf”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjõ/h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjñ/ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjñ/ubh)�”}”(hhh]”j)�”}”(hŒvm_fault”h]”hŒvm_fault”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j0Œmodname”NŒ classname”Njìjï)�”}”jò]”jÂ/Œc.vmf_insert_folio_pud”†”asbuh1hhjñ/ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj10h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjñ/ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj?0h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjñ/ubj)�”}”(hŒvmf”h]”hŒvmf”…”�”}”(hjL0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjñ/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjí/ubj>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hje0h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hja0ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjr0h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhja0ubh)�”}”(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”jèŒ reftarget”j…0Œmodname”NŒ classname”Njìjï)�”}”jò]”jÂ/Œc.vmf_insert_folio_pud”†”asbuh1hhja0ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡0h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhja0ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¯0h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhja0ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj¼0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhja0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjí/ubj>)�”}”(hŒ bool write”h]”(já)�”}”(hj½h]”hŒbool”…”�”}”(hjÕ0h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÑ0ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâ0h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÑ0ubj)�”}”(hŒwrite”h]”hŒwrite”…”�”}”(hjð0h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÑ0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjí/ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjŸ/h²hh³jÇ/h´M2ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj›/h²hh³jÇ/h´M2ubah}”(h]”j–/ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÇ/h´M2hj˜/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”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M2hj1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj˜/h²hh³jÇ/h´M2ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj21jHj21jI‰jJ‰jK‰uh1híh²hhjKò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<1h]”hŒ Parameters”…”�”}”(hj>1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj:1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M6hj61ubj¤)�”}”(hhh]”(j©)�”}”(hŒ8``struct vm_fault *vmf`` Structure describing the fault ”h]”(j¯)�”}”(hŒ``struct vm_fault *vmf``”h]”jS)�”}”(hj[1h]”hŒstruct vm_fault *vmf”…”�”}”(hj]1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjY1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M3hjU1ubjÉ)�”}”(hhh]”jM)�”}”(hŒStructure describing the fault”h]”hŒStructure describing the fault”…”�”}”(hjt1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jp1h´M3hjq1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjU1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jp1h´M3hjR1ubj©)�”}”(hŒ(``struct folio *folio`` folio to insert ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj”1h]”hŒstruct folio *folio”…”�”}”(hj–1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj’1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M4hjŽ1ubjÉ)�”}”(hhh]”jM)�”}”(hŒfolio to insert”h]”hŒfolio to insert”…”�”}”(hj­1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j©1h´M4hjª1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjŽ1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j©1h´M4hjR1ubj©)�”}”(hŒ*``bool write`` whether it's a write fault ”h]”(j¯)�”}”(hŒ``bool write``”h]”jS)�”}”(hjÍ1h]”hŒ bool write”…”�”}”(hjÏ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjË1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M5hjÇ1ubjÉ)�”}”(hhh]”jM)�”}”(hŒwhether it's a write fault”h]”hŒwhether it’s a write fault”…”�”}”(hjæ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jâ1h´M5hjã1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjÇ1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jâ1h´M5hjR1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj61ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj2h]”hŒReturn”…”�”}”(hj 2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M7hj61ubjM)�”}”(hŒvm_fault_t value.”h]”hŒvm_fault_t value.”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M7hj61ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒtouch_pmd (C function)”Œ c.touch_pmd”hNt”auh1hÜhjKò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”…”�”}”(hjM2h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjI2h²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MLubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[2h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjI2h²hh³jZ2h´MLubhÿ)�”}”(hŒ touch_pmd”h]”j)�”}”(hŒ touch_pmd”h]”hŒ touch_pmd”…”�”}”(hjm2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhji2ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjI2h²hh³jZ2h´MLubj8)�”}”(hŒH(struct vm_area_struct *vma, unsigned long addr, pmd_t *pmd, bool write)”h]”(j>)�”}”(hŒstruct vm_area_struct *vma”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj‰2h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj…2ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–2h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj…2ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj§2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¤2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j©2Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjo2sbŒ c.touch_pmd”†”asbuh1hhj…2ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇ2h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj…2ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÕ2h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj…2ubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjâ2h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj…2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj�2ubj>)�”}”(hŒunsigned long addr”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjû2h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj÷2ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 3h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj÷2ubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj÷2ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%3h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj÷2ubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj33h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj÷2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj�2ubj>)�”}”(hŒ pmd_t *pmd”h]”(h)�”}”(hhh]”j)�”}”(hŒpmd_t”h]”hŒpmd_t”…”�”}”(hjO3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjL3ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jQ3Œmodname”NŒ classname”Njìjï)�”}”jò]”jÃ2Œ c.touch_pmd”†”asbuh1hhjH3ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjm3h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjH3ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj{3h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjH3ubj)�”}”(hŒpmd”h]”hŒpmd”…”�”}”(hjˆ3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjH3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj�2ubj>)�”}”(hŒ bool write”h]”(já)�”}”(hj½h]”hŒbool”…”�”}”(hj¡3h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj�3ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®3h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�3ubj)�”}”(hŒwrite”h]”hŒwrite”…”�”}”(hj¼3h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj�2ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjI2h²hh³jZ2h´MLubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjE2h²hh³jZ2h´MLubah}”(h]”j@2ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jZ2h´MLhjB2h²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)”…”�”}”(hjæ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MLhjã3h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjB2h²hh³jZ2h´MLubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjþ3jHjþ3jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hj4h]”hŒ Parameters”…”�”}”(hj 4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MPhj4ubj¤)�”}”(hhh]”(j©)�”}”(hŒ9``struct vm_area_struct *vma`` The VMA covering **addr** ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hj'4h]”hŒstruct vm_area_struct *vma”…”�”}”(hj)4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj%4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MMhj!4ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe VMA covering **addr**”h]”(hŒThe VMA covering ”…”�”}”(hj@4h²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hjH4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj@4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j<4h´MMhj=4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj!4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j<4h´MMhj4ubj©)�”}”(hŒ+``unsigned long addr`` The virtual address ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hjn4h]”hŒunsigned long addr”…”�”}”(hjp4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjl4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MNhjh4ubjÉ)�”}”(hhh]”jM)�”}”(hŒThe virtual address”h]”hŒThe virtual address”…”�”}”(hj‡4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jƒ4h´MNhj„4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjh4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jƒ4h´MNhj4ubj©)�”}”(hŒ@``pmd_t *pmd`` pmd pointer into the page table mapping **addr** ”h]”(j¯)�”}”(hŒ``pmd_t *pmd``”h]”jS)�”}”(hj§4h]”hŒ pmd_t *pmd”…”�”}”(hj©4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj¥4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MOhj¡4ubjÉ)�”}”(hhh]”jM)�”}”(hŒ0pmd pointer into the page table mapping **addr**”h]”(hŒ(pmd pointer into the page table mapping ”…”�”}”(hjÀ4h²hh³Nh´NubjŽ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hjÈ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÀ4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j¼4h´MOhj½4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¡4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j¼4h´MOhj4ubj©)�”}”(hŒ+``bool write`` Whether it's a write access ”h]”(j¯)�”}”(hŒ``bool write``”h]”jS)�”}”(hjî4h]”hŒ bool write”…”�”}”(hjð4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjì4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MPhjè4ubjÉ)�”}”(hhh]”jM)�”}”(hŒWhether it's a write access”h]”hŒWhether it’s a write access”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j5h´MPhj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjè4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j5h´MPhj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj4ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj)5h]”hŒReturn”…”�”}”(hj+5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj'5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MRhj4ubjM)�”}”(hŒ whether the pmd entry is changed”h]”hŒ whether the pmd entry is changed”…”�”}”(hj?5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MRhj4ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒzap_huge_pmd (C function)”Œc.zap_huge_pmd”hNt”auh1hÜhjKò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”…”�”}”(hjn5h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjj5h²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mâ ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|5h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjj5h²hh³j{5h´Mâ ubhÿ)�”}”(hŒ zap_huge_pmd”h]”j)�”}”(hŒ zap_huge_pmd”h]”hŒ zap_huge_pmd”…”�”}”(hjŽ5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŠ5ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjj5h²hh³j{5h´Mâ ubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjª5h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¦5ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·5h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¦5ubh)�”}”(hhh]”j)�”}”(hŒ mmu_gather”h]”hŒ mmu_gather”…”�”}”(hjÈ5h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÅ5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÊ5Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj�5sbŒc.zap_huge_pmd”†”asbuh1hhj¦5ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjè5h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¦5ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjö5h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¦5ubj)�”}”(hŒtlb”h]”hŒtlb”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¦5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¢5ubj>)�”}”(hŒstruct vm_area_struct *vma”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj6ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)6h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj6ubh)�”}”(hhh]”j)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hj:6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj76ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j<6Œmodname”NŒ classname”Njìjï)�”}”jò]”jä5Œc.zap_huge_pmd”†”asbuh1hhj6ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjX6h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj6ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjf6h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj6ubj)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjs6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¢5ubj>)�”}”(hŒ pmd_t *pmd”h]”(h)�”}”(hhh]”j)�”}”(hŒpmd_t”h]”hŒpmd_t”…”�”}”(hj�6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŒ6ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j‘6Œmodname”NŒ classname”Njìjï)�”}”jò]”jä5Œc.zap_huge_pmd”†”asbuh1hhjˆ6ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­6h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjˆ6ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj»6h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjˆ6ubj)�”}”(hŒpmd”h]”hŒpmd”…”�”}”(hjÈ6h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjˆ6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¢5ubj>)�”}”(hŒunsigned long addr”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjá6h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÝ6ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjï6h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÝ6ubjá)�”}”(hŒlong”h]”hŒlong”…”�”}”(hjý6h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÝ6ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 7h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÝ6ubj)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÝ6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¢5ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjj5h²hh³j{5h´Mâ ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjf5h²hh³j{5h´Mâ ubah}”(h]”ja5ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j{5h´Mâ hjc5h²hubj4)�”}”(hhh]”jM)�”}”(hŒ$Zap a huge THP which is of PMD size.”h]”hŒ$Zap a huge THP which is of PMD size.”…”�”}”(hjC7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mâ hj@7h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjc5h²hh³j{5h´Mâ ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj[7jHj[7jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hje7h]”hŒ Parameters”…”�”}”(hjg7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjc7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mæ hj_7ubj¤)�”}”(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„7h]”hŒstruct mmu_gather *tlb”…”�”}”(hj†7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj‚7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mã hj~7ubjÉ)�”}”(hhh]”jM)�”}”(hŒ7The MMU gather TLB state associated with the operation.”h]”hŒ7The MMU gather TLB state associated with the operation.”…”�”}”(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ŒD``struct vm_area_struct *vma`` The VMA containing the range to zap. ”h]”(j¯)�”}”(hŒ``struct vm_area_struct *vma``”h]”jS)�”}”(hj½7h]”hŒstruct vm_area_struct *vma”…”�”}”(hj¿7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj»7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mä hj·7ubjÉ)�”}”(hhh]”jM)�”}”(hŒ$The VMA containing the range to zap.”h]”hŒ$The VMA containing the range to zap.”…”�”}”(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Œ0``pmd_t *pmd`` A pointer to the leaf PMD entry. ”h]”(j¯)�”}”(hŒ``pmd_t *pmd``”h]”jS)�”}”(hjö7h]”hŒ pmd_t *pmd”…”�”}”(hjø7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjô7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Må hjð7ubjÉ)�”}”(hhh]”jM)�”}”(hŒ A pointer to the leaf PMD entry.”h]”hŒ A pointer to the leaf PMD entry.”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j 8h´Må hj 8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjð7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j 8h´Må hj{7ubj©)�”}”(hŒA``unsigned long addr`` The virtual address for the range to zap. ”h]”(j¯)�”}”(hŒ``unsigned long addr``”h]”jS)�”}”(hj/8h]”hŒunsigned long addr”…”�”}”(hj18h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj-8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mæ hj)8ubjÉ)�”}”(hhh]”jM)�”}”(hŒ)The virtual address for the range to zap.”h]”hŒ)The virtual address for the range to zap.”…”�”}”(hjH8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jD8h´Mæ hjE8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj)8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jD8h´Mæ hj{7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj_7ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjj8h]”hŒReturn”…”�”}”(hjl8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjh8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mè hj_7ubjM)�”}”(hŒ)``true`` on success, ``false`` otherwise.”h]”(jS)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj„8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj€8ubhŒ on success, ”…”�”}”(hj€8h²hh³Nh´NubjS)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj–8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj€8ubhŒ otherwise.”…”�”}”(hj€8h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mè hj_7ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!__split_frozen_folio (C function)”Œc.__split_frozen_folio”hNt”auh1hÜhjKòh²hh³Nh´Nubhî)�”}”(hhh]”(hó)�”}”(hŒ†int __split_frozen_folio (struct folio *folio, int new_order, struct page *split_at, struct xa_state *xas, enum split_type split_type)”h]”hù)�”}”(hŒ…int __split_frozen_folio(struct folio *folio, int new_order, struct page *split_at, struct xa_state *xas, enum split_type split_type)”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hjÏ8h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjË8h²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mäubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ8h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjË8h²hh³jÝ8h´Mäubhÿ)�”}”(hŒ__split_frozen_folio”h]”j)�”}”(hŒ__split_frozen_folio”h]”hŒ__split_frozen_folio”…”�”}”(hjð8h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjì8ubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjË8h²hh³jÝ8h´Mäubj8)�”}”(hŒm(struct folio *folio, int new_order, struct page *split_at, struct xa_state *xas, enum split_type split_type)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj 9h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj9ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj9ubh)�”}”(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”jèŒ reftarget”j,9Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjò8sbŒc.__split_frozen_folio”†”asbuh1hhj9ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJ9h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj9ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjX9h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj9ubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hje9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj9ubj>)�”}”(hŒ int new_order”h]”(já)�”}”(hŒint”h]”hŒint”…”�”}”(hj~9h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjz9ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒ9h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjz9ubj)�”}”(hŒ new_order”h]”hŒ new_order”…”�”}”(hjš9h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjz9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj9ubj>)�”}”(hŒstruct page *split_at”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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¯9ubh)�”}”(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”jèŒ reftarget”jÓ9Œmodname”NŒ classname”Njìjï)�”}”jò]”jF9Œc.__split_frozen_folio”†”asbuh1hhj¯9ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjï9h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¯9ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjý9h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¯9ubj)�”}”(hŒsplit_at”h]”hŒsplit_at”…”�”}”(hj :h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¯9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj9ubj>)�”}”(hŒstruct xa_state *xas”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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:ubh)�”}”(hhh]”j)�”}”(hŒxa_state”h]”hŒxa_state”…”�”}”(hjA:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj>:ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jC:Œmodname”NŒ classname”Njìjï)�”}”jò]”jF9Œc.__split_frozen_folio”†”asbuh1hhj:ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_:h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj:ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjm:h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj:ubj)�”}”(hŒxas”h]”hŒxas”…”�”}”(hjz:h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj9ubj>)�”}”(hŒenum split_type split_type”h]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(hj“:h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj�:ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj :h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�:ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”j³:Œmodname”NŒ classname”Njìjï)�”}”jò]”jF9Œc.__split_frozen_folio”†”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=hj9ubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjË8h²hh³jÝ8h´Mäubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjÇ8h²hh³jÝ8h´Mäubah}”(h]”jÂ8ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÝ8h´MähjÄ8h²hubj4)�”}”(hhh]”jM)�”}”(hŒ`splits a frozen **folio** to lower order folios in two ways: uniform split or non-uniform split.”h]”(hŒsplits a frozen ”…”�”}”(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:147: ./mm/huge_memory.c”h´Mähj;h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjÄ8h²hh³jÝ8h´Mäubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj1;jHj1;jI‰jJ‰jK‰uh1híh²hhjKò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 ``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�hj9;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mèhj5;ubj¤)�”}”(hhh]”(j©)�”}”(hŒ.``struct folio *folio`` the to-be-split folio ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjZ;h]”hŒstruct folio *folio”…”�”}”(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:147: ./mm/huge_memory.c”h´MæhjT;ubjÉ)�”}”(hhh]”jM)�”}”(hŒthe to-be-split folio”h]”hŒthe to-be-split folio”…”�”}”(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Œ¨``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)�”}”(hj“;h]”hŒ 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:147: ./mm/huge_memory.c”h´Méhj�;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:147: ./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éhjQ;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:147: ./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:147: ./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ëhjQ;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:147: ./mm/huge_memory.c”h´Mìhj7<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”…”�”}”(hjV<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jR<h´MìhjS<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj7<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jR<h´MìhjQ;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)�”}”(hjv<h]”hŒenum split_type split_type”…”�”}”(hjx<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjt<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Míhjp<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Èhjp<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‹<h´MíhjQ;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³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mïhj5;ubjÓM)�”}”(hhh]”(jc)�”}”(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:147: ./mm/huge_memory.c”h´MîhjÊ<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjÇ<ubjc)�”}”(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 ”…”�”}”(hj =h²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj =ubhŒg is split into half and one of the half (containing the given page) is split into half until 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Œ’s order becomes ”…”�”}”(hj =h²hh³Nh´NubjŽ)�”}”(hŒ **new_order**”h]”hŒ new_order”…”�”}”(hj7=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj =ubhŒ9. This is done when split_type is SPLIT_TYPE_NON_UNIFORM.”…”�”}”(hj =h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mñhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjÇ<ubeh}”(h]”h ]”h"]”h$]”h&]”j?Nj@NjANhjBNjCNuh1jÒMhj5;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:147: ./mm/huge_memory.c”h´Möhj5;ubjÓM)�”}”(hhh]”(jc)�”}”(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: ”…”�”}”(hjr=h²hh³Nh´NubjŽ)�”}”(hŒ**xas**”h]”hŒxas”…”�”}”(hjz=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjr=ubhŒf is split with no expectation of failure and a single __split_folio_to_order() is called to split the ”…”�”}”(hjr=h²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjŒ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjr=ubhŒ into ”…”�”}”(hjr=h²hh³Nh´NubjŽ)�”}”(hŒ **new_order**”h]”hŒ new_order”…”�”}”(hjž=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjr=ubhŒ along with stats update.”…”�”}”(hjr=h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Møhjn=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjk=ubjc)�”}”(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”…”�”}”(hj>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:147: ./mm/huge_memory.c”h´Mûhj½=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jbhjk=ubeh}”(h]”h ]”h"]”h$]”h&]”j?Nj@NjANhjBNjCNuh1jÒMhj5;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 ”…”�”}”(hj6>h²hh³Nh´NubjŽ)�”}”(hŒ **split_at**”h]”hŒsplit_at”…”�”}”(hj>>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj6>ubhŒI. The caller needs to unlock and/or free after-split folios if necessary.”…”�”}”(hj6>h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mhj5;ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjY>h]”hŒReturn”…”�”}”(hj[>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjW>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mhj5;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, ”…”�”}”(hjo>h²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjw>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjo>ubhŒ might be split but not to ”…”�”}”(hjo>h²hh³Nh´NubjŽ)�”}”(hŒ **new_order**”h]”hŒ new_order”…”�”}”(hj‰>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjo>ubhŒ, the caller needs to check)”…”�”}”(hjo>h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mhj5;ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ#folio_check_splittable (C function)”Œc.folio_check_splittable”hNt”auh1hÜhjKò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:147: ./mm/huge_memory.c”h´MOubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑ>h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¾>h²hh³jÐ>h´MOubhÿ)�”}”(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´MOubj8)�”}”(hŒI(struct folio *folio, unsigned int new_order, enum split_type split_type)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÿ>h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjû>ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ?h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjû>ubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj?ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j?Œmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjå>sbŒc.folio_check_splittable”†”asbuh1hhjû>ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=?h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjû>ubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjK?h²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjû>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 int new_order”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjq?h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjm?ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjm?ubjá)�”}”(hŒint”h]”hŒint”…”�”}”(hj�?h²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjm?ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›?h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjm?ubj)�”}”(hŒ new_order”h]”hŒ new_order”…”�”}”(hj©?h²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjm?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj÷>ubj>)�”}”(hŒenum split_type split_type”h]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(hjÂ?h²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj¾?ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏ?h²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¾?ubh)�”}”(hhh]”j)�”}”(hŒ 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”jèŒ reftarget”jâ?Œmodname”NŒ classname”Njìjï)�”}”jò]”j9?Œ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”…”�”}”(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&]”jjuh1j7hj¾>h²hh³jÐ>h´MOubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjº>h²hh³jÐ>h´MOubah}”(h]”jµ>ah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÐ>h´MOhj·>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”…”�”}”(hj6@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MOhj3@h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj·>h²hh³jÐ>h´MOubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjN@jHjN@jI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjX@h]”hŒ Parameters”…”�”}”(hjZ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjV@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MShjR@ubj¤)�”}”(hhh]”(j©)�”}”(hŒ*``struct folio *folio`` folio to be split ”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³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MPhjq@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´MPhj�@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjq@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jŒ@h´MPhjn@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:147: ./mm/huge_memory.c”h´MShjª@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:147: ./mm/huge_memory.c”h´MQhjÆ@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjª@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÅ@h´MShjn@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:147: ./mm/huge_memory.c”h´MThjö@ubjÉ)�”}”(hhh]”jM)�”}”(hŒuniform or non-uniform split”h]”hŒuniform or non-uniform split”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jAh´MThjAubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjö@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jAh´MThjn@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjR@ubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hj7Ah]”hŒ Description”…”�”}”(hj9Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj5Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MVhjR@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 ”…”�”}”(hjMAh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjUAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjMAubhŒ can be split to ”…”�”}”(hjMAh²hh³Nh´NubjŽ)�”}”(hŒ **new_order**”h]”hŒ new_order”…”�”}”(hjgAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjMAubhŒ using ”…”�”}”(hjMAh²hh³Nh´NubjŽ)�”}”(hŒ**split_type**”h]”hŒ split_type”…”�”}”(hjyAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjMAubhŒ3 method. The truncated folio check must come first.”…”�”}”(hjMAh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MUhjR@ubjM)�”}”(hŒ **Context**”h]”jŽ)�”}”(hj”Ah]”hŒContext”…”�”}”(hj–Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj’Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MXhjR@ubjM)�”}”(hŒfolio must be locked.”h]”hŒfolio must be locked.”…”�”}”(hjªAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MYhjR@ubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hj»Ah]”hŒReturn”…”�”}”(hj½Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj¹Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M[hjR@ubjM)�”}”(hŒS0 - **folio** can be split to **new_order**, otherwise an error number is returned.”h]”(hŒ0 - ”…”�”}”(hjÑAh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjÙAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÑAubhŒ can be split to ”…”�”}”(hjÑAh²hh³Nh´NubjŽ)�”}”(hŒ **new_order**”h]”hŒ new_order”…”�”}”(hjëAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÑAubhŒ(, otherwise an error number is returned.”…”�”}”(hjÑAh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M[hjR@ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ__folio_split (C function)”Œc.__folio_split”hNt”auh1hÜhjKò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”…”�”}”(hj$Bh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj Bh²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M¸ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3Bh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj Bh²hh³j2Bh´M¸ubhÿ)�”}”(hŒ __folio_split”h]”j)�”}”(hŒ __folio_split”h]”hŒ __folio_split”…”�”}”(hjEBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjABubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj Bh²hh³j2Bh´M¸ubj8)�”}”(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]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjaBh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj]Bubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnBh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj]Bubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj|Bubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j�BŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjGBsbŒc.__folio_split”†”asbuh1hhj]Bubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸBh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj]Bubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj­Bh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj]Bubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjºBh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj]Bubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjYBubj>)�”}”(hŒunsigned int new_order”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÓBh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÏBubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáBh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÏBubjá)�”}”(hŒint”h]”hŒint”…”�”}”(hjïBh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjÏBubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýBh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjÏBubj)�”}”(hŒ new_order”h]”hŒ new_order”…”�”}”(hj Ch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÏBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjYBubj>)�”}”(hŒstruct page *split_at”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj$Ch²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj Cubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1Ch²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj Cubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjBCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj?Cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jDCŒmodname”NŒ classname”Njìjï)�”}”jò]”j›BŒc.__folio_split”†”asbuh1hhj Cubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`Ch²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj Cubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjnCh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj Cubj)�”}”(hŒsplit_at”h]”hŒsplit_at”…”�”}”(hj{Ch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj Cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjYBubj>)�”}”(hŒstruct page *lock_at”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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�Cubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj²Ch²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¯Cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j´CŒmodname”NŒ classname”Njìjï)�”}”jò]”j›BŒc.__folio_split”†”asbuh1hhj�Cubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐCh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj�Cubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjÞCh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj�Cubj)�”}”(hŒlock_at”h]”hŒlock_at”…”�”}”(hjëCh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�Cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjYBubj>)�”}”(hŒstruct list_head *list”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjDubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjDubh)�”}”(hhh]”j)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hj"Dh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjDubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j$DŒmodname”NŒ classname”Njìjï)�”}”jò]”j›BŒc.__folio_split”†”asbuh1hhjDubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@Dh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjDubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjNDh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjDubj)�”}”(hŒlist”h]”hŒlist”…”�”}”(hj[Dh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjDubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjYBubj>)�”}”(hŒenum split_type split_type”h]”(jœ)�”}”(hj#!h]”hŒenum”…”�”}”(hjtDh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjpDubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Dh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjpDubh)�”}”(hhh]”j)�”}”(hŒ split_type”h]”hŒ split_type”…”�”}”(hj’Dh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�Dubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j”DŒmodname”NŒ classname”Njìjï)�”}”jò]”j›BŒc.__folio_split”†”asbuh1hhjpDubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°Dh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjpDubj)�”}”(hŒ split_type”h]”hŒ split_type”…”�”}”(hj¾Dh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjpDubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjYBubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj Bh²hh³j2Bh´M¸ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjBh²hh³j2Bh´M¸ubah}”(h]”jBah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³j2Bh´M¸hjBh²hubj4)�”}”(hhh]”jM)�”}”(hŒ6split a folio at **split_at** to a **new_order** folio”h]”(hŒsplit a folio at ”…”�”}”(hjèDh²hh³Nh´NubjŽ)�”}”(hŒ **split_at**”h]”hŒsplit_at”…”�”}”(hjðDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjèDubhŒ to a ”…”�”}”(hjèDh²hh³Nh´NubjŽ)�”}”(hŒ **new_order**”h]”hŒ new_order”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjèDubhŒ folio”…”�”}”(hjèDh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M¸hjåDh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjBh²hh³j2Bh´M¸ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj$EjHj$EjI‰jJ‰jK‰uh1híh²hhjKò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_frozen_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_frozen_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Ž)�”}”(hj.Eh]”hŒ Parameters”…”�”}”(hj0Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj,Eubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M¼hj(Eubj¤)�”}”(hhh]”(j©)�”}”(hŒ'``struct folio *folio`` folio to split ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjMEh]”hŒstruct folio *folio”…”�”}”(hjOEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjKEubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M¹hjGEubjÉ)�”}”(hhh]”jM)�”}”(hŒfolio to split”h]”hŒfolio to split”…”�”}”(hjfEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jbEh´M¹hjcEubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjGEubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jbEh´M¹hjDEubj©)�”}”(hŒ6``unsigned int new_order`` the order of the new folio ”h]”(j¯)�”}”(hŒ``unsigned int new_order``”h]”jS)�”}”(hj†Eh]”hŒunsigned int new_order”…”�”}”(hjˆEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj„Eubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mºhj€EubjÉ)�”}”(hhh]”jM)�”}”(hŒthe order of the new folio”h]”hŒthe order of the new folio”…”�”}”(hjŸEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j›Eh´MºhjœEubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj€Eubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j›Eh´MºhjDEubj©)�”}”(hŒ6``struct page *split_at`` a page within the new folio ”h]”(j¯)�”}”(hŒ``struct page *split_at``”h]”jS)�”}”(hj¿Eh]”hŒstruct page *split_at”…”�”}”(hjÁEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj½Eubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M»hj¹EubjÉ)�”}”(hhh]”jM)�”}”(hŒa page within the new folio”h]”hŒa page within the new folio”…”�”}”(hjØEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÔEh´M»hjÕEubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¹Eubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÔEh´M»hjDEubj©)�”}”(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øEh]”hŒstruct page *lock_at”…”�”}”(hjúEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjöEubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M¼hjòEubjÉ)�”}”(hhh]”jM)�”}”(hŒ3a page within **folio** to be left locked to caller”h]”(hŒa page within ”…”�”}”(hjFh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjFubhŒ to be left locked to caller”…”�”}”(hjFh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j Fh´M¼hjFubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjòEubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j Fh´M¼hjDEubj©)�”}”(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)�”}”(hjCFh]”hŒstruct list_head *list”…”�”}”(hjEFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjAFubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M½hj=FubjÉ)�”}”(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\Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jXFh´M½hjYFubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj=Fubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jXFh´M½hjDEubj©)�”}”(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|Fh]”hŒenum split_type split_type”…”�”}”(hj~Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjzFubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M¾hjvFubjÉ)�”}”(hhh]”jM)�”}”(hŒ0perform uniform split or not (non-uniform split)”h]”hŒ0perform uniform split or not (non-uniform split)”…”�”}”(hj•Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j‘Fh´M¾hj’Fubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjvFubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j‘Fh´M¾hjDEubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hj(EubjM)�”}”(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³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MÀhj(EubjM)�”}”(hŒ¿It calls __split_frozen_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_frozen_folio().”h]”(hŒšIt calls __split_frozen_folio() to perform uniform and non-uniform split. It is in charge of checking whether the split is supported or not and preparing ”…”�”}”(hjÍFh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjÕFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjÍFubhŒ for __split_frozen_folio().”…”�”}”(hjÍFh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M¿hj(EubjM)�”}”(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îFh²hh³Nh´NubjŽ)�”}”(hŒ **lock_at**”h]”hŒlock_at”…”�”}”(hjöFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjîFubhŒ? remains locked and others are unlocked: 1. for uniform split, ”…”�”}”(hjîFh²hh³Nh´NubjŽ)�”}”(hŒ **lock_at**”h]”hŒlock_at”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjîFubhŒ points to one of ”…”�”}”(hjîFh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjîFubhŒ@’s subpages; 2. for buddy allocator like (non-uniform) split, ”…”�”}”(hjîFh²hh³Nh´NubjŽ)�”}”(hŒ **lock_at**”h]”hŒlock_at”…”�”}”(hj,Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjîFubhŒ points to ”…”�”}”(hjîFh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj>Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjîFubhŒ.”…”�”}”(hjîFh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MÃhj(EubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjYGh]”hŒReturn”…”�”}”(hj[Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjWGubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MÈhj(EubjM)�”}”(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, ”…”�”}”(hjoGh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjwGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjoGubhŒ might be split but not to ”…”�”}”(hjoGh²hh³Nh´NubjŽ)�”}”(hŒ **new_order**”h]”hŒ new_order”…”�”}”(hj‰Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjoGubhŒ, the caller needs to check)”…”�”}”(hjoGh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MÉhj(Eubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒ!folio_split_unmapped (C function)”Œc.folio_split_unmapped”hNt”auh1hÜhjKò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ÂGh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj¾Gh²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑGh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¾Gh²hh³jÐGh´Mubhÿ)�”}”(hŒfolio_split_unmapped”h]”j)�”}”(hŒfolio_split_unmapped”h]”hŒfolio_split_unmapped”…”�”}”(hjãGh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjßGubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj¾Gh²hh³jÐGh´Mubj8)�”}”(hŒ-(struct folio *folio, unsigned int new_order)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjÿGh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjûGubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Hh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjûGubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjHubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jHŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjåGsbŒc.folio_split_unmapped”†”asbuh1hhjûGubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=Hh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjûGubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjKHh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjûGubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjXHh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjûGubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj÷Gubj>)�”}”(hŒunsigned int new_order”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjqHh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjmHubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjmHubjá)�”}”(hŒint”h]”hŒint”…”�”}”(hj�Hh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjmHubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›Hh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjmHubj)�”}”(hŒ new_order”h]”hŒ new_order”…”�”}”(hj©Hh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjmHubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj÷Gubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj¾Gh²hh³jÐGh´Mubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjºGh²hh³jÐGh´Mubah}”(h]”jµGah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jÐGh´Mhj·Gh²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ÓHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MhjÐHh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj·Gh²hh³jÐGh´Mubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjëHjHjëHjI‰jJ‰jK‰uh1híh²hhjKò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. The anon rmap 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, folio_free_swap() 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õHh]”hŒ Parameters”…”�”}”(hj÷Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjóHubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MhjïHubj¤)�”}”(hhh]”(j©)�”}”(hŒ'``struct folio *folio`` folio to split ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjIh]”hŒstruct folio *folio”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MhjIubjÉ)�”}”(hhh]”jM)�”}”(hŒfolio to split”h]”hŒfolio to split”…”�”}”(hj-Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³j)Ih´Mhj*Iubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjIubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³j)Ih´Mhj Iubj©)�”}”(hŒ;``unsigned int new_order`` the order of folios after split ”h]”(j¯)�”}”(hŒ``unsigned int new_order``”h]”jS)�”}”(hjMIh]”hŒunsigned int new_order”…”�”}”(hjOIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjKIubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MhjGIubjÉ)�”}”(hhh]”jM)�”}”(hŒthe order of folios after split”h]”hŒthe order of folios after split”…”�”}”(hjfIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jbIh´MhjcIubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjGIubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jbIh´Mhj Iubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjïHubjM)�”}”(hŒ**Description**”h]”jŽ)�”}”(hjˆIh]”hŒ Description”…”�”}”(hjŠIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj†Iubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MhjïHubjM)�”}”(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žIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MhjïHubjM)�”}”(hXFThe anon rmap 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ŒeThe anon rmap lock is not required to be held, mmap_read_lock() or mmap_write_lock() should be held. ”…”�”}”(hj­Ih²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjµIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj­IubhŒ‘ 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­Ih²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjÇIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj­IubhŒ> should also be unmapped and isolated from LRU (if applicable)”…”�”}”(hj­Ih²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MhjïHubjM)�”}”(hŒ‰Upon return, the folio is not remapped, split folios are not added to LRU, folio_free_swap() is not called, and new folios remain locked.”h]”hŒ‰Upon return, the folio is not remapped, split folios are not added to LRU, folio_free_swap() is not called, and new folios remain locked.”…”�”}”(hjàIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mhjï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³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MhjïHubjM)�”}”(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).”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M hjïHubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´NubhÝ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(héŒfolio_split (C function)”Œ c.folio_split”hNt”auh1hÜhjKò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”…”�”}”(hj6Jh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhj2Jh²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mgubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEJh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj2Jh²hh³jDJh´Mgubhÿ)�”}”(hŒ folio_split”h]”j)�”}”(hŒ folio_split”h]”hŒ folio_split”…”�”}”(hjWJh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjSJubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhj2Jh²hh³jDJh´Mgubj8)�”}”(hŒ\(struct folio *folio, unsigned int new_order, struct page *split_at, struct list_head *list)”h]”(j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hjsJh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hjoJubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€Jh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjoJubh)�”}”(hhh]”j)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj‘Jh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjŽJubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”j“JŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèjYJsbŒ c.folio_split”†”asbuh1hhjoJubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±Jh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjoJubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj¿Jh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhjoJubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÌJh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjoJubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjkJubj>)�”}”(hŒunsigned int new_order”h]”(já)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(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áJubjá)�”}”(hŒint”h]”hŒint”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjáJubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjáJubj)�”}”(hŒ new_order”h]”hŒ new_order”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjáJubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjkJubj>)�”}”(hŒstruct page *split_at”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(hj6Kh²hh³Nh´Nubah}”(h]”h ]”j¨ah"]”h$]”h&]”uh1j›hj2Kubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCKh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj2Kubh)�”}”(hhh]”j)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjTKh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjQKubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jVKŒmodname”NŒ classname”Njìjï)�”}”jò]”j­JŒ c.folio_split”†”asbuh1hhj2Kubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrKh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj2Kubjr)�”}”(hjuh]”hŒ*”…”�”}”(hj€Kh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj2Kubj)�”}”(hŒsplit_at”h]”hŒsplit_at”…”�”}”(hj�Kh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj2Kubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjkJubj>)�”}”(hŒstruct list_head *list”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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¢Kubh)�”}”(hhh]”j)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hjÄKh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhjÁKubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jAŒreftype”jèŒ reftarget”jÆKŒmodname”NŒ classname”Njìjï)�”}”jò]”j­JŒ c.folio_split”†”asbuh1hhj¢Kubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâKh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¢Kubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjðKh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¢Kubj)�”}”(hŒlist”h]”hŒlist”…”�”}”(hjýKh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¢Kubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hjkJubeh}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hj2Jh²hh³jDJh´Mgubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hj.Jh²hh³jDJh´Mgubah}”(h]”j)Jah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jDJh´Mghj+Jh²hubj4)�”}”(hhh]”jM)�”}”(hŒ6split a folio at **split_at** to a **new_order** folio”h]”(hŒsplit a folio at ”…”�”}”(hj'Lh²hh³Nh´NubjŽ)�”}”(hŒ **split_at**”h]”hŒsplit_at”…”�”}”(hj/Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj'LubhŒ to a ”…”�”}”(hj'Lh²hh³Nh´NubjŽ)�”}”(hŒ **new_order**”h]”hŒ new_order”…”�”}”(hjALh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj'LubhŒ folio”…”�”}”(hj'Lh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mghj$Lh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hj+Jh²hh³jDJh´Mgubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGjcLjHjcLjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjmLh]”hŒ Parameters”…”�”}”(hjoLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjkLubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MkhjgLubj¤)�”}”(hhh]”(j©)�”}”(hŒ'``struct folio *folio`` folio to split ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hjŒLh]”hŒstruct folio *folio”…”�”}”(hjŽLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjŠLubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mhhj†LubjÉ)�”}”(hhh]”jM)�”}”(hŒfolio to split”h]”hŒfolio to split”…”�”}”(hj¥Lh²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Œ6``unsigned int new_order`` the order of the new folio ”h]”(j¯)�”}”(hŒ``unsigned int new_order``”h]”jS)�”}”(hjÅLh]”hŒunsigned int new_order”…”�”}”(hjÇLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjÃLubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mihj¿LubjÉ)�”}”(hhh]”jM)�”}”(hŒthe order of the new folio”h]”hŒthe order of the new folio”…”�”}”(hjÞLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jÚLh´MihjÛLubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj¿Lubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jÚLh´MihjƒLubj©)�”}”(hŒ6``struct page *split_at`` a page within the new folio ”h]”(j¯)�”}”(hŒ``struct page *split_at``”h]”jS)�”}”(hjþLh]”hŒstruct page *split_at”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhjüLubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MjhjøLubjÉ)�”}”(hhh]”jM)�”}”(hŒa page within the new folio”h]”hŒa page within the new folio”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³jMh´MjhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhjøLubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jMh´MjhjƒLubj©)�”}”(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)�”}”(hj7Mh]”hŒstruct list_head *list”…”�”}”(hj9Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj5Mubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´Mlhj1MubjÉ)�”}”(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 ”…”�”}”(hjPMh²hh³Nh´NubjŽ)�”}”(hŒ**list**”h]”hŒlist”…”�”}”(hjXMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjPMubhŒ# if not null, otherwise to LRU list”…”�”}”(hjPMh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MkhjMMubah}”(h]”h ]”h"]”h$]”h&]”uh1jÈhj1Mubeh}”(h]”h ]”h"]”h$]”h&]”uh1j¨h³jLMh´MlhjƒLubeh}”(h]”h ]”h"]”h$]”h&]”uh1j£hjgLubjM)�”}”(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³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MnhjgLubjM)�”}”(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›Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MmhjgLubjM)�”}”(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ªMh²hh³Nh´NubjŽ)�”}”(hŒ **split_at**”h]”hŒsplit_at”…”�”}”(hj²Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjªMubhXj 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ªMh²hh³Nh´NubjŽ)�”}”(hŒ **split_at**”h]”hŒsplit_at”…”�”}”(hjÄMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjªMubhŒY is marked in bracket: [order-4, {order-3}, order-3, order-5, order-6, order-7, order-8].”…”�”}”(hjªMh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MphjgLubjM)�”}”(hŒ-After split, folio is left locked for caller.”h]”hŒ-After split, folio is left locked for caller.”…”�”}”(hjÝMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MxhjgLubjM)�”}”(hŒ **Return**”h]”jŽ)�”}”(hjîMh]”hŒReturn”…”�”}”(hjðMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjìMubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MzhjgLubjM)�”}”(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, ”…”�”}”(hjNh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjNubhŒ might be split but not to ”…”�”}”(hjNh²hh³Nh´NubjŽ)�”}”(hŒ **new_order**”h]”hŒ new_order”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjNubhŒ, the caller needs to check)”…”�”}”(hjNh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M{hjgLubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKò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ÜhjKò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”…”�”}”(hjWNh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjSNh²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M†ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfNh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjSNh²hh³jeNh´M†ubjá)�”}”(hŒint”h]”hŒint”…”�”}”(hjtNh²hh³Nh´Nubah}”(h]”h ]”jíah"]”h$]”h&]”uh1jàhjSNh²hh³jeNh´M†ubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚Nh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhjSNh²hh³jeNh´M†ubhÿ)�”}”(hŒmin_order_for_split”h]”j)�”}”(hŒmin_order_for_split”h]”hŒmin_order_for_split”…”�”}”(hj”Nh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj�Nubah}”(h]”h ]”(jjeh"]”h$]”h&]”jjuh1hþhjSNh²hh³jeNh´M†ubj8)�”}”(hŒ(struct folio *folio)”h]”j>)�”}”(hŒstruct folio *folio”h]”(jœ)�”}”(hjJ,h]”hŒstruct”…”�”}”(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)�”}”(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”jèŒ reftarget”jÐNŒmodname”NŒ classname”Njìjï)�”}”jò]”jõ)�”}”jèj–NsbŒc.min_order_for_split”†”asbuh1hhj¬Nubjó)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîNh²hh³Nh´Nubah}”(h]”h ]”jÿah"]”h$]”h&]”uh1jòhj¬Nubjr)�”}”(hjuh]”hŒ*”…”�”}”(hjüNh²hh³Nh´Nubah}”(h]”h ]”j~ah"]”h$]”h&]”uh1jqhj¬Nubj)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj Oh²hh³Nh´Nubah}”(h]”h ]”jah"]”h$]”h&]”uh1jhj¬Nubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆjjuh1j=hj¨Nubah}”(h]”h ]”h"]”h$]”h&]”jjuh1j7hjSNh²hh³jeNh´M†ubeh}”(h]”h ]”h"]”h$]”h&]”jjj%ˆuh1høj&j'hjONh²hh³jeNh´M†ubah}”(h]”jJNah ]”(j+j,eh"]”h$]”h&]”j0ˆj1)j2huh1hòh³jeNh´M†hjLNh²hubj4)�”}”(hhh]”jM)�”}”(hŒ/get the minimum order **folio** can be split to”h]”(hŒget the minimum order ”…”�”}”(hj3Oh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hj;Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj3OubhŒ can be split to”…”�”}”(hj3Oh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M†hj0Oh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j3hjLNh²hh³jeNh´M†ubeh}”(h]”h ]”(jAŒfunction”eh"]”h$]”h&]”jFjAjGj]OjHj]OjI‰jJ‰jK‰uh1híh²hhjKò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Ž)�”}”(hjgOh]”hŒ Parameters”…”�”}”(hjiOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjeOubah}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MŠhjaOubj¤)�”}”(hhh]”j©)�”}”(hŒ'``struct folio *folio`` folio to split ”h]”(j¯)�”}”(hŒ``struct folio *folio``”h]”jS)�”}”(hj†Oh]”hŒstruct folio *folio”…”�”}”(hjˆOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jRhj„Oubah}”(h]”h ]”h"]”h$]”h&]”uh1j®h³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M‡hj€OubjÉ)�”}”(hhh]”jM)�”}”(hŒfolio to split”h]”hŒfolio to split”…”�”}”(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£hjaOubjM)�”}”(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³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M‰hjaOubjM)�”}”(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×Oh²hh³Nh´NubjŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjßOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hj×OubhŒ“ 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×Oh²hh³Nh´Nubeh}”(h]”h ]”•ƒ$h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MˆhjaOubjM)�”}”(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³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´MŒhjaOubjM)�”}”(hŒ#**folio**'s minimum order for split”h]”(jŽ)�”}”(hŒ **folio**”h]”hŒfolio”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j�hjPubhŒ’s minimum order for split”…”�”}”(hjPh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jLh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/mm-api:147: ./mm/huge_memory.c”h´M�hjaOubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jƒhjKòh²hh³Nh´Nubeh}”(h]”Œ more-memory-management-functions”ah ]”h"]”Œ more memory management functions”ah$]”h&]”uh1hµhh·h²hh³hÊh´Klubeh}”(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”jgPŒ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”}”jI.]”j>.asŒnameids”}”(jAPj>PjO.jL.jN3jI.jM3jJ3j6/j3/j¸/jµ/j11j.1jE3jB3j�j�j©ºj¦ºjýÊjúÊjr×jo×j,j,jî2jë2jùQjöQjj×jg×jHòjEòj9Pj6PuŒ nametypes”}”(jAP‰jO.‰jN3ˆjM3‰j6/‰j¸/‰j11‰jE3‰j�‰j©º‰jýʉjr׉j,‰jî2‰jùQ‰jj׉jHò‰j9P‰uh}”(j>Ph·jL.hËhëhôjjjÓjØjÂjÇjÒ j× j.j3jujzj¸j½jmjrjõjújj„jõjújj„jõ jú j"j„"jõ#jú#j_%jd%jÉ&jÎ&jø(jý(j'+j,+jI.jR.jJ3jR.j3/jc.jµ/j9/j.1j»/jB3j41j�jU3jr3jw3jY4j^4j£5j¨5jR6jW6j7j7j=j=j‰BjŽBjKEjPEj¬Ij±IjôKjùKj~NjƒNjaSjfSj·Uj¼Uj´Wj¹Wj2Zj7Zj‡[jŒ[j]j]j_j_jAajFajAdjFdj—ejœejXgj]gjjj jjGnjLnjÔojÙoj™rjžrj”tj™tj`vjevjÞwjãwjqyjvyjÝzjâzjÌ|jÑ|j“€j˜€j<…jA…je‰jj‰j‹j ‹jÖŒjÛŒjžŽj£Žj¦ºj�j4�j9�jk‘jp‘j;“j@“j–j –jß—jä—jl™jq™j�j"�jÈŸjÍŸjÄ£jÉ£j‹¥j�¥jF¨jK¨j ªjªj³«j¸«jè­jí­j°j°j–´j›´jN¶jS¶jô·jù·júÊj¬ºj#»j(»j½j½j ¿j¿jÁjÁj÷ÂjüÂjûÄjÅjQÇjVÇj§Éj¬Éjo×jËj,jËj.Ëj3ËjõÍjúÍj­Ðj²ÐjcÒjhÒj,Õj1Õjå×jê×jwÚj|Új0Ýj5ÝjçÞjìÞj²áj·áj•ãjšãj}æj‚æj¶èj»èj^êjcêjsìjxìjîjîj„ïj‰ïjVñj[ñjþòjój¦ôj«ôjöjöjÖøjÛøj«ûj°ûjdjij jj~jƒjÙ jÞ j¾jÃjjjojyj~j‘j–jgjljjjojm!jr!j+$j0$jº&j¿&j2)j7)jë2j,j†-j‹-jB0jG0jöQjñ2j3j3j³4j¸4j77j<7jÆ8jË8j;j;jc=jh=jó>jø>jšAjŸAjdFjiFj«Hj°HjKj$KjáLjæLj‰NjŽNjXPj]Pjg×jüQjRjRj½TjÂTjmWjrWj¨Yj­YjJ[jO[j^j$^jÉ`jÎ`jqbjvbj‚dj‡dj¥fjªfj7ij˜jC˜jƒ›jˆ›jÏ�jÔ�j~ŸjƒŸj-¡j2¡j‘£j–£jÔ¥jÙ¥j•¨jš¨jªj#ªj­j­jì¯jñ¯j³j³jà´jå´j—¶jœ¶j?¸jD¸jºjºj×¼jܼj‰¾j޾jgÂjlÂjmÆjrÆjbÈjgÈj~ÊjƒÊjÌj Ìj�Íj•ÍjÏjÏj«Ðj°Ðj4Òj9Òj§Ôj¬ÔjEòju×j’×j—×jGÙjLÙjíÚjòÚj©Þj®Þjêâjïâjåj$åjBèjGèjáêjæêj¨ìj­ìjðjðj6PjKòjhòjmòj!õj&õjªøj¯øjÏûjÔûjÿþjÿjjj jj> jC j j jãjèjÓjØjÕjÚjújÿj‰jŽj.j3jújÿj¼"jÁ"j[%j`%jT(jY(jð*jõ*jŒ-j‘-jƒ/jˆ/jj2jo2jã4jè4j67j;7j 9j%9j^;jc;jì=jñ=jÀ?jÅ?j`AjeAjËBjÐBj“Ej˜Ej»GjÀGjãHjèHjKjKjINjNNjQj„QjñTjöTjSXjXXjOZjTZjK\jP\j_j_j*aj/ajycj~cj6fj;fjþijjj~mjƒmjüojpjérjîrj7uj¢j‹¤j�¤jõ¥jú¥jX§j]§j‰©jŽ©j$«j)«j¿¬jĬj�®j†®j+°j0°jí±jò±j‰³j޳j¶j ¶j£¶j¨¶j=¸jB¸j½¹j¹j|»j�»jA½jF½j¿j¿j¼ÀjÁÀj~ÂjƒÂjCÄjHÄjÆjÆj—ÇjœÇjDÉjIÉjËjËjöÌjûÌjwÎj|ÎjgÐjlÐjÒjÒjyÓj~ÓjÕjÕj—ÖjœÖj?ØjDØjUÚjZÚjýÛjÜjuÞjzÞj7àj<àjÞájãáj½ãjÂãjæjæjkèjpèjÂêjÇêj¥ìjªìjRîjWîjÿïjðj·ñj¼ñjöójûójüõjöjÒ÷j×÷jŠúj�új§üj¬üjþjþj½ÿjÂÿj>jCj¿jÄjZj_jŸj¤j j%jx j} j¿ jÄ jÖjÛjíjòjjjj!jjjjjójøjëjðjÐ jÕ j\#ja#jÉ&jÎ&jZ)j_)jw,j|,jÖ/jÛ/jG3jL3ja5jf5jÜ7já7jƒ9jˆ9jc;jh;jÿ<j=jã=jè=jí>jò>jBjBjLEjQEj:Gj?GjïHjôHjšJjŸJj€Lj…Lj.Nj3NjRj$Rj Sj¥Sj.Wj3Wj{Zj€ZjW^j\^jýajbj'dj,dj"gj'gj¡jj¦jjünjojérjîrj?vjDvj�yj”yjq|jv|jSjXj£‚j¨‚j……jŠ…jgˆjlˆj«Šj°ŠjÈŒjÍŒj‘j ‘j°•jµ•jÏ—jÔ—j_™jd™jpœjuœjîŸjóŸj¨£j­£jP§jU§jÁ®jÆ®j£±j¨±jû³j´jT·jY·j{ºj€ºj½j½j¿¿jÄ¿j=ÁjBÁj?ÃjDÃjÏÄjÔÄjMÆjRÆjËÇjÐÇjIÉjNÉj³Êj¸Êj1Ìj6Ìj´Îj¹Îj2Ðj7ÐjyÒj~Òj@ÔjEÔj•ÕjšÕj§Øj¬Øj,Új1ÚjâÝjçÝjrájwájòãj÷ãj‚åj‡åjdçjiçjåèjêèj!ëj&ëjÛìjàìj€îj…îj‘ñj–ñjâójçójÊõjÏõj]÷jb÷jgùjlùj[ûj`ûjÍýjÒýj2j7j½jÂj>jCjújÿj9j>j j j– j› jšjŸjjjjjjj©j®j¢j§jQjVjµ jº j"j"j„$j‰$j�&j¢&j )j)jÖ*jÛ*jæ.jë.jª0j¯0jL2jQ2j¡4j¦4jï6jô6j©9j®9jí<jò<jn?js?j¹Aj¾Aj¹Dj¾Dj¹Fj¾Fj[Hj`HjJj$Jj»KjÀKjJMjOMjLOjQOj\QjaQjîSjóSjÁVjÆVj\j\j…^jŠ^j ajaj8dj=dj¹ej¾ej:gj?gjjj jjvlj{lj–nj›nj¯rj´rj=ujBuj¾vjÃvjNxjSxjízjòzjò|j÷|j¦~j«~jÉ�jÎ�jáƒjæƒj‡j ‡jʉjωj–�j›�j‘‘j–‘j”j”jw–j|–jÊ™jÏ™jü›jœjq�jv�j«Ÿj°Ÿj¢j ¢jö£jû£jÖ¥jÛ¥j3¨j8¨jŸªj¤ªj�­j¢­j¡°j¦°j´j´j¶j¶j~¸jƒ¸jÿºj»j€½j…½j5¿j:¿j‹Âj�ÂjÄj ÄjVÅj[Åj¥ÆjªÆj&Èj+ÈjÂÉjÇÉjŒËj‘ËjmÍjrÍj¹Ïj¾ÏjLÑjQÑj¢Ój§Ój»×jÀ×jÛj ÛjúÞjÿÞj ájájªãj¯ãjJæjOæjKéjPéjˆëj�ëjíjíj˜ïj�ïjòjòj2õj7õjìöjñöjùj$ùj új¥újþjþjŒj‘j!j&j}j‚jW j\ jÐ jÕ jš jŸ jâjçj€j…j=jBjNjSjÞjãj$j)jNjSjÏjÔj3!j8!j]$jb$jé%jî%j"(j'(j2*j7*jä,jé,j–/j›/j@2jE2ja5jf5jÂ8jÇ8jµ>jº>jBjBjµGjºGj)Jj.JjJNjONuŒ 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ÑPsbah}”(h]”h ]”h"]”h$]”h&]”uh1jLhjÎPubah}”(h]”h ]”h"]”h$]”h&]”Œlevel”KŒtype”ŒINFO”Œsource”hÊŒline”Kuh1jÌPubaŒ transformer”NŒ include_log”]”Œ decoration”Nh²hub.